在for循环中使用SetString

时间:2011-08-11 10:45:04

标签: java for-loop prepared-statement

我在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();

1 个答案:

答案 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方法在预准备语句中设置值。

注意:代码仅提供我选择的解决方案的提示,它不完整且不处理源数据中的错误