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


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

不多说,看代码:

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 分类目录,贴了 , , , , 标签。将固定链接加入收藏夹。

相关日志:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

注意: 评论者允许使用'@user:'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC:'(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。