我想通过使用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