0

すでに存在する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デバッグを確認するためにいくつかのステートメントを追加した後の実行出力は次のとおりです。

ここに画像の説明を入力してください

DBには挿入された最後の行のみが含まれます

ここに画像の説明を入力してください

4

3 に答える 3

1

SQLは、更新する行を指定するWHERE句を追加しません。したがって、反復ごとに、列内のすべてのレコードのcol4フィールドが値に更新されます。最後のものは残っているアップデートです。

于 2012-09-23T18:00:33.160 に答える
0

更新クエリを使用して値を挿入しています。使用する

INSERT INTO db.table (col4) VALUES (?)
于 2012-09-23T18:10:23.870 に答える
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();
}
    }
于 2012-09-23T18:02:46.550 に答える