【问题标题】:JDBC select query with join and like fails带有连接和类似功能的 JDBC 选择查询失败
【发布时间】:2013-09-24 04:52:20
【问题描述】:

我试图通过获取 SSN 的最后四个数字作为用户输入来搜索两个表中的数据。

我有一个如下的 JDBC 查询:

`String sql = "SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATE"
             +"FROM" +" G.M_NAME_A N, G.M_ID_A M"
             +"WHERE" + "N.NUMBER = M.NUMBER"
             +"AND" + "M.SSN like 'l4ssn' ";'

失败并显示“未在预期的位置找到 FROM 关键字”或“无效的列索引”。

请帮我格式化查询。

【问题讨论】:

  • 打印您的 sql 变量。可能存在连接问题。对于每个 sql 关键字之前的附加空间。

标签: select join jdbc sql-like


【解决方案1】:

是的,它应该会失败。检查您的 SQL,您在“FROM”前面缺少一个空格,并且在连接字符串的大多数地方也是如此。

【讨论】:

    【解决方案2】:

    1、修改SQL如下。 FROM、WHERE和AND周围加了空格,如果按照你写的sql的话,sql拼接就这么出来了:

    String sql = "SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATEFROM G.M_NAME_A N, G.M_ID_A MWHEREN.NUMBER = M.NUMBERAND M.SSN like 'l4ssn' ";
    
    String sql = "SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATE"
                 +" FROM G.M_NAME_A N, G.M_ID_A M"
                 +" WHERE N.NUMBER = M.NUMBER"
                 -- modify +" AND" + "M.SSN like 'l4ssn' ";'
                 +" AND  M.SSN like '%l4ssn%' ";
    

    【讨论】:

    • 这行不通。 WHERE 旁边的空格。? AND 也一样。
    • 刚刚修改,重试
    • 。是这样的一种处理方式
    • 我不是问这个问题的人。
    • 我想这正是我上面对你的回答。
    【解决方案3】:

    如下更改 SQL。在 FROM、WHERE 和 AND 周围添加空格

    String sql = "SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATE"
             +" FROM " +" G.M_NAME_A N, G.M_ID_A M"
             +" WHERE " + "N.NUMBER = M.NUMBER"
             +" AND " + "M.SSN like 'l4ssn' ";
    

    您的查询将查找M.SSN,即14ssn,就像说M.SSN = '14ssn'。如果您想使用类似于14ssn 的查询,请改用M.SSN like '%14ssn%'

    请注意,使用准备好的语句而不是在 sql 字符串中使用查询参数。

    http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    【讨论】:

    • 感谢您纠正并指出我正确的方向。我将在使用新查询进行测试后进行更新。
    【解决方案4】:

    试试这个查询

    String sql=" SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATE "+
               " FROM G.M_NAME_A N,G.M_ID_A M "+
               " WHERE N.NUMBER = M.NUMBER "+
               " AND M.SSN like 'l4ssn' ";
    

    【讨论】:

    • 为什么在每行之前和之后。?不就是生成正确的 SQL 吗?
    • @VallabhPatade 在行前或行后留出足够的空间,我之所以这么说是因为它看起来很好看,也便于理解。
    • 我会尽力让你知道结果。谢谢
    【解决方案5】:
    The question is resolved using the following query and PreparedStatement:
    String l4ssn=("%"+l4ssn);
    String sql = "SELECT N.NUMBER,N.LAST_NAME,N.FIRST_NAME,M.SSN,M.SEX,M.BIRTH_DATE"
         +" FROM " +" G.M_NAME_A N, G.M_ID_A M"
         +" WHERE " + "N.NUMBER = M.NUMBER"
         +" AND " + "M.SSN like ?";
    PreparedStatement pstmt = new PreparedStatement(sql);
    pstmt.setString(1,l4ssn);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2023-03-10
      • 2019-08-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多