andorid SQLite 的使用详解
1、创建数据库
a、编写一个类 DBHelper 继承 SQLiteOpenHelper。
b、重写 SQLiteOpenHelper的三个方法:onCreate(第一次创建的时候调用此方法),onUpgrade(更新的
时候调用此方法:参数newVersion 大于 oldBersion时调用),onOpen(每次打开数据库文件时调用)。
c、在 onCreate 方法中创建一个新的数据库文件:
String sql = "create table person(pid integer primary key autoincrement,name varchar(64),address varchar(64))";
db.execSQL(sql);
2、创建数据库的管理类,封装对数据库的增删查找操作。
对数据库进行操作有两种方法:
1、通过SQLiteDatabase调用execSQL方法执行SQLite语言。
/**
* 实现对数据库的添加 删除 修改
*
* @param sql
* @param bindArgs
* @return
*/
public boolean updataBySQL(String sql, Object[] bindArgs) {
boolean falg = false;
database = dbHelper.getWritableDatabase();
try {
database.execSQL(sql, bindArgs);
falg = true;
} catch (Exception e) {
// TODO: handle exception
}
database.close();
return falg;
}
/**
* 单条记录查询
*
* @param sql
* @param selectionArgs
* @return
*/
public Map<String, String> queryBySQL(String sql, String[] selectionArgs) {
database = dbHelper.getWritableDatabase();
Map<String, String> map = new HashMap<String, String>();
Cursor cursor = database.rawQuery(sql, selectionArgs);
int cols_len = cursor.getColumnCount();// 列的个数
while (cursor.moveToNext()) {
for (int i = 0; i < cols_len; i++) {
String cols_name = cursor.getColumnName(i);
String cols_value = cursor.getString(cursor
.getColumnIndex(cols_name));
if (cols_value == null) {
cols_value = "";
}
map.put(cols_name, cols_value);
}
}
database.close();
return map;
}
/**
* 查找多条记录
*
* @param sql
* @param selectionArgs
* @return
*/
public List<Map<String, String>> queryMultiMaps(String sql,
String[] selectionArgs) {
database = dbHelper.getWritableDatabase();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Cursor cursor = database.rawQuery(sql, selectionArgs);
int csls_len = cursor.getColumnCount();
while (cursor.moveToNext()) {
// 游标移动到下一个,不为0
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < csls_len; i++) {
String cols_name = cursor.getColumnName(i);
String cols_value = cursor.getString(cursor
.getColumnIndex(cols_name));
if (cols_value == null) {
cols_value = "";
}
map.put(cols_name, cols_value);
}
list.add(map);
}
database.close();
return list;
}
2、通过调用SQLiteDatabase子方法实现对数据库的编辑。
/**
* 插入数据
*
* @param table
* 表名
* @param nullColumnHack
* 如果第三个参数values 为Null或者元素个数为0,
* 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要,
* insert语句必须给定一个字段名,如:insert into person(name)
* values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person()
* values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,
* 执行类似insert into person(personid)
* values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values
* 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。
* @param values
* 修改后的值 new一个ContentValues中,再添加
* @return
*/
public boolean insert(String table, String nullColumnHack,
ContentValues values) {
database = dbHelper.getWritableDatabase();
boolean flag = false;
long id = database.insert(table, nullColumnHack, values);
flag = id > 0 ? true : false;
database.close();
return flag;
}
/**
* 更新数据,修改数据 update person set name = ?, address=? where pid = ?
*
* @param table
* 表名
* @param values
* 对应的值
* @param whereClause
*