2012-11-09 1 views
0

J'interroge une base de données Microsoft Access avec le code ci-dessous. Les noms des champs de base de données sont correctement indiqués dans l'instruction SELECT. Essayer de comprendre pourquoi je reçois cette erreur. Vraiment besoin d'help..thanksjava.sql.SQLException: Colonne introuvable Erreur?

public Item getIteminfo(String itemCode) throws ClassNotFoundException, SQLException { 
    Statement myStatement = getConnection(); 
    Item item = null; 
    String itemDescription; 
    int itemPrice; 
    String sql = "SELECT ItemDescription, ItemPrice FROM itemCatalog WHERE ItemCode = '"+itemCode+"'"; 
    ResultSet results = myStatement.executeQuery(sql); 

    while (results.next()){ 
     itemDescription = results.getString("ItemDescription"); 
     itemPrice = results.getInt("ItemPrice"); 
     item = new Item(itemDescription, itemPrice); 
    } 
    closeConnection(); 
    return item; 
} 

Voici le message d'erreur:

java.sql.SQLException: Column not found 
    at sun.jdbc.odbc.JdbcOdbcResultSet.findColumn(JdbcOdbcResultSet.java:1849) 
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:410) 
    at checkoutsimulation.DAO.getIteminfo(DAO.java:52) 
    at checkoutsimulation.ItemCatalog.getItemdetails(ItemCatalog.java:61) 
    at checkoutsimulation.CheckoutSystem.bnPurchaseActionPerformed(CheckoutSystem.java:463) 
    at checkoutsimulation.CheckoutSystem.access$100(CheckoutSystem.java:20) 

Edité: Les champs sont identiques, voici un écran tiré enter image description here

+2

pouvez-vous vérifier que le cas des noms de colonne dans la base de données est exactement ce que vous spécifiez? – Igor

+0

yup..les champs sont identiques, voir capture d'écran – Adesh

+0

Avez-vous Déboguer et voir la météo tout résultat est à venir? ou est le jeu de résultats est vide? – andunslg

Répondre

2

Je n'ai pas moi-même l'accès donc je ne peux pas essayer cela, mais voici quelque chose qui pourrait fonctionner. D'abord, nous imprimons les noms des colonnes dans le jeu de résultats au cas où il y aurait une sensibilité à la casse au travail.

Ensuite, nous faisons une contournement int dans la boucle result.next en utilisant des arguments de position (1, 2, ..) au lieu de noms. Cela devrait le faire fonctionner quels que soient les noms. Une fois que vous avez compris quel est le problème de nom, remplacez les 1, 2 etc avec les noms corrects.

ResultSet results = myStatement.executeQuery(sql); 

ResultSetMetaData meta = results.getMetaData(); 
for (int index = 1; index <= meta.getColumnCount(); index++) 
{ 
    System.out.println("Column " + index + " is named " + meta.getColumnName(index); 
} 
while (results.next()){ 
    itemDescription = results.getString(1); 
    itemPrice = results.getInt(2); 
    item = new Item(itemDescription, itemPrice); 
} 
+0

Hé, merci, maintenant, donnez-moi une seconde. – Adesh

+0

toujours la même erreur ... merci – Adesh

+0

Est-ce que l'une des lignes "Colonne 1 est nommée ..." est imprimée? Je me demande si vous obtenez un resultset sans colonnes. Peut-être ajouter un println pour afficher le nombre de colonnes. –

Questions connexes