我在for循环中使用setString
时遇到问题。
我要将此行插入数据库中的表
12.S777.V77.D88.wagon / 1.Train / 889
和777代表二等舱乘客的数量。问题是乘客的数量是可变的,可以采取3个案例,如下例所示:
12.F123.S777.V77.wagon / 1.Train / 889
代码
String rs="insert into ligne1(date,immatr,number_passenger,version,wagon,train) VALUES(?,?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(rs);
ps.setString(1, message[0]);
ps.setString(2, message[1]);
ps.setString(3, message[2]);
int b=0;
for(b=4;b<chaine.length-1;b++){
ps.setString(b,melement[b]);
}
//I'm stuck here ! :(
ps.setString(5, message[3]);
ps.setString(6, message[4]);
ps.executeUpdate();
答案 0 :(得分:1)
看起来您的输入格式具有可变数量的字段。在这种情况下,将字符串拆分为.
是不够的,您必须解析数据。
我为一个货车实现了一个简单的值持有者类,并为一个基于输入字符串创建实例的逻辑实现了一些逻辑。像:
public class Ligne1 {
private String date;
private int seatsInFirstClass;
private int seatsInSecondClass;
// ...
public Ligne1(String data) {
String values[] = data.split("\.");
for (String value:values) {
if (value.startsWith("F")) {
setSeatsInFirstClass(value);
} else if (value.startsWith("wagon")) {
setWagon(value);
}
// ...
}
}
private void setSeatsInFirstClass(String value) {
seatsInFirstClass = Integer.parseInt(value.substring(1));
}
public int getSeatsInFirstClass() {
return seatsInFirstClass;
}
// if we need the total
public int getNumberOfPassengers() {
return seatsInFirstClass + seatsInSecondClass;
}
// ...
}
最后,您使用Ligne1
的实例及其getter方法在预准备语句中设置值。
(注意:代码仅提供我选择的解决方案的提示,它不完整且不处理源数据中的错误)