2013-09-24 32 views
-1

我試圖通過獲取SSN的最後四個數字作爲用戶輸入來搜索兩個表中的數據。帶有連接的JDBC select查詢失敗

我有一個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' ";' 

它失敗,是由「關鍵字不能找到預期」或「無效的列索引」。

請幫我格式化查詢。

+0

打印您的SQL variable.There可能是每個sql關鍵字之前的連接空間的拼接問題。 –

回答

1

是的,它應該失敗。檢查你的SQL,你錯過了「FROM」前面的空格,並且在連接字符串的任何地方都是這樣。

+0

謝謝你指出這麼快。 – user1321074

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字符串中使用查詢參數。

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

+0

謝謝你糾正,並指出我在正確的方向。我將在用新查詢進行測試後進行更新。 – user1321074

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

這不起作用。空間旁邊的地方。?和AND一樣。 –

+0

剛剛修改過,請再試一次 – sunysen

+0

<與AND同樣>>。這樣處理 – sunysen

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

爲什麼在每行之前和之後?它不只是產生正確的SQL。? –

+0

@VallabhPatade行前或行後足夠空間,我只是告訴,因爲它看起來很好看,也爲理解。 –

+0

我會盡量讓你知道結果。謝謝 – user1321074

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