一括実行Sql文、MySQLストアド・プロシージャJava再現
, , , , sql , , , Java , 。
一、MySQLストアド・プロシージャ:例:UpdateSeriesDataInfo--ストアド・プロシージャ・パラメータ:Id 1 int,Id 2 int
BEGIN
declare oldId int;
declare newId int;
select id into oldId from A where id = Id1;
select id into newId from B where id = Id2;
UPDATE mt_model SET sid = Id1, bid = newId WHERE id = Id2;
UPDATE other.info c SET c.sid= Id1, c.bid = newId WHERE c.id = Id2;
//
call other_db.`ChangeSeriesOfData`(Id1, Id2);
END
二、Javaはストレージプロセスを再現し、大量にSqlを実行する:StringBuilder方法を通じて、ストレージプロセス中の複数のsql文をつなぎ合わせることができ、";を使用して分割を行い、一括して実行します.
private static void updateSeriesDataInfo(int seriesId) {
StringBuilder sb = new StringBuilder();
sb.append("--- sql ---" + ";");
sb.append("--- sql ---");
//sql
String[] sqls = sb.toString().split(";");
//
execute(sqls);
// call other_db.`ChangeSeriesOfData`(Id1, Id2);
callDBProcedure("CALL other_db.`ChangeSeriesOfData`(?, ?)", Id1, Id2);
}
Testライブラリのストアド・プロシージャを呼び出します.
/**
* Test
* @param sql :
* @param id1 : 1
* @param id2 : 2
*/
public static void callDBProcedure(String sql, int id1, int id2) {
CallableStatement statement = null;
Connection conn = null;
try {
conn = getDbConnectionForTest();
statement = conn.prepareCall(sql);
statement.setInt(1, id1);
statement.setInt(2, id2);
statement.execute();
} catch (SQLException e) {
logger_.info(e.getMessage());
} finally {
Toolkit.close(conn, null, statement);
}
}
private static Connection getDbConnectionForTest() {
return DbConnectionManager.getConnection(DbConnectionManager.DS,
"test");
}
一括実行sql:(PreparedStatementのexecuteBatchメソッドを使用しても実行できます)
/**
* sql
* @param sqls : sql
*/
public static void execute(String[] sqls) {
Connection conn = ToolkitgetMySqlConnection();
for (int i = 0; i < sqls.length; i++) {
PreparedStatement ps = null;
try {
String sql = sqls[i];
logger_.info("execute sql : " + sql);
ps = conn.prepareStatement(sql);
if (sql.startsWith("SELECT") || sql.startsWith("select")) {
ps.executeQuery();
} else {
ps.executeUpdate();
}
} catch (SQLException e) {
logger_.info(e.getMessage());
} finally {
Toolkit.close(ps);
}
}
Toolkit.close(conn);
}