0

私はJavaを初めて使用し、old_dbからnew_dbにデータを挿入しようとしています。私はそれを行うプログラムを試しましたが、「構文エラー」のようなエラーが表示され、エラーを見つけることができません。

プログラムは2つのpostgresdbに接続し、テーブル内のデータを選択して別のデータベーステーブルに挿入する必要があります。両方のテーブルに同じフィールドとデータ型があります。

import java.sql.* ;   
public class con2 
{ 
public static void main( String[] args ) 
{ 
try 
{ 
   Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/old_db","postgres","password");
try
{
   Connection con1 = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/new_db","postgres","password");

 Statement st = con.createStatement();
 Statement st1 = con1.createStatement();   
ResultSet rs = st.executeQuery("SELECT * FROM users"); 



  int val = st1.executeUpdate("insert into users("+"'rs()'"+")");

        rs.close();
                        st.close(); 
                    st1.close(); 



}
catch(SQLException e) 
  { 
         System.out.println( "could not get JDBC connection for new_db: " + e ); 
  } 
}
catch(SQLException e) 
  { 
         System.out.println( "could not get JDBC connection for  old_db: " + e ); 
  } 
} 
} 

私はjdbc4を使用しています

4

3 に答える 3

7

私は以下に示すようなプログラムを書きました、それは働いています。

提案をありがとう。

import java.sql.*;
import java.io.*;
import java.util.*;

public class test1 {

    public static void main(String[] argv) throws Exception {
        try {
            Connection con = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/old","user","pass");
            Connection con1 = DriverManager.getConnection( "jdbc:postgresql://localhost:5432/new","user","pass");

            String sql = "INSERT INTO users("+ "name,"+ "active,"+ "login,"+ "password)"+ "VALUES(?,?,?,?)";

            Statement statement = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

            PreparedStatement pstmt = con1.prepareStatement(sql);

            ResultSet rs = statement.executeQuery("SELECT * FROM users");
            while (rs.next()) {
                String nm = rs.getString(2);
                Boolean ac = rs.getBoolean(3);
                String log = rs.getString(4);
                String pass = rs.getString(5);

                pstmt.setString(1, nm);
                pstmt.setBoolean(2, ac);
                pstmt.setString(3, log);
                pstmt.setString(4, pass);

                pstmt.executeUpdate();
            }
        } catch (SQLException e) {
            System.out.println("could not get JDBC connection: " +e);
        } finally {
            con.close();
            con1.close();
        }
    }

}
于 2012-11-27T11:04:09.237 に答える
3

これはかなり間違っています:

  int val = st1.executeUpdate("insert into users("+"'rs()'"+")");

ResultSetINSERT各行を繰り返す必要があります。

PreparedStatement変数とバッチをバインドすることをお勧めしますINSERT

他にも変更することをお勧めすることがたくさんありますが、それから始めてコードを機能させてください。

このようにネストされた2つのtry/catchブロックは悪い考えです。1つはします。

finallyブロックでリソースを閉じます。

これは単なる例ですが、なぜデータを選択して中間層に移動する必要があるのでしょうか。

そして、なぜすでにそこにあるデータを再挿入するのですか?

提起された質問は、まったく意味がありません。終了するための投票。

于 2012-11-25T01:01:18.373 に答える
1

これを行うもう1つの方法は、PostgreSQLでDBLinksを使用することです。

于 2012-11-27T12:23:19.020 に答える