我创建了一个表名为tbl_customer和tbl_product的数据库...我可以查看tbl_customer值,但看不到tbl_product值..我使用adb shell来确认我的插入。任何人都可以帮助我找出问题
private void addProFromDB() {
// TODO Auto-generated method stub
ArrayList<String> results = new ArrayList<String>();
SQLiteDatabase sampleDB = null;
try {
list = (ListView)findViewById(android.R.id.list);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
sampleDB = this.openOrCreateDatabase(SAMPLE_DB_NAME, 1, null);
sampleDB.execSQL("create table tbl_product("
+ "pro_id integer PRIMARY KEY autoincrement,"
+ "pro_name text," + "pro_price integer);");
sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
+ " Values ('1','Milk','60');");
sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
+ " Values ('2','Sugar','70');");
sampleDB.execSQL("INSERT INTO " + SAMPLE_TABLE_NAMES
+ " Values ('3','Oil','200');");
Cursor c = sampleDB.query(SAMPLE_TABLE_NAMES, null, null, null, null, null,
null);
char pro_nameColumnIndex = (char) c.getColumnIndexOrThrow("pro_name");
int pro_priceColumnIndex = (int) c.getColumnIndexOrThrow("pro_price");
} finally {
if (sampleDB != null)
sampleDB.execSQL("DELETE FROM " + SAMPLE_TABLE_NAMES);
sampleDB.close();
}
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_checked, new ArrayList()));
new AddStringTask().execute();
}
还帮助我如何获得其主键并显示所选值... 最好的问候......
答案 0 :(得分:0)
首先,考虑在insert()
上使用SQLiteDatabase
方法,而不是通过INSERT
执行execSQL()
语句,这是一个好主意,特别是如果你没有多少SQL经验。
其次,通常,INSERT
语句会列出要插入的列,但您没有这样做。 SQLite可能支持您的语法,但它会产生更脆弱的代码。
第三,使用autoincrement
列时,您不会按照自己的意图分配自己的值。
第四,您将字符串值放入integer
列。 SQLite支持这一点,但不是通过实际将值转换为整数,而是将字符串本身存储在列中,这可能不是您想要的。
第五,getColumnIndexOrThrow()
返回int
,而不是char
。
第六,假设finally
设置为SAMPLE_TABLE_NAMES
,您在tbl_product
块中插入数据后的毫秒数将从表中删除。如果这些值不相等,那么您将插入并查询不存在的表。
第七,Cursor
阻止close()
finally
数据库中的数据库{/ 1}}。
这些的某些组合可能解释了“问题”。