Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-如何判断db.execSQL是否在onCreate上成功_Java_Android_Arraylist_Sqlite - Fatal编程技术网

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

Java Android-如何判断db.execSQL是否在onCreate上成功,java,android,arraylist,sqlite,Java,Android,Arraylist,Sqlite,我有一个xml文件,如图所示。我想做两件事,首先,我想使用arraylist(或任何方法)在onCreate方法上的sqlite数据库中插入预定义值。其次,我想使用arraylist中的这些值(现在在我的数据库中)来填充两个微调器(Producer和Product) 我有一个处理db连接和方法的数据库文件,这就是我到目前为止所做的。这段代码在我的onCreate方法中 db.execSQL("CREATE TABLE " + TABLE_PRODUCT + "("

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

我有一个处理db连接和方法的数据库文件,这就是我到目前为止所做的。这段代码在我的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和producers表中获取值,以填充微调器

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


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

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;
}              
publicArrayListGetProductList(){
ArrayListproducts=新的ArrayList();
SQLiteDatabase qDB=getReadableDatabase();
字符串列[]=新字符串[]{PRODUCT_NAME};
Cursor Cursor=qDB.query(表\产品、列、null、null、null、null、null);
while(cursor.moveToNext()){
String produectName=cursor.getString(1);
产品。添加(产品名称);
Log.e(“e”,产品);
}
退货产品;
}              
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
spinnerProducts=(Spinner)findViewById(R.id.spinnerProducts);
ArrayListproductsList=新的DatabaseHelper(上下文).getProductsList();
ArrayAdapter ArrayAdapter=新的ArrayAdapter(上下文,android.R.layout.simple\u list\u item\u 1,productsList);
喷丝头产品.设置适配器(阵列适配器);
...
//生产商列表的逻辑相同
我的挑战是如何判断我的db.execSQL是否真的成功

如果它没有抛出异常,则是成功的

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

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

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


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

经过一段时间的研究,我找到了这篇文章,它让我看到了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
cd/path/to/my/sdk/platform-tools
/亚洲开发银行壳牌
作为
cd/data/data//数据库
ls
chmod 666
sqlite3
>(可以在此处运行以分号终止的命令来查询数据)
>.退出
(复制完整数据库路径)
出口

然后使用sqlite3命令处理数据库
>(可以在此处运行以分号终止的命令来查询数据)

您有根电话吗。。如果是,则可以提取db文件并检查。。路径可能是/data/data//databases/no我没有根电话,有没有办法使用toast之类的东西?我的公共ArrayListgetProductList()方法放在哪里?在我的onCreate方法中?谢谢,它起到了作用,光标非常有用谢谢@laalto的回答,不过我还是设法找到了答案。检查我对这个问题的回答