2015-07-07 6 views
0

Я начинаю программировать на Java. Я пытаюсь извлечь данные из одной таблицы базы данных oracle и вставить в другую таблицу базы данных, используя код java, и это успешно. Однако я не знаю, для реализации логики вставки пакета и увеличения размера выборки в этом коде. Любой может помочь. Моя цель - собрать 100 строк и вставить 100 строк в одну поездку туда и обратно, а не одну за другой. Заранее спасибо.выберите одну базу данных оракула и пакетную вставку в другую базу данных оракула с помощью java

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


public class Dbtodb { 
    public static void main(String[] args) { 
     try 
{ 
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@ipaddress1:port1:server1","user1","password1"); 
Connection con1 = DriverManager.getConnection("jdbc:oracle:thin:@ipaddress2:port2:server2","user2","password2"); 
String sql = "INSERT INTO test_GROUPS("+ "GROUP_NO,"+ "GROUP_NAME,"+ "BUYER,"+ " MERCH,"+" DIVISION)"+ "VALUES(?,?,?,?,?)"; 
Statement statement = 
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 
PreparedStatement pstmt = con1.prepareStatement(sql); 
ResultSet rs = statement.executeQuery("SELECT * FROM groups"); 
while (rs.next()) 
{ 
    int gpnum = rs.getInt(1); 
String gpname = rs.getString(2); 
    int byr = rs.getInt(3); 
    int merch = rs.getInt(4); 
    int divisn = rs.getInt(5); 
pstmt.setInt(1, gpnum);  
pstmt.setString(2, gpname); 
pstmt.setInt(3, byr);   
pstmt.setInt(4, merch); 
pstmt.setInt(5, divisn); 
pstmt.executeUpdate(); 
} 
con.close(); 
con1.close(); 
} 
catch (SQLException e) 
{ 
System.out.println("could not get JDBC connection: " +e); 
} 

    } 
} 
+2

Не ответ, но: вы не следует смешивать 'SELECT *' с получением элементов из 'ResultSet' по индексу. Порядок, в котором 'SELECT *' возвращает столбцы в 'ResultSet', не гарантируется. Или явно укажите столбцы в строке запроса, либо используйте версии 'rs.getInt()' и т. Д., Которые принимают имена столбцов. – dcsohl

ответ

1

Чтобы извлечь 100 строк в то время:

ResultSet rs = statement.executeQuery("SELECT * FROM groups"); 
rs.setFetchSize(100); // <-- Add this to fetch 100 rows at a time. 

Чтобы вставить 100 строк в то время:

PreparedStatement pstmt = con1.prepareStatement(sql); 
((OraclePreparedStatement)pstmt).setExecuteBatch(100); // <-- Add this 
ResultSet rs = statement.executeQuery("SELECT * FROM groups"); 

... выше изменит поведение pstmt.executeUpdate(), так что он кумулирует вставки и отправляет их только в базу данных после достижения размера партии.

Вы также будете нуждаться в последний раз небольшие изменения, чтобы убедиться, что ваша последняя партия всегда отсылается:

((OraclePreparedStatement)pstmt).sendBatch(); // <-- This ensures that any queued inserts get sent to the database. 
con.close(); 
con1.close(); 

Документация ссылки:

Смежные вопросы