Android - 如何在onCreate上判断db.execSQL是否成功

时间:2017-08-01 11:10:35

标签: java android arraylist sqlite

我有一个xml文件,如picture所示。我想要两件事,首先,我想使用arraylist(或任何方法)在onCreate方法的sqlite数据库中插入预定义的值。其次,我想使用arraylist中的那些值,现在在我的数据库中,填充两个微调器(Producer和Product)。

我有一个处理数据库连接和方法的数据库文件,这是我到目前为止所做的。这段代码在我的onCreate方法

    db.execSQL("CREATE TABLE " + TABLE_PRODUCT + "("
            + PRODUCT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + PRODUCT_NAME + " TEXT,"
            + PRODUCER_FK + " INTEGER" + " FOREIGN KEY(PRODUCER_FK) REFERENCES TABLE_PRODUCER(PRODUCER_ID))");

            ContentValues contentv=new ContentValues();
            contentv.put("name", "Soya Seed");

            getWritableDatabase().insert("TABLE_PRODUCT", null, contentv);




    db.execSQL("CREATE TABLE " + TABLE_PRODUCER + "("
            + PRODUCER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + PRODUCER_NAME + " TEXT,"
            + PRODUCER_ADDRESS + " TEXT,"
            + PRODUCER_PHONE + " TEXT UNIQUE," + PRODUCER_EMAIL + " TEXT,"
            + CONTACT_PERSON  + " TEXT" + ")");

            ContentValues cv=new ContentValues();
            cv.put("name", "ZamSEED");
            cv.put("address", "Luanda");
            cv.put("phone", "+244977654321");
            cv.put("email", "demo@zamseed.com");
            cv.put("contact_name", "Mr. Tembo");

            getWritableDatabase().insert("TABLE_PRODUCER", null, cv);

然后我有一个库存文件,它从数据库中读取以从product和producer表中获取值以填充微调器。

我的挑战是如何判断我的db.execSQL是否真的成功? 我如何使用arraylist在数据库中插入值?

注意:当我运行它时应用程序运行正常,但我不确定是否创建了表并插入了值。我是Android编程的新手,谢谢。

3 个答案:

答案 0 :(得分:1)

经过一段时间的研究,我发现这篇文章here让我看到了db.execSQL命令的实际表格和包含的数据。在Ubuntu

 cd /path/to/my/sdk/platform-tools
 ./adb shell
 run-as <app package name>
 cd /data/data/<app package name>/databases
 ls
 chmod 666 <database file name>
 sqlite3 <database file name>
 > (semi-colon terminated commands can be run here to query the data)
 > .exit
 (copy full database path)
 exit

然后使用sqlite3命令处理数据库> (semi-colon terminated commands can be run here to query the data)

答案 1 :(得分:0)

DatabaseHelper.java

public ArrayList<String>getProductList(){

   ArrayList<String>products = new ArrayList<String>();
   SQLiteDatabase qDB = getReadableDatabase();
   String columns[]=new String[]{PRODUCT_NAME};
   Cursor cursor = qDB.query(TABLE_PRODUCT,columns,null,null,null,null,null);

   while (cursor.moveToNext()){
    String produectName = cursor.getString(1);
    products.add(productName);
    Log.e("e",products);
  }

 return products;
}              

<强> SomeActivity.java

spinnerProducts = (Spinner) findViewById(R.id.spinnerProducts);
ArrayList<String>productsList = new DatabaseHelper(context).getProductsList();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,productsList);
spinnerProducts.setAdapter(arrayAdapter);
...
//same logic for Producers list

答案 2 :(得分:0)

  

我的挑战是如何判断我的db.execSQL是否真的成功?

如果它没有抛出异常就成功了。

但是,在getWritableDatabase()中调用onCreate()是一个错误,因为这会导致递归:getWritableDatabase()首先触发对onCreate()的调用。您应该使用传递给您的SQLiteDatabase作为参数。

如果您没有看到有关递归调用的异常,那么您已经拥有了具有正确版本的数据库文件。您可以卸载应用以清理其数据,然后重新安装并再次运行,以便再次运行onCreate()

  

我如何使用arraylist在数据库中插入值?

使用循环迭代列表并逐个插入值。