gpt4 book ai didi

java - 分割一个sql结果集,然后使用数组的每一部分进行查询

转载 作者:行者123 更新时间:2023-11-29 18:42:28 25 4
gpt4 key购买 nike

我有 3 个数据库表 matieres_demandees(idmatiere,name,ID_pre...)、courses_history(IDetudiant , ID_matiere,note...) 和 no_pre(id matiere , name...)。

在 matieres_demandees 中,某些记录有多个 ID_pre,而其他记录只有一个。如果有一个ID_pre,我必须将其与courses_history表中的ID_matiere连接(matieres_demandees.ID_pre=courses_history.ID_matiere),并查看ID_pre的注释是否低于40,在这种情况下,我必须在no_pre表中插入name和id_matiere。

如果记录中存在多个由“/”分隔的 ID_pre,例如(ID1/ID2...),我必须按“/”拆分,然后将每个 ID_pre 与 course_history.ID_matiere 连接(matieres_demandees.ID_pre=courses_history.ID_matiere)并查看ID_pre的注释是否低于40。 如果多个 ID 中至少有一个有注释 <40,那么我必须将 name 和 id matiere 插入 no_pre。

换句话说,我有多条记录,对于每一条记录,我都必须查看 ID_pre 的注释,如果一条注释是 <40,我必须插入...

我正在处理此代码,但出现此错误(严重:nulljava.sql.SQLException:结果集开始之前)

请帮忙

cn3.R = cn3.sat.executeQuery("select distinct matieres_demandees.ID_pre,matieres_demandees.ID_matiere,matieres_demandees.name 
from matieres_demandees,courses_history
where courses_history.ID_etudiant="+id+" and exists
(select matieres_demandees.ID_pre from matieres_demandees)");

int n=1;

while (cn3.R.next()) {
String name = cn3.R.getString("matieres_demandees.name");
String idmatiere = cn3.R.getString("matieres_demandees.ID_matiere");
String idpre = cn3.R.getString("matieres_demandees.ID_pre");

if (idpre.contains("/")) {
String[] pre2 = idpre.split("/");

for (int i = 0; i < pre2.length; i++) {
System.out.println(pre2[i]);
System.out.println("here");

int nat = 0;

cn3.R = cn3.sat.executeQuery("select courses_history.note
from matieres_demandees,courses_history
where courses_history.ID_matiere='"+pre2[i]+"' and courses_history.ID_etudiant="+id);

int ab=cn3.R.getInt("courses_history.note");

if (ab < 40) {
nat = nat + 1;
} else {
nat = nat + 0;
}

if(nat >= 1) {
cn3.sat.executeUpdate("insert into no_pre "+name+","+idmatiere);
}
}
} else {
int nat=0;

cn3.R = cn3.sat.executeQuery("select courses_history.note
from matieres_demandees,courses_history
where courses_history.ID_matiere='"+idpre+"' and courses_history.ID_etudiant="+id);

int ab1=cn3.R.getInt("courses_history.note");

if (ab1 < 40) {
nat = nat + 1;
} else {
nat = nat + 0;
}

if(nat >= 1) {
cn3.sat.executeUpdate("insert into no_pre "+name+","+idmatiere);
}
}

n++;
}

最佳答案

<强> SEVERE: null java.sql.SQLException: Before start of result set当你的光标没有放置在正确的位置时,通常会发生这种错误。你需要调用类似rs.next()的东西。 ,您对第一个结果 while (cn3.R.next()) 执行了此操作但是 在调用 n3.sat.executeQuery 后,您没有获得第二个和第三个结果集在你的if里面和else声明。

像这样:

if (idpre.contains("/")){
//...some code
for (int i=0;i<pre2.length;i++){
//some code...
cn3.R = n3.sat.executeQuery("select courses_history.note from matieres_demandees,courses_history where courses_history.ID_matiere='"+pre2[i]+"' and courses_history.ID_etudiant="+id);
while(cn3.R.next()){
//some code.....
}
}
}
else {
//some code
cn3.R= cn3.sat.executeQuery("select courses_history.note from matieres_demandees,courses_history where courses_history.ID_matiere='"+idpre+"' and courses_history.ID_etudiant="+id);
while(cn3.R.next()){
//some code.....
}

}

编辑:另外,在第二次执行Query之前,您可能想为第二个查询创建不同的连接,我不确定是否有必要,但我通常会这样做。

这是我常用的模板,大家可以引用一下。我希望这有帮助:

Statement stmt = null;
ResultSet rs = null;
stmt = this.con.createStatement();

try {
stmt = this.con.createStatement();
SQL = "YOUR QUERY \n" +
"and more query";
logger.debug(SQL);
rs = stmt.executeQuery(SQL);
while (rs.next()) {
//do stuff you want with result set
}
} catch (Exception e) {
logger.debug(e.getMessage(), e);
} finally {
close(rs, stmt);
}

//execute another query
try {
stmt = this.con.createStatement();
SQL = "another query to be execute";
logger.debug(SQL);
rs = stmt.executeQuery(SQL);
while (rs.next()) {
//do whateever you want to the result
}
} catch (Exception e) {
logger.debug(e.getMessage(), e);
} finally {
close(rs, stmt);
}

我希望这对您有所帮助,欢迎来到 StackOverflow。如果您发现此答案或任何其他答案可以解决您的问题,请将其标记为解决方案。这将有助于社区和将来遇到同样问题的程序员同行。谢谢。

关于java - 分割一个sql结果集,然后使用数组的每一部分进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44863044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com