2013-09-24 3 views
-1

J'essaye de rechercher les données dans deux tables en obtenant les quatre derniers numéros d'un SSN en tant qu'entrée de l'utilisateur.JDBC sélectionnez requête avec jointure et comme

J'ai une requête JDBC comme suit:

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

Il échoue avec soit « par les mots-clés introuvable où attendu » ou « index non valide de la colonne ».

Aidez-moi à formater la requête.

+0

Imprimez votre sql variable.There pourrait être concaténation problème.pour cet espace attach avant chaque mots-clés sql. –

Répondre

1

oui, il devrait échouer. Vérifiez votre SQL, vous manquez un espace devant "FROM", et idem partout où vous concaténer des chaînes.

+0

Merci d'avoir signalé si vite. – user1321074

0

Modifiez le SQL comme suit. L'espace est ajouté autour FROM, WHERE et ET

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

Votre requête recherchera M.SSN qui est 14ssn c'est comme dire M.SSN = '14ssn'. Si vous souhaitez utiliser une requête similaire à 14ssn, utilisez M.SSN like '%14ssn%' à la place

Juste sur la note de côté, utilisez l'instruction préparée au lieu d'utiliser le paramètre de requête dans votre chaîne sql.

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

+0

Merci de me corriger et de me diriger dans la bonne direction. Je dois mettre à jour après avoir testé avec la nouvelle requête. – user1321074

0

1, modifiez le SQL comme suit. L'espace est ajouté autour FROM, WHERE et AND, Si vous suivez ce que vous écrivez sql, coutures sql est donc à:

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

Cela ne fonctionnera pas. Espace à côté de WHERE.? Même avec l'ET aussi. –

+0

A juste été modifié, essayez à nouveau – sunysen

+0

.Un tel traitement – sunysen

0

Essayez cette requête

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

Pourquoi avant et après chaque ligne.? N'est-ce pas juste générer un bon SQL? –

+0

@VallabhPatade un espace suffisant avant ou après la ligne, je viens de le dire parce qu'il semble agréable de voir et aussi pour la compréhension. –

+0

Je vais essayer de vous faire connaître le résultat. Merci – 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); 
Questions connexes