【问题标题】:SQL error or missing database (near ":01": syntax error) in SQLiteSQLite 中的 SQL 错误或缺少数据库(“:01”附近:语法错误)
【发布时间】:2020-12-11 01:05:32
【问题描述】:

我正在尝试使用 Java 更新 SQLite 表。这是代码的相关部分:

    try {
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getConnection("jdbc:sqlite:test.db");
        c.setAutoCommit(false);
        System.out.println("Opened database successfully");
        stmt = c.createStatement();
        String sql = "INSERT INTO AMBROZIJA (LEVEL,DATE,TIME) " +
                "VALUES ("+koncentracijaAmbrozije+","+date+","+time+");";
        System.out.println(sql);
        stmt.executeUpdate(sql);
        stmt.close();
        c.commit();
        c.close();
    } catch ( Exception e ) {
        System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        System.exit(0);
    }
    System.out.println("Records created successfully");

当我运行代码时,我得到以下输出:

INSERT INTO AMBROZIJA (LEVEL,DATE,TIME) VALUES (6.5,2020-08-21,18:01:44.087078100);
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (near ":01": syntax error)

Process finished with exit code 0

(near ":01": syntax error) 部分中的“接近 x”部分来自时间的分钟部分,因此它随着每次执行而变化。

如何解决这个错误(我对 SQLite 了解不多)?

【问题讨论】:

标签: java sql sqlite


【解决方案1】:

要解决您的问题列time,但date 应在引号内传递,您可以在连接值时添加引号,

date = "'"+ date +"'";
time = "'"+ time +"'";        
String sql = "INSERT INTO AMBROZIJA (LEVEL,DATE,TIME)" +
          " VALUES (" + koncentracijaAmbrozije + "," + date + "," + time+ ");";

但这是一种很好的做法,并且始终建议使用 prepareStatement 绑定值而不是将其连接起来,正如评论中所建议的那样,但是在处理日期列时它的工作量会更大一些。找到了一个不错的SO link,你可以看看。

【讨论】:

    【解决方案2】:

    将其作为带单引号的字符串传递,或者您可以使用 strftime() 方法,如下所示:

    strftime('%Y-%m-%d','2020-08-21')

    您可以查看所有有效替换的手册 Date And Time Functions

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2018-04-10
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2021-07-31
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多