我想通過使用jdbc安裝我的web項目時執行.sql文件。從google推薦的2個選項:手動解析腳本(通過分割「;」字符)或使用ant。我更喜歡簡單的方式,所以螞蟻是一個不錯的選擇。這是我用它來建立數據庫的代碼:無法從.sql文件創建存儲過程 - JDBC
public void executeSql(String sqlFilePath) {
final class SqlExecuter extends SQLExec {
public SqlExecuter() {
Project project = new Project();
project.init();
setProject(project);
setTaskType("sql");
setTaskName("SQL Init");
}
}
SqlExecuter executer = new SqlExecuter();
executer.setSrc(new File(sqlFilePath));
executer.setDriver("com.mysql.jdbc.Driver") ;
executer.setPassword("123456");
executer.setUserid("root");
executer.setUrl("jdbc:mysql://localhost:3306/abc");
executer.execute();
}
代碼工作正常,直到它符合創建過程
DELIMITER //
CREATE PROCEDURE LOG (IN period INT)
BEGIN
INSERT INTO log_archive
SELECT * FROM ablog
WHERE log_date < DATE_SUB(CURRENT_DATE(), INTERVAL period DAY);
DELETE FROM ablog
WHERE log_date < DATE_SUB(CURRENT_DATE(), INTERVAL period DAY);
END//
DELIMITER ;
的一部分,並給這個錯誤:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER // CREATE PROCEDURE LOG(IN period INT) BEGIN INSERT INTO log_archi' at line 1
如果我刪除存儲過程的一部分,那麼它將運行良好。 sql文件也是從mysql命令提示符下成功執行的。你有任何建議來解決這個問題嗎?
我認爲這是從分離的文件中執行存儲過程的唯一方法。謝謝你鏈接 – 2012-02-21 02:08:50
@bubuzz:不,任何人都可以根據SQL引擎加載一個sql,格式然後調用JDBC。 Liquibase做得更好:) – Jayan 2012-02-21 04:39:25