带连接和类似的JDBC选择查询失败

时间:2013-09-24 04:52:21

标签: select join jdbc sql-like

我试图通过将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关键字”或“无效列索引”。

请帮我格式化查询。

5 个答案:

答案 0 :(得分:1)

是的,它应该失败。检查你的SQL,你错过了" FROM"前面的空格,并且在你联系字符串的任何地方都是如此。

答案 1 :(得分:0)

按如下方式更改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字符串中使用query参数。

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

答案 2 :(得分:0)

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%' ";

答案 3 :(得分:0)

尝试此查询

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' ";

答案 4 :(得分:0)

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);