[英]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()'"+")");
您必須遍歷ResultSet
並INSERT
每一行。
我建議使用PreparedStatement
綁定變量和批處理INSERT
。
我建議您進行很多其他更改,但首先要進行更改並使代碼正常工作。
這樣嵌套兩個try / catch塊是一個壞主意。 一個會做。
最后關閉您的資源。
這只是一個例子,但是為什么您必須選擇SELECT並將數據帶到中間層呢?
為什么還要重新插入已經存在的數據?
提出的問題毫無意義 。 投票關閉。
另一種方法是在PostgreSQL中使用DBLinks 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.