我正在尝试更新已存在的MySQL表中的列。必须从文本文件中读取值,然后必须将它们插入指定的列中。
我尝试了以下内容:
int counter=0;
while((fileLine=in.readLine())!=null)
{
System.out.println("Line read is: "+fileLine);
//execute db insertion
try {
//insert in the database
Query= "update db.table set col4=?"; //database
preparedStmt3 = DBConnection.con.prepareStatement(Query);
preparedStmt3.setString (1, fileLine);
preparedStmt3.executeUpdate();
System.out.println("Complete update statement for row: "+counter);
counter++;
} catch (Exception e) {
System.out.println("DB_Error:_"+ e.toString());
}
} //end while loop
我尝试输出fileLine
值,看起来是正确的,并且每次循环都会正确更改。但是,在我运行程序并检查数据库之后,我发现插入的值只是最后一行(并且在所有记录中重复,这不是我应该做的,因此插入记录中的每一行) 。造成这个问题的原因是什么?
编辑: 该文本文件包含以下行: AAA BBB CCC DDD EEE FFF
我添加一些printline
语句以查看调试后的运行输出如下:
虽然数据库包含仅插入的最后一行
答案 0 :(得分:1)
您的SQL不会添加WHERE子句来指定要更新的行。因此,在每次迭代时,列中的所有记录都将其col4
字段更新为该值。最后一个是剩下的更新。
答案 1 :(得分:0)
试试这个,
Connection conn = ConnectionBean.getInstance().getDBConnection();
int counter=0;
String fileLine;
BufferedReader in;
String query1 = "select id from test"; // get all the id's from the table you wanna do the update
ArrayList<Integer> al = new ArrayList<Integer>(); // store them in an arraylist
try {
PreparedStatement stmnt = conn.prepareStatement(query1);
ResultSet rs = stmnt.executeQuery();
while(rs.next()) {
al.add(rs.getInt("id"));
}
}
catch(Exception ex) {
ex.printStackTrace();
}
try {
in = new BufferedReader(new FileReader("file1.txt"));
int h=1;
while((fileLine=in.readLine())!=null && al.size()>0)
{
String query="UPDATE chaitu.test SET col=? WHERE id="+h ;
PreparedStatement statement = conn.prepareStatement(query);
statement.setString(1, fileLine);
statement.executeUpdate();
h++;
} //end while loo
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 2 :(得分:0)
您正在使用更新查询来插入值。使用
INSERT INTO db.table (col4) VALUES (?)