-1

我试图通过获取 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 关键字”或“无效的列索引”而失败。

请帮我格式化查询。

4

5 回答 5

2

yes, it should fail. Check your SQL, you're missing a space in front of "FROM", and ditto most anywhere you're concatenating strings.

于 2013-09-24T05:00:01.820 回答
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);
于 2013-09-26T01:59:33.827 回答
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'。如果你想使用查询类似的东西14ssnM.SSN like '%14ssn%'代替

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

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

于 2013-09-24T05:01:45.110 回答
0

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

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%' ";
于 2013-09-24T05:05:38.547 回答
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' ";
于 2013-09-24T05:32:26.143 回答