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 可能返回结果,请通过调用 Statement.getCursor() 运行 Statement。 Statement.execute()- 当您想明确准备和关闭语句时使用。

由于您要访问结果集,因此不应调用 Statement.execute()。getCursor() 导致查询执行,因此您应该能够删除 execute() 调用以获得所需的行为。

于 2012-08-13T08:56:12.577 回答