0

我正在尝试运行一个脚本(.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);

这是我的主要 dao 代码:

@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;
    }
}

如果我只用一个插入运行脚本,它运行正常,但是当我的脚本有超过 1 个插入时,我得到以下异常:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'INSERT INTO producto_servicioVALUES (11,'chi','USD','chi one',0,'2013-04-15 11:42:13附近使用的正确语法',0,'' 在第 2 行

有没有办法运行具有多个插入的脚本文件?

我也尝试过 BEGIN、END 和 START TRANSACTION AND COMMIT,但没有好的结果。

感谢您的帮助 :)

4

1 回答 1

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();
于 2013-05-30T02:41:57.343 回答