β

Android数据库操作类,超实用!

傻东の学习笔记 351 阅读

Android代码分享第三弹:超实用的数据库操作类!在书里看到的,整理出来了,在原来的基础上又加了几个函数,并且新建数据库的那边也做了更改,判断所在目录有没有。最初使用时候经常发生错误,不能在程序私有空间建立数据库文件,后来才发现是路径问题,改了一下,从此有权限的地方都能建库!so easy!在查询那边加了一个用sql语句进行查询的函数,原来的那个函数不会用,还是直接sql方便。加了个复制数据库的函数。准备好数据库放在raw目录下,到时候用R.raw访问。

不多说,看代码:

[java]
package czd.android.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class SQLiteUtil {

public static final String SQLite_MASTER_TABLE = “sqlite_master”;
private static SQLiteUtil mInstance = new SQLiteUtil();

/**
*
*/
private SQLiteUtil() {
}

/**
* @return instance of SQLiteUtil
*/
public static SQLiteUtil getInstance() {
return SQLiteUtil.mInstance;
}

/**
* open or create a database with the given dbName:
* /data/data/packagename/databases/databasefilename
* /sdcard/databasefilename
*
* @param dbName
* @return SQLiteDatabase
*/
private SQLiteDatabase openDB(String dbName) {
File file = new File(dbName);
if (file.exists() == true) {
return SQLiteDatabase.openDatabase(dbName, null, SQLiteDatabase.OPEN_READWRITE);
}else {
File datafiledir = file.getParentFile();
if(!datafiledir.exists()){
datafiledir.mkdirs();
}
return SQLiteDatabase.openOrCreateDatabase(dbName, null);
}
}

/**
* close database
*
* @param db
*/
private void closeDB(SQLiteDatabase db) {
db.close();
}

/**
* delete database
*
* @param dbName
* @return boolean
*/
public boolean deleteDB(String dbName) {
File file = new File(dbName);
if (file.exists() == true) {
return file.delete();
}
return true;
}

/**
* execute sql command
*
* @param dbName
* @param sql
*/
public void execQuery(String dbName, String sql) {
SQLiteDatabase db = openDB(dbName);
db.execSQL(sql);
closeDB(db);
}

/**
* execute sql command and return Cursor
*
* @param dbName
* @param tableName
* @param condStr
* @return Cursor
*/
public Cursor openQuery(String dbName, String sql) {
SQLiteDatabase db = openDB(dbName);
Cursor cursor = db.rawQuery(sql, null);
cursor.moveToFirst();
closeDB(db);
return cursor;
}

public Cursor openQuery(String dbName, String tableName, String condStr) {
SQLiteDatabase db = openDB(dbName);
Cursor cursor = db.query(tableName, null, condStr, null, null, null, null);
cursor.moveToFirst();
closeDB(db);
return (cursor);
}

public int getRowsCount(Cursor cursor) {
return cursor.getCount();
}

public int getColumnsCount(Cursor cursor) {
return cursor.getColumnCount();
}

public String getColumnNameBy(Cursor cursor, int index) {
return cursor.getColumnName(index);
}

public boolean isBOF(Cursor cursor) {
return cursor.isBeforeFirst();
}

public boolean isEOF(Cursor cursor) {
return cursor.isAfterLast();
}

public boolean moveNext(Cursor cursor) {
return cursor.moveToNext();
}

public String getField(Cursor cursor, int index) {
return cursor.getString(index);
}

public void closeQuery(Cursor cursor) {
cursor.close();
}

public boolean isTableExists(String dbName, String tableName) {
Cursor cursor = openQuery(dbName, SQLite_MASTER_TABLE, “(tbl_name=’” + tableName + “‘)”);
int recordCount = cursor.getCount();
cursor.close();
return (recordCount > 0);
}

public boolean isDatabaseExists(String dbName){
return new File(dbName).exists();
}

public static void copyDatabase(Context context, String dbName, int resourceId) {
try {
if (!(new File(dbName)).exists()) {
InputStream is = context.getResources().openRawResource(resourceId);
FileOutputStream fos = new FileOutputStream(dbName);
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
}catch (Exception e) {
e.printStackTrace();
}
}
};

[/java]

相关日志:

作者:傻东の学习笔记
寻找大师, 模仿大师, 跟随大师, 洞察大师, 成为大师!
原文地址:Android数据库操作类,超实用!, 感谢原作者分享。