第一部分:

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. 浅谈Java中Collections.sort对List排序的两种方法
  2. mybatisplus的坑 insert标签insert into select无参数问题的解决
  3. python起点网月票榜字体反爬案例
  4. Python list sort方法的具体使用
  5. python list.sort()根据多个关键字排序的方法实现
  6. Android连接SQLite数据库
  7. Android(安卓)访问Http被限制解决方法
  8. Android(安卓)Studio:正确引入so文件的方法
  9. Android(安卓)Settings中快速搜索流程

随机推荐

  1. Android(安卓)Studio 项目导入的正确姿势
  2. Android中仿微信选择图片并展示在Recycle
  3. android使用BottomNavigationView与NavCo
  4. Android之AsyncTask的用法
  5. Android(安卓)源码解析Handler处理机制(一
  6. Android自学笔记-14-意图(Intent)
  7. Android中导入的java包详解
  8. Android(安卓)提示版本更新的实现
  9. Flutter多平台适配机制就是这么简单
  10. Android(安卓)SO文件的概念、兼容、适配