を作成する方法 のJava-のMySQL:ストアドプロシージャ私は、MySQLを使用してJava 1.7プロジェクトの作業
IのPreparedStatementを持つテーブルに大量のデータを挿入する方法がありますが、これはメモリー不足を引き起こしますGlassFishサーバーでエラーが発生しました。Connection c = null;
String query = "INSERT INTO users.infos(name,phone,email,type,title) "
+ "VALUES (?, ?, ?, ?, ?, ";
PreparedStatement statement = null;
try {
c = users.getConnection();
statement = c.prepareStatement(query);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try{
int i =0;
for(Member member: members){
i++;
statement.setString(1, member.getName());
statement.setString(2, member.getPhone());
statement.setString(3, member.getEmail());
statement.setInt(4, member.getType());
statement.setString(5, member.getTitle());
statement.addBatch();
if (i % 100000 == 0){
statement.executeBatch();
}
}
statement.executeBatch();
}catch (Exception ex){
ex.printStackTrace();
} finally {
if(c != null)
{
try {
c.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
c = null;
statement = null;
}
は、私は、このメモリの問題を回避するために、ストアドプロシージャを作成する必要があると思いますが、私は、プロシージャまたは関数を作成する必要がある場合、私はどこから始めれば知っているとしていない、と場合は、私のことができるようになります返品などで何らかの反応を得ることができますか?
あなたはどう思いますか?
など、MySQLのパラメータの一部をチューニングを見てドロップ(以降再作成)インデックスすることができますか? **トランザクション**と**小規模なバッチ**を使用する必要があります。 –
より小さいバッチを試し、['try-with-resources'](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)を調べてください。 – bradimus
ええ、バッチサイズ '100'または' 200'を試してみてください。 「10,000」ではない。 – Kayaman