繁体   English   中英

SQL 错误或缺少数据库(“:01”附近:语法错误)在 SQLite

[英]SQL error or missing database (near “:01”: syntax error) in SQLite

我正在尝试使用 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");

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

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)部分中的 "near x" 来自时间的分钟部分,因此它随每次执行而变化。

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

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

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

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

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

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

您可以查看所有有效替换日期和时间函数的手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM