【问题标题】:MS Access ODBC: Syntax error .. LIKE 'thomas%'MS Access ODBC:语法错误 .. LIKE 'thomas%'
【发布时间】:2012-10-24 23:08:54
【问题描述】:

我正在开发一个迷你应用程序,我必须检索 USER_ID 并将其保存在一个表中。

它是这样工作的;我输入用户的电子邮件地址,然后语句必须检索 USER_ID 并将其保存到表中。

我的 SQL Like 语句有问题。只是我只需要插入电子邮件地址的第一部分。例如,“thomas@yahoo.com”。我只插入“托马斯”;不是剩余部分。

以下是我在 Java 控制台中收到的语句示例和结果消息:

代码:

String ea = txt_email.getText();
String lid = "SELECT USER_ID FROM user WHERE email_address Like  '"+ea+"%' ";

错误信息:

错误:java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver] 查询表达式“SELECT USER_ID FROM user WHERE email_address Like 'thomas%'''中的语法错误(缺少运算符)。

【问题讨论】:

  • 它不工作的朋友...请告诉我另一种方式:)
  • 你是如何调用 SQL 语句的?基本 JDBC、Spring JDBC、Hibernate……?解决方案可能因方法而异。
  • @MithileshRamgolam 转义 SQL 中的 JET 保留字。 select * from [User] where email ....
  • @AVD "使用 * 代替 %" 这不是真的。 Access 会同时使用这两种方法,具体取决于您的工作地点。在这种情况下,% 是正确的。

标签: java sql ms-access


【解决方案1】:

尝试使用* 而不是%。 MS ACCESS 使用* 而不是% 来表示LIKE 语句。

希望对你有帮助

【讨论】:

  • 如果您可以发布导致错误的代码部分
  • Access 是否使用 * 是 % 很复杂。例如,Access 在 MS Access 中使用 DAO 时使用 *,在使用 SQL Server 兼容语法和 ADO 时使用 %。我认为 % 在这种情况下是正确的。
【解决方案2】:

使用PreparedStatement

PreparedStatement _query = con.prepareStatement(
        "SELECT USER_ID FROM user WHERE email_address Like ?");
_query.setString(1, ea + "*");  // <== use *
_query.executeQuery();

con 是您的活动连接对象。

使用PreparedStatement 的一个好处是可以防止SQL Injection

【讨论】:

  • 我认为准备好的语句不是这个问题的答案,尽管它是执行查询的好方法。
猜你喜欢
  • 1970-01-01
  • 2021-08-19
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多