在使用adb shell中使用sqlite3工具显示中文时,在console上显示的中文字符为乱码,原因在于cmd中的字符集,解决方法,
在进入cmd中,输入 chcp 65001
① 完全通过SQLiteDatabase ② SQLiteOpenHelper ③ 使用ContentProvider
④ 数据库文件的管理
①:
SQLiteDatabase sqlite = openOrCreateDatabase("diary.db", MODE, null);
使用Cursor进行ListView数据绑定:
例如:
SQLiteDatabase sqlite = openOrCreateDatabase("diary.db", MODE, null);
Cursor cur = sqlite.query("diary", new String[] {"_id", "title", "content"},
null, null, null, null, null);
// 使用Cursor为Listview绑定数据
SimpleCursorAdapter curAdapter = new SimpleCursorAdapter(
this, android.R.layout.simple_list_item_2,
cur, new String[] {"title", "content"},
new int[] {android.R.id.text1, android.R.id.text2}
);
diaryList.setAdapter(curAdapter);
指定过程与SimpleAdapter类似;
CursorAdapter的使用:
sqlite = openOrCreateDatabase("diary.db",
MODE, null);
cur = sqlite.query("diary", new String[] {"_id", "title", "content"},
null, null, null, null, null);
CursorAdapter cAdapter = new CursorAdapter(this, cur) {
@Override
public void bindView(View view, Context context, Cursor cursor) {
((TextView)view).setText(cursor.getString(cursor.getColumnIndex("title")));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
TextView titleLabel = new TextView(MainActivity.this);
return titleLabel;
}
};
SimpleCursorAdapter,CursorAdapter需要绑定游标
SQLiteOpenHelper中处理的数据库,开关,更新
SQLiteDatabase用以具体的数据库操作
要获得SQLiteOpenHelper的对象,需要写一个类extends SQLiteOpenHelper类,重写构造,onCreate,onUpgrade方法;
数据库文件操作:直接指定数据库文件所在位置/sdcard/databases/diary_db
在权限控制中,在另一个程序中的获取数据库文件需要使用完整路径;
文件权限:对外权限公开[rwx],则数据库文件公开;
若文件权限不公开,但类与其同一包路径,访问页不受限制
ContentProvider:
写一个类继承ContentProvider类,需要重写实际进行数据库操作的方法,在Manifest文件中配置 <provider />组件;
配置的两个属性android:name的值为继承ContentProvider类的类名,android:authorities值可以随意指定,目前其子类放于
与主目录在同一包下,在使用ContentResolver进行CRUD操作时,进行Uri对象的创建,content://<android:authorities值>/表名/[#]
其中#号代表的记录,可以是具体的数字,标识记录id号;
优点:① 业务与数据库分离 ② 共享数据,主要通过授权机制完成
在Activity中使用Uri对象解析uri地址,对应到Manifest中的注册的provider标签的ContentProvider组件,找到ContentProvider子类,
在Activity中获取getContentResolver()方法,获取ContentResolver对象,常使用的ContentProvider方法有intert(),delete(),query(),
update(),在调用ContentProvider相应方法时,实际使用的是ContentProvider子类中的相应方法,在onCreate方法用以创建SQLiteDatabase
对象。