第一部分:

1.SQLiteDatabase简介

应用程序获得了代表数据库的SQLiteDatabase对象,那么就可以通过SQLiteDatabase对象来操作数据库了。

1)打开对应的数据库

static SQLiteDatabase openDatabase(Stsering path,SQLiteDatabase.CursorFactory factory,int flags)

static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)

static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory)

2)操作数据库

execSQL(String sql,Object[] bindArgs):执行带占位符的SQL语句

execSQL(String sql)

insert(String table,String nullColumnHack,ContentValues values)

update(String table,ContentValues values,String whereClause,String[] whereArgs)

delete(String table,String whereClase,String[] whereArgs)

Cursor query(boolean distinct,String table,String[] columns,String selection,String[]

selecionArgs,String groupBy,String,having,String orderBy,String limit);

rawQuery(String sql,String[] selectionArgs)

beginTransaction() 启动事务

endTransaction() 结束事务

以上查询方法返回的都是一个Cursor对象,Cursor提供了如下方法移动查询结果的记录指针。

move(int offset)

boolean moveToFirst()

boolean moveToLast()

boolean moveToNext()

boolean moveToPosition(int position)

boolean moveToPrevious(),将指针移动到上一行,如果成功则返回true。


第二部分:

1.创建数据库和表
如:SQLiteDatabase.openCrreateDatabase("/mnt/db/temp.db3",null);

2.插入、更新、删除 使用execSQL()方法,而查询的时候,使用rawQuery()方法,查询的结果一般用Cursor对象保存。

3.在程序结束的时候,需要关闭SQLiteDatabase,否则会导致资源泄漏。db.close();

4.SimpleCursorAdapter的构造函数与SimpleAdapter的构造器参数大致相同,区别是SimpleAdapter封装的是Map对象,而SimpleCursorAdapter封装的是Cursor对象。
如:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
DBTest.this,R.layout.line,cursor,new String[]{"列名","列名"},new
int[]{R.id.my_title,R.id.my_content});
需要注意的是,使用SimpleCursorAdapter封装Cursor是要求底层数据表的主键列的列名是_id,因为SimpleCursorAdapter只能识别列名为_id的主键。

5.sqlite3工具
1).database
.tables
.help
2)SQLite内部只支持5种数据类型:
NULL,INTEGER,REAL(浮点数),TEXT(文本),BLOB(大二进制对象)
但实际上SQLite完全可以接受varchar(),char(),decimal()等数据类型,只不过会转化成上面的5种类型罢
了。
3)SQLite它允许把各种数据类型的数据保存到任何类型的字段中,开发者不用关心声明该字段所使用的数据类
类型。如:程序可以把字符串类型的值存入到Integer类型的字段中,也可以把数值类型的值存入到布尔类
类型中。但是有一种情况除外,定义为INTEGER PRIMARY KEY 的字段只能存储为64为整数。
由于SQLite允许存入数据时忽略底层数据列实际的数据类型,故在编写构建表的语句时,可以省略列后面的
类型声明。如:
create table my_test(
_id integer primary key autoincrement,
name,
pass
)


第三部分:使用特定方法操作数据库

1.insert(String table,String nullColumnHack,ContentValues values)
table:表名
nullColumnHack 代表强行插入null值的数据列的列名
values:代表一行记录的数据
ContentValues类似于Map,他提供了put(String key,XXX value) 方法存入数据,getAsXXX(String key)
方法取得数据,key为数据列的列名。
如代码:
ContentValues values = new ContentValues();
values.put("name","adfasdf");
values.put("age",50);
long rowid = db.insert("person_inf",null,values);

不管第三个参数是否包含数据,都会添加一个记录,如果第三个参数为空,则添加一条除主键外都为空的
记录。

2.update(String table,ContentValues,String whereClase,String[] whereArgs)
whereClase 满足whereClase字句会被更新
whereArgs 为whereClase传递参数
如:
ContentValues values = new ContentValues();
values.put("name","新人名");
int result = db.update("person_info",values,"_id>?",new Integer[]{ 20});

3.delete(String table,String whereClase,String[] whereArgs)

4.query()方法

5.事务
beginTransaction()开始事务
endTransaction()结束事务
判断上下文是否在事务环境中,inTransaction()
结束事务有提交事务和回滚事务 ,取决于SQLiteDatabase的setTransactionSuccessful()来标注
事务。
如:
db.beginTransaction();
try{
db.setTransactionSuccessful();
}finally{
db.endTransaction();
}


第四部分:SQLiteOpenHelper类

SQLiteOpenHelper是管理数据库的工具类。
1.onCreate()
用于初次使用软件时生成数据库表。当调用getReadableDatabase()或getWritableDatabase()方法时,
如果数据库不存在,android系统便会自动生成一个数据库,接着调用onCreate()方法。
故可以在onCreate()方法里生成表的一些结构和添加一些初始化的数据。

2.onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

3.getReadableDatabase() 和getWritableDatabase()区别
getWritableDatabase()以读写的方式打开数据库,如果数据库磁盘满了,那么数据库只能读不能写。若使
用getWritableDatabase()则会出错
getReadableDatabase()以读写的方式打开数据库,如果数据库磁盘满了,就会打开失败,打开失败后,继
序尝试去只读的方式打开数据库。


使用心得:

1)创建一个类继承与SQLiteOpenHelper

构造函数

onCreate(SQLiteDatabase db)

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

2) 通过1)步中的类创建SQliteOpenHelper子类的对象dbHelper

获得操作数据库对象dbHelper.getReadableDatabase()(或者 getWritableDatabase())

3) 将查询的结果cursor 转化为ArrayList类型

ArrayList<Map<String,String>> result = new ArrayList<Map<String,String>>;

while(cursor.moveToNext()){

Map<String,String> map= new Map<String,String>();

map.put("key",cursor.getString(1));

result.add(map);

}

return result;

4)在结束的时候,需要重写onDestory()方法

判断dbHelper 是否为null,不等于则要dbHelper.close()

5)SimpleAdapter adapter = new SimpleAdapter(

XXActivity.this,arraylist,R.layout.line,new String[]{"key1","key2"},new

int[]{R.id.x1,R.id.x2}

);


更多相关文章

  1. Android连接SQLite数据库
  2. 从数据库中获取浏览器书签信息(Android Browser开发)
  3. Android studio编译时出现aapt.exe 崩溃的解决方法
  4. listView中item 图文并存的两种方法
  5. SQlite与android 的数据交互 (android 项目心得三)
  6. Android获取本机Mac地址及IP地址的方法
  7. Android 远程链接 daemon not running 解决方法

随机推荐

  1. android SimpleOnGestureListener详解
  2. 如何在横屏控制软键盘显示一部分
  3. android 一 android 的生命周期
  4. Android(安卓)异步加载解决方案
  5. Android(安卓)NDK编程浅入深出之--Androi
  6. Android(安卓)configChanges用法
  7. android 焦点问题
  8. Android(安卓)UI事件处理[isInTouchMode(
  9. Android青翼蝠王之ContentProvider
  10. android中使用sqlite、复制assets下的数