重复更新MySQL表中的行

时间:2012-09-23 17:56:19

标签: java mysql

我正在尝试更新已存在的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语句以查看调试后的运行输出如下:

enter image description here

虽然数据库包含仅插入的最后一行

enter image description here

3 个答案:

答案 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 (?)