我正在尝试运行一个脚本(.sql文件),但我有多次错误,因为我尝试了很多方法,这是我的主要sql脚本:
INSERT INTO `Unity` VALUES (11,'paq',0,'2013-04-15 11:41:37','Admin','Paquete','Paq',0,'2013-04-15 11:41:37','AAA010101AAA',NULL);
INSERT INTO `product` VALUES (11,'chi','USD','chi one',0,'2013-04-15 11:42:13',0,'Admin','Chi name',0.25,0,15,'2013-04-15 11:42:13','AAA010101AAA',NULL);
这是我的主要代码:
@Autowired
private EntityManager em;
@Override
public Integer runSql(String path) {
try {
Archivo archivo = new Archivo();
String strQuery = archivo.readFileText(path);
Query query = em.createNativeQuery(strQuery);
return query.executeUpdate();
} catch (IOException e) {
e.printStackTrace();
return 0; //TODO return false;
}
}
如果我只用一个Insert运行脚本就运行正常,但是当我的脚本有多个插入时,我得到以下异常:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在'INSERT INTO
producto_servicio
VALUES附近(11,'chi','USD','chi 一个',0,'2013-04-15 11:42:13',0,''在第2行
有没有办法运行多个插入的脚本文件?
我也尝试过BEGIN,END和START TRANSACTION AND COMMIT,但没有取得好成绩。
感谢您的帮助:)
答案 0 :(得分:2)
我知道,您无法通过em.createNativeQuery
执行脚本。
您应该将脚本拆分为语句并逐个执行。
您可以使用ScriptRunner
。它可以与MyBatis分开使用。
示例:
em.getTransaction().begin();
Connection connection = em.unwrap(Connection.class);
ScriptRunner sr = new ScriptRunner(connection);
sr.runScript(new StringReader("INSERT INTO `Unity` VALUES (11,'paq',0,'2013-04-15 11:41:37','Admin','Paquete','Paq',0,'2013-04-15 11:41:37','AAA010101AAA',NULL);\r\nINSERT INTO `product` VALUES (11,'chi','USD','chi one',0,'2013-04-15 11:42:13',0,'Admin','Chi name',0.25,0,15,'2013-04-15 11:42:13','AAA010101AAA',NULL);"));
em.getTransaction().commit();