5

BlackBerry OS 7.0で正常に動作するアプリケーションがありますが、BlackBerry OS 6.0で同じアプリケーションを実行すると、SqLiteカーソルがデータの最後にすぐに到達するため、データベースからデータをフェッチできません。

 public static Vector GetProducts(String sysID) {
  Bitmap img = null;
  try {
   Statement st = d
     .createStatement("SELECT * FROM Product where systemSerID=?");
   st.prepare();
   st.bind(1, sysID);
   st.execute();
   Cursor c = st.getCursor();

   Products products;
   Vector pro = new Vector();

   while (c.next()) {

    Row r = c.getRow();
    products = new Products();
    products.setSystemServiceID(r.getString(1));
    products.setSystemServiceName(r.getString(2));
    products.setProductID(r.getString(3));
    products.setProductName(r.getString(4));
    products.setProductDesc(r.getString(5));

    products.setProductType(r.getString(devil));
    // products[i].setProductType("1");
    products.setBatchID(r.getString(7));
    products.setMinValue(r.getString(music));
    products.setMaxValue(r.getString(9));
    products.setImageURL(r.getString(10));

    System.out.println(" retrived from database.");
    pro.addElement(products);
   }

   c.close();
   st.close();
   return pro;

  } catch (DatabaseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return null;

  } catch (DataTypeException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return null;
  }

 }
4

1 に答える 1

3

データベースのドキュメントには次のように記載されています。

ステートメントが結果を返す可能性がある場合は、Statement.getCursor() を呼び出してステートメントを実行します。 Statement.execute()- Statement を明示的に準備してクローズする場合に使用します。

結果セットにアクセスしたいので、Statement.execute() を呼び出さないでください。getCursor() によってクエリが実行されるため、execute() 呼び出しを削除して、必要な動作を取得できるはずです。

于 2012-08-13T08:56:12.577 に答える