我想使用JDBC將數據從文件複製到PostgreSQL數據庫。我正在使用JDBC語句對象將文件複製到數據庫中。它非常緩慢。如何使用JDBC將數據從文件複製到PostgreSQL?
我開始知道我們也可以使用copy out命令將文件複製到數據庫。但是,我如何處理JDBC。即使是在JDBC中有一個副本的好參考資料也會有所幫助。
PS:在此先感謝
我想使用JDBC將數據從文件複製到PostgreSQL數據庫。我正在使用JDBC語句對象將文件複製到數據庫中。它非常緩慢。如何使用JDBC將數據從文件複製到PostgreSQL?
我開始知道我們也可以使用copy out命令將文件複製到數據庫。但是,我如何處理JDBC。即使是在JDBC中有一個副本的好參考資料也會有所幫助。
PS:在此先感謝
這工作...
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;
public class PgSqlJdbcCopyStreamsExample {
public static void main(String[] args) throws Exception {
if(args.length!=4) {
System.out.println("Please specify database URL, user, password and file on the command line.");
System.out.println("Like this: jdbc:postgresql://localhost:5432/test test password file");
} else {
System.err.println("Loading driver");
Class.forName("org.postgresql.Driver");
System.err.println("Connecting to " + args[0]);
Connection con = DriverManager.getConnection(args[0],args[1],args[2]);
System.err.println("Copying text data rows from stdin");
CopyManager copyManager = new CopyManager((BaseConnection) con);
FileReader fileReader = new FileReader(args[3]);
copyManager.copyIn("COPY t FROM STDIN", fileReader);
System.err.println("Done.");
}
}
}
[pedal-dialect](https://github.com/eclecticlogic/pedal-dialect)允許您直接使用JPA實體的複製命令。 –
鑄造'(BaseConnection)con'可能不起作用;在某些情況下,連接會以某種其他連接類型進行封裝(例如,在使用連接池或間諜時)。對我來說有效的是使用'con.unwrap(BaseConnection.class)'代替。 – avivr
(基於aliasmrchips'答案:)如果你有一個的Groovy環境(像我一樣使用它ANT內)你可以這樣做(用Postgres代替Oracle的細節):
// exec.groovy
this.class.classLoader.rootLoader.addURL('${postgres-jdbc-driver-path}')
PgScript.load()
// PgScript.groovy
// (we cannot use the org.postgres.* classes in exec.groovy already!)
import java.io.FileReader
import java.sql.DriverManager
import org.postgresql.copy.CopyManager
import org.postgresql.core.BaseConnection
class PgScript {
public static void load() {
new CopyManager((BaseConnection) DriverManager.getConnection(
'${jdbc-db-url}', '${db-usr}', '${db-usr-pass}')
).copyIn('COPY t FROM STDIN', new FileReader('${sqlfile}'))
}
}
向我們展示代碼,我們可以解釋爲什麼它很慢。特別是,你使用批量更新?你在使用準備好的語句嗎? –
是的,我正在做批量更新。 – Reddy