【问题标题】:Strange behaviour of Java PreparedStatementJava PreparedStatement 的奇怪行为
【发布时间】:2016-07-31 03:03:50
【问题描述】:

我有以下代码

try{
    sql = "Select Time, Text WHERE Sender =?";
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setString(1, "ABC");
    rs = stmt.executeQuery();
}catch(SQLException){
    System.out.println(e.getMessage());
}

并得到以下错误:

您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在第 1 行的“WHERE Sender ='ABC”附近使用的正确语法

我的 SQL 查询中有一个额外的 ',我该如何解决?

【问题讨论】:

    标签: java mysql mariadb


    【解决方案1】:

    问题不在于“额外”'。实际上,您的数据库需要它来理解您提供的文本。

    问题是您正在发出一条 SELECT 语句,该语句从您未指定的表中请求字段。您需要添加表名:

    Select Time, Text FROM <tablename here> WHERE Sender =?
    

    编辑:显然 MariaDB doesn't consider time and text as reserved words 正如@Andreas 在对此答案的评论中指出的那样。

    【讨论】:

    • TEXTTIME 不是 reserved words in MariaDB由于历史原因,某些关键字是例外,并且允许作为不带引号的标识符。其中包括:...、TEXTTIME、....
    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2023-04-06
    • 2018-08-15
    • 2017-09-27
    • 2015-12-04
    • 2012-02-16
    • 2021-09-28
    相关资源
    最近更新 更多