http://blog.csdn.net/demonliuhui/article/details/67638246
上面的链接,里面的内容介绍了SQLite,和一些简单操作。
本文将对这些方法总结,然后根据不同的需求进行封装,方便调用用。
public static SQLiteDatabase createSQLite(Context context, String name) {
//创建或者打开数据库(需要使用绝对路径)
SQLiteDatabase sdb = SQLiteDatabase.openOrCreateDatabase(
context.getFilesDir().toString() + "/" + name + ".db3", null);
return sdb;
因为创建数库的文件路径必须是存在的绝对路径,所以必须判断所属文件夹是否存在,不存在先创建文件夹再执行数据库的创建。
public static SQLiteDatabase createSDSQLite(Context context, String name) {
SQLiteDatabase sdb = null;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = null;
try {
file = new File(Environment.getExternalStorageDirectory().getCanonicalPath() + "/" +
context.getResources().getString(R.string.app_name));
if (!file.exists()) {//判读文件夹是否存在
file.mkdirs();
}
} catch (IOException e) {
e.printStackTrace();
}
sdb = SQLiteDatabase.openOrCreateDatabase(file.toString() + "/" + name + ".db3", null);
}
return sdb;
}
因为不允许重复建表,所以建表前,因执行此方法进行判断表是否存在。
SQLite会自动维护一个系统表sqlite_master,该表存储了我们所创建的各个table, view, trigger等等信息。有时数据库升级时,由于等等原因,我们可能需要增加表、字段等等。可以采取以下方法来判断数据库中是否存在某表、字段等等。
select * from sqlite_master where type = 'table' and name = '表名';
如果查不到指定表名的信息,则表示该表不存在.
public static boolean isTableExist(SQLiteDatabase sdb, String tableName) {
boolean result = false;
if (tableName == null) {
return false;
}
Cursor cursor = null;
try {
String sql = "select count(*) as c from Sqlite_master where type ='table' and name ='" + tableName.trim() + "' ";
cursor = sdb.rawQuery(sql, null);
if (cursor.moveToNext()) {
int count = cursor.getInt(0);
if (count > 0) {
result = true;
}
}
} catch (Exception e) {
}
return result;
}
原理与判断表是否存在基本类似。
public static boolean isFieldExist(SQLiteDatabase db, String tableName, String fieldName) {
String queryStr = "select sql from sqlite_master where type = 'table' and name = '%s'";
queryStr = String.format(queryStr, tableName);
Cursor c = db.rawQuery(queryStr, null);
String tableCreateSql = null;
try {
if (c != null && c.moveToFirst()) {
tableCreateSql = c.getString(c.getColumnIndex("sql"));
}
} finally {
if (c != null)
c.close();
}
if (tableCreateSql != null && tableCreateSql.contains(fieldName))
return true;
return false;
}
public static void createTable(SQLiteDatabase sdb, String table, String sql) {
if (!SQLiteUtil.isTableExist(sdb, table)) {//判断表是否存在
sdb.execSQL("create table " + sql);
}
}
private void dropTable(SQLiteDatabase sdb, String table) {
String sql = "DROP TABLE " + table;
sdb.execSQL(sql);
}
/**
* 语句操纵,插入的方法
*
* @param sdb
* @param sql 数据库操纵语句
* @param columns 列对应的值
*/
public static void insertData(SQLiteDatabase sdb, String sql, String[] columns) {
sdb.execSQL(sql, columns);
}
/**
* insert方法操纵,插入数据
* 返回插入的行值,发送错误返回-1
*
* @param sdb
* @param table 表名
* @param values 插入的值key,value
* @return
*/
private static long insertSDB(SQLiteDatabase sdb, String table, ContentValues values) {
long rowId = sdb.insert(table, null, values);
return rowId;
}
/**
* 方法操纵,删除
*
* @param sdb
* @param table
* @param whereClause 删除条件
* @param whereArgs 向条件传入参数
* @return
*/
public static int deleteSDB(SQLiteDatabase sdb, String table, String whereClause, String[] whereArgs) {
int result = sdb.delete(table, whereClause, whereArgs);
return result;
}
/**
* query方法操纵
*
* @param sdb
* @param table 表名
* @param columns 列名
* @param whereClause 条件
* @param args 向条件传入参数
* @return
*/
public static Cursor querySDB(SQLiteDatabase sdb, String table, String[] columns, String whereClause, String[] args) {
Cursor cursor = sdb.query(table, columns, whereClause, args, null, null, null);
return cursor;
}
/**
* 语句操纵select
*
* @param sdb
* @param where
* @param sql 数据库操纵语句
* @return
*/
public static Cursor queryData(SQLiteDatabase sdb, String sql, String[] where) {
Cursor cursor = sdb.rawQuery(sql, where);
return cursor;
}
/**
* 方法操纵,更改
*
* @param sdb
* @param table
* @param values
* @param whereClause 条件
* @param whereArgs 向条件传入参数
* @return
*/
public static int updateSDB(SQLiteDatabase sdb, String table, ContentValues values, String whereClause, String[] whereArgs) {
int result = sdb.update(table, values, whereClause, whereArgs);
return result;//返回更新的条数
}
因为数据库属于资源操作,所以退出程序后应该像操作文件一样关闭数据库。该方法应该在onDestroy()
中调用。
public static void closeSDB(SQLiteDatabase sdb) {
if (sdb != null && sdb.isOpen()) {
sdb.close();
}
}
http://download.csdn.net/detail/demonliuhui/9795630