如何在java中循环sql语句
我正在尝试使用动态sql语句创建for循环:如何在java中循环sql语句,java,mysql,sql,Java,Mysql,Sql,我正在尝试使用动态sql语句创建for循环: for(int i = 0; i < size; i++) { ps2 = db.prepareStatement("select * from student where id=?"); ps2.setInt(1,studList[i]); rs2=ps2.executeQuery(); while(rs2.next()){
for(int i = 0; i < size; i++) {
ps2 = db.prepareStatement("select * from student where id=?");
ps2.setInt(1,studList[i]);
rs2=ps2.executeQuery();
while(rs2.next()){
list1.add(new Student(rs2.getInt("id"), rs2.getString("name"), rs2.getString("city"));
}
rs2.close();
ps2.close();
}
for(inti=0;i
studList[i]是一个包含所有学生ID的数组,变量“size”是该数组的长度。此代码的问题是,列表中只添加了一个元素(对应于第一个学生ID)。
我注意到,只要studList[I]的值不变,代码就会进入“while(rs2.next())”中。为什么呢?看起来逻辑不错 首先,有了它,代码会更好
- 第一次使用时的本地声明,否则ps2、rs2、ps3、rs3等一个风险未被发现
- 尝试使用即使在异常/返回时也关闭的资源
String sql=“从学生id=?”中选择姓名、城市”;
try(PreparedStatement ps2=db.prepareStatement(sql)){
对于(int i=0;i
因此,之前可能会发生错误:数组填充错误,数据库学生表损坏
一个初学者的错误是使用新的字段值重用对象(Student)。将同一对象添加到列表中会多次复制最后一个Student的数据
这可能是因为在最初的代码中,代码被称为重用ps2之类的东西。看起来逻辑不错 首先,有了它,代码会更好
- 第一次使用时的本地声明,否则ps2、rs2、ps3、rs3等一个风险未被发现
- 尝试使用即使在异常/返回时也关闭的资源
String sql=“从学生id=?”中选择姓名、城市”;
try(PreparedStatement ps2=db.prepareStatement(sql)){
对于(int i=0;i
因此,之前可能会发生错误:数组填充错误,数据库学生表损坏
一个初学者的错误是使用新的字段值重用对象(Student)。将同一对象添加到列表中会多次复制最后一个Student的数据
在这里,可能是在原始代码中,代码被称为重用ps2或类似的东西。将
rs2.close();ps2.close();
放在for循环之外并进行检查。@dkb相同的结果更改while(rs2.next()){
与while(rs2.hasNext()){
,在while循环结束时rs2=rs2.next();
,这就是我的意思:@dkb hasNext()return'not find symbol'错误尝试以下方法:将rs2.close();ps2.close();
置于for循环之外并检查。@dkb same resultchangewhile(rs2.next()){
与while(rs2.hasNext()){
,并在while循环结束时rs2=rs2.next();
,这就是我的意思:@dkb hasNext()return'not find symbol'error尝试以下方法:相同的错误,只在'while(rs2.next())'中出现一次,中的while
没有问题(如果,可能是),因为id
是主键。但这不是我期望的结果,列表应该有2个条目,但只有1个,第二个id在数据库中?(而且newstudent
不会像静态
字段那样出现初学者错误。)printfs确实显示[0]…/-…/[1]…/无。那么它必须是数据库或显示的代码不是使用的代码。原则上,您的代码是正确的。相同的错误,只在'while(rs2.next())'中出现一次,在中出现一次,而就可以了(如果,则可能是),因为id
是主键。但这不是我期望的结果,列表应该有2个条目,但只有1个,第二个id在数据库中?(而且newstudent
不会像静态
字段那样出现初学者错误。)printfs确实显示[0]…/-…/[1]…/无。那么它必须是数据库,或者显示的代码不是使用的代码。原则上,您的代码是正确的。
String sql = "select name, city from student where id=?";
try (PreparedStatement ps2 = db.prepareStatement(sql)) {
for (int i = 0; i < size; i++) {
int id = studList[i];
ps2.setInt(1, id);
try (ResultSet rs2 = ps2.executeQuery()) {
System.out.printf("[%d] %d%n", i, id);
while (rs2.next()) {
System.out.printf("- %s%n", rs2.getString("name"));
list1.add(new Student(id, rs2.getString("name"), rs2.getString("city"));
}
}
}
}