簡體   English   中英

JDBC程序,用於從一個表中選擇數據並插入到不同數據庫中的另一表中

[英]JDBC program to select data from one table and insert into another table in different db

我是Java的新手,我正嘗試將數據從old_db插入new_db。 我試過一個程序來執行此操作,它顯示一個錯誤,如“語法錯誤”找不到錯誤。

該程序必須獲取到2個postgres db的連接,並在一個表中選擇數據並將其插入另一個數據庫表中。 兩個表具有相同的字段和數據類型。

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

我編寫了一個如下所示的程序,它正在工作。

感謝您的建議。

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();
        }
    }

}

這是完全錯誤的:

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

您必須遍歷ResultSetINSERT每一行。

我建議使用PreparedStatement綁定變量和批處理INSERT

我建議您進行很多其他更改,但首先要進行更改並使代碼正常工作。

這樣嵌套兩個try / catch塊是一個壞主意。 一個會做。

最后關閉您的資源。

這只是一個例子,但是為什么您必須選擇SELECT並將數據帶到中間層呢?

為什么還要重新插入已經存在的數據?

提出的問題毫無意義 投票關閉。

另一種方法是在PostgreSQL中使用DBLinks

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM