0

学生IDを受け取り、そのIDがmysqlテーブルに存在するかどうかを確認するプログラムを作成しています。存在する場合は、それが存在する行全体を取得して、その行を別のテーブルにコピーしたいと思います。現在、プログラムはテーブル内のすべての行を他の行にコピーするだけです。助けていただければ幸いです。以下にコードのスニペットを挿入しました。

try {
    String compareText = IDField.getText().trim();

    if(compareText.length() > 0){
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/simlab","root","password");
        System.out.println("Connected to database");

        Statement stmt1     = conn.createStatement();
        ResultSet rs1       = stmt1.executeQuery("select * from students where LUID='"+IDField.getText()+"' ");

        boolean isPresent = rs1.next();

        if (isPresent)
        {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/simlab","root","password");
            System.out.println("Connected to database");

            int rows = stmt1.executeUpdate("INSERT INTO skills(ID_Student,LUID_Student)SELECT ID, LUID FROM students");

            if (rows == 0) 
            {
                System.out.println("Don't add any row!");
            } 
            else 
            {
               System.out.println(rows + " row(s)affected.");
               conn.close();
            }

            //System.out.println("Already exists!!");
        }
4

3 に答える 3

1

単一の SQL ステートメントですべてを実行できます。

INSERT INTO <Dest-Table>
(SELECT * FROM <Src-Table> WHERE ID=?);

存在する行のみをコピーします。

于 2013-03-23T19:07:44.743 に答える
0

この行が原因だと思われます:

int rows = stmt1.executeUpdate("INSERT INTO skills(ID_Student,LUID_Student)SELECT ID, LUID FROM students");

その行が解析された場合、SELECTステートメントにはWHERE句がないため、すべての行が取得され、すべてが挿入されます。

于 2013-03-23T18:56:27.030 に答える