转载自:http://blog.csdn.net/ghd2000/article/details/5600944

android 的sqlite 主键与simpleCursorAdapter

最近在在做一个小例子时,出现一个小问题,就是不能显示从数据库中查出的数据,后来在网上查了一查,才知道原来是这个问题。

在使用simpleCursorAdapter显示sqlite数据时,必须注意sqlite的主键命名。由于simpleCursorAdapter的方法只识别_id,所以,当你用到sqlite的simpleCursorAdapter时,必须把数据表的主键命名为_id。否则就会出现 java.lang.IllegalArgumentException: column ‘_id’ does not exist 错误。



下面是ActivityMain类 供大家参考 一下。

public class ActivityMain extends Activity {

private static int count =0;
//创建数据库对象
private SQLiteDatabase mSqliteDatabase=null;
//数据库名
private static final String DATABASE_NAME="gege.db";
//表名
private static final String TABLE_NAME="jiao";
//表中字段
private static final String TABLE_ID="_id";
private static final String TABLE_NUM="num";
private static final String TABLE_DATA="data";

//创建sqly语句
private static final String CREATE_TABLE=
"CREATE TABLE "+TABLE_NAME +"("+TABLE_ID+" INTEGER PRIMARY KEY," +
""+TABLE_NUM+" INTEGER,"+TABLE_DATA +" TEXT)";

//创建线性布局
LinearLayout m_LinearLayout =null;
//创建ListView列表视图
ListView m_ListView =null;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
//创建linearLayout布局对象
m_LinearLayout=new LinearLayout(this);
//设置布局LinearLayout的属性
m_LinearLayout.setOrientation(LinearLayout.VERTICAL);
m_LinearLayout.setBackgroundColor(android.graphics.Color.BLACK);

//创建ListView对象
m_ListView = new ListView(this);

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
//listView的背景颜色
m_ListView.setBackgroundColor(Color.BLACK);

/*添加m_listView到m_LinearLayout布局*/
m_LinearLayout.addView(m_ListView,param);
//设置显示布局
setContentView(m_LinearLayout);


//打开已经存在数据库,如果数据库不存在,则创建一个数据库
mSqliteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);

//获取数据库Phone的Cursor
try {
//创建表
mSqliteDatabase.execSQL(CREATE_TABLE);
} catch (Exception e) {
// TODO Auto-generated catch block
UpdataAdapter();
}
}


@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_LEFT:
AddData();
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
DeleteData();
break;
case KeyEvent.KEYCODE_1:
upData();
break;
case KeyEvent.KEYCODE_2:
DeleteTable();
break;
case KeyEvent.KEYCODE_3:
DeleteDataBase();
break;
}

return true;
}

/*
* 删除数据库
*
*/

public void DeleteDataBase(){
this.deleteDatabase(DATABASE_NAME);
this.finish();
}

/*
* 删除一个表
*/

public void DeleteTable(){
mSqliteDatabase.execSQL("drop table"+TABLE_NAME);
this.finish();
}
/*
* 更新一条数据
*
*/
public void upData(){
ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, count);
cv.put(TABLE_DATA, "修改后的数据"+count);

//更新数据
mSqliteDatabase.update(TABLE_NAME, cv, TABLE_NUM+"="+Integer.toString(count-1), null);

UpdataAdapter();

}

/*
* 更新视图列表
*/
private void UpdataAdapter() {

//获取数据库的Curso对象
Cursor cur =mSqliteDatabase.query(TABLE_NAME, new String[]{TABLE_ID,TABLE_NUM,TABLE_DATA},null, null, null, null, null);
//获得查询的数据的条数
count = cur.getCount();
if(cur !=null && cur.getCount()>=0){
//LisAdapter 是ListView和后台数据的桥梁
ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,
cur,new String[]{TABLE_NUM,TABLE_DATA},
new int[]{android.R.id.text1,android.R.id.text2});
m_ListView.setAdapter(adapter);

}

}


//向表中添加一条数据
public void AddData(){
ContentValues cv = new ContentValues();
cv.put(TABLE_NUM, count);
cv.put(TABLE_DATA, "测试数据库数据"+count);
//插入数据
mSqliteDatabase.insert(TABLE_NAME, null, cv);
count++;
UpdataAdapter();
}

//从表中删除指定的一条数据
public void DeleteData(){
//删除数据
mSqliteDatabase.execSQL("delete from"+TABLE_NAME+"where id="+Integer.toString(count));
count--;
if(count<0){
count=0;
}
UpdataAdapter();
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK){
//退出并关闭
mSqliteDatabase.close();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}

更多相关文章

  1. mybatisplus的坑 insert标签insert into select无参数问题的解决
  2. python起点网月票榜字体反爬案例
  3. 《Android开发从零开始》——25.数据存储(4)
  4. Android系统配置数据库注释(settings.db)
  5. Android中不同应用间实现SharedPreferences数据共享
  6. Android之菜单总结
  7. Android使用Retrofit进行网络请求
  8. Android官方入门文档[1]创建一个Android项目
  9. android图表ichartjs

随机推荐

  1. android webview
  2. Android之SDK、NDK、JNI和so文件
  3. Android(安卓)Studio中图片的格式转换
  4. Android之ProGuard混淆器
  5. 【Android】android studio ndk使用例子
  6. Android(安卓)Studio中src/main/res/valu
  7. 2018/8/13
  8. Android(安卓)日历提供器(二)
  9. android APP 获得system权限
  10. android 权限定义的文件,位置