0

以下のコードを使用してMicrosoftAccessデータベースにクエリを実行しています。データベースのフィールド名は、SELECTステートメントに正しく記述されています。このエラーが発生する理由を理解しようとしています。本当に助けが必要です..ありがとう

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

エラーメッセージは次のとおりです。

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)

編集済み:フィールドは同じです。これがスクリーンショットです ここに画像の説明を入力してください

4

1 に答える 1

2

私は自分自身にアクセスできないので、これを試すことはできませんが、ここでうまくいくかもしれません。まず、大文字と小文字が区別される場合に備えて、結果セット内の列の名前を出力します。

次に、名前の代わりに位置引数 (1、2、..) を使用して、result.next ループ内で回避策を実行します。これにより、名前に関係なく機能するはずです。

名前の問題が何であるかを把握したら、1、2 などを正しい名前に置き換えます。

 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);
 }
于 2012-11-09T02:50:04.307 に答える