【问题标题】:Java - Execute SQL queries only onceJava - 只执行一次 SQL 查询
【发布时间】:2014-02-27 23:39:57
【问题描述】:

我正在使用 Spring 框架和 MySQL 数据库开发 J2EE 应用程序。我只想从java(可能带有请求映射)执行SQL脚本一次。我已将 sql 语句作为键值对存储在属性文件中,并循环遍历每个键并执行语句。

    Connection con = ds.getConnection();
    Statement stmt = con.createStatement();

    Enumeration enuKeys = properties.keys();
    while (enuKeys.hasMoreElements()) {
        String key = (String) enuKeys.nextElement();
        String value = properties.getProperty(key);
        stmt.execute(value);
    }

这是正确的做法吗?还是有其他方法可以做到这一点?提前致谢。

更新:

正如评论中提到的,我尝试了 Spring jdbc 初始化数据库,但它没有执行 sql 文件中的所有查询。只有第一个 'create' 查询成功执行,它会抛出一个 execption “表 'table_name' 已经存在”。 .sql 文件中的其他查询不执行。每次我运行服务器时都会发生这种情况。请帮忙

【问题讨论】:

  • 我认为存储 sql 过程可以帮助您。你检查了吗?
  • 将 sql 语句保存在属性中可能不是一个好方法。最好把它作为一个程序。比如你有insert sql语句,放入procedure中,调用它。
  • 我不会在属性文件中包含“插入”查询。只有一次活动,如创建表或数据库。需要时我会在不同的环境中运行它。
  • @RC 感谢您的快速回复。似乎非常有用。我需要如何将查询放在 .sql 文件中才能工作?

标签: java mysql spring jdbc spring-data


【解决方案1】:

听起来您正尝试在代码启动时设置数据库架构,并且由于表已经存在而无法运行其中一条语句。您需要使用预先检查的语句(例如:CREATE TABLE IF NOT EXISTS)或在执行每条语句后捕获异常,以便继续执行下一条。

try {
  stmt.execute(value);
} catch (Exception e) {
  //.. raise some warning and continue ..
}

【讨论】:

  • 谢谢。我重新访问了我的声明并添加了如果不存在。现在一切正常。
猜你喜欢
  • 2014-03-06
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多