2012-04-02 11 views
0

私の目標は、一括挿入クエリでのSQLエスケープです。 例:表のJavaでのSQLエスケープと一括挿入

INSERT INTO log VALUES (0,5,-7,'str'), (4,0,0,'str'), (0,0,0,'str'); 

コードインサートは、約100〜200は、それぞれ30秒を記録します。 (ログプーリング)。
バルク挿入用にPreparedStatementを使用する方法が見つかりませんでしたので、手動でStringBuilderを使用してそのクエリを構築する必要がありました。
しかし、私はどのように文字列をエスケープするか分からない、実際にはkludge-fixes(正規表現置換などでエスケープする引用)を適用したくない。

便利な方法はありますか?

+1

を挿入するように、それはあなたがPreparedSQLを使用していけない場合は、ハイリスクで自分を残してすべてのレコードを挿入します。 ... –

+2

私はPreparedStatementの一括挿入についてのこの答えは、あなたが見ているものだと思いますng for:http://stackoverflow.com/a/6892457/1272477 – mguymon

+0

mguymon、おそらくそれは解決策です。私はこれを逃した。 Btw、このaddBatch/executeBatchは上記のBulk-insertのようなものか、または一回のパスで実行されるINSERTクエリのセットですか? – VirtualVoid

答えて

1

これまでのところ私は知っています。

第一の道

Its insert record one by one 

final String sql = "INSERT INTO tablename(columnname) Values(?)"; 

PreparedStatement statement = connection.prepareStatement(sql); 

while (condition) { 
statement.setString(1,value); 
statement.executeUpdate(); 
} 

第二の方法

バルクが

final String sql = "INSERT INTO tablename(columnname) Values(?)"; 

PreparedStatement statement = connection.prepareStatement(sql); 

while (condition) { 
statement.setString(1,value); 
statement.addBatch(); 
} 

statement.executeBatch();