Java iBatisを使用してOracleデータベースに大量にデータを挿入
2637 ワード
Java iBatisを使用してOracleデータベースに大量にデータを挿入
私たちのデータはライブラリ(mysql,oracle)にまたがっているので、単独でデータを取るには何度も遍歴する必要があるので、mysqlデータベースから取り出したデータをoracleデータベースで結果セットに対応するテンポラリ・テーブルを作成し、挿入してからクエリーを統一したいと思っています(その間に遍歴してデータを再編成する時間が節約されます).
1.まずmysqlデータベースから対応データを検索する
sql:
2.oracleデータベースで対応するテンポラリ・テーブルを作成します(対応するデータベースで事前に実行する必要があります)
drop table report_user ;create table report_user( name VARCHAR2(20), age VARCHAR2(10), sex VARCHAR2(6));
3.挿入されたDao定義は、一括挿入データの量に制限があることに注意してください.ここでは、1000個ずつ挿入するデータを定義します.
パラメータタイプはList、パラメータ名はuserList
sqlmapに対応する方法idは、insertReportUsert 2 O racle
4.oarcleデータベースを一括挿入するスクリプト情報
ここで用いるキーワードはunion allであり、リストから取得するデータのフォーマットはuserList[]であることを記憶する.xxx
5.ユニットテスト
私たちのデータはライブラリ(mysql,oracle)にまたがっているので、単独でデータを取るには何度も遍歴する必要があるので、mysqlデータベースから取り出したデータをoracleデータベースで結果セットに対応するテンポラリ・テーブルを作成し、挿入してからクエリーを統一したいと思っています(その間に遍歴してデータを再編成する時間が節約されます).
1.まずmysqlデータベースから対応データを検索する
sql:
2.oracleデータベースで対応するテンポラリ・テーブルを作成します(対応するデータベースで事前に実行する必要があります)
drop table report_user ;create table report_user( name VARCHAR2(20), age VARCHAR2(10), sex VARCHAR2(6));
3.挿入されたDao定義は、一括挿入データの量に制限があることに注意してください.ここでは、1000個ずつ挿入するデータを定義します.
パラメータタイプはList、パラメータ名はuserList
sqlmapに対応する方法idは、insertReportUsert 2 O racle
/*Test 20191219 batch insert data*/
public Object insertReportUsert2Oracle(List userList){
Map parm=new HashMap();
int len = userList.size()/1000 +1;
int modlen = userList.size()%1000 ;
System.err.println("len="+len);
System.err.println("modlen="+modlen);
int start = 0;
int end = 1000;
for(int i=0;i tmpUserList = userList.subList(start, end);
parm.put("userList", tmpUserList);
st.insert("report.insertReportUsert2Oracle", parm);
if(i==(len-2)){
end +=modlen;
}else{
end +=1000;
}
start +=1000;
}
return "insert";
}
4.oarcleデータベースを一括挿入するスクリプト情報
ここで用いるキーワードはunion allであり、リストから取得するデータのフォーマットはuserList[]であることを記憶する.xxx
INSERT INTO report_user
(
name
,age
,sex
)
(
select
#userList[].name#,
#userList[].age#,
#userList[].sex#
from dual
)
5.ユニットテスト
@Test
public void insertReportUsert2OracleTest() throws IMException{
long starttime = System.currentTimeMillis();
System.err.println("===========starttime = " +starttime);
userDao.insertReportUsert2Oracle();
long endtime = System.currentTimeMillis();
System.err.println("===========endtime = " +endtime);
System.err.println("=========== daycount = " + ((endtime-starttime)/1000)+" s");
}