Java Android-如何判断db.execSQL是否在onCreate上成功
我有一个xml文件,如图所示。我想做两件事,首先,我想使用arraylist(或任何方法)在onCreate方法上的sqlite数据库中插入预定义值。其次,我想使用arraylist中的这些值(现在在我的数据库中)来填充两个微调器(Producer和Product) 我有一个处理db连接和方法的数据库文件,这就是我到目前为止所做的。这段代码在我的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 + "("
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的回答,不过我还是设法找到了答案。检查我对这个问题的回答