前段时间写的一个项目里面的需求,要从一个已有的数据库文件创建一个数据库连接,反复试验和研究api之后终于实现:
代码:
public class DatabaseConnection {
public SQLiteDatabase getDatabase( Context context) {
if(this.database == null)
database = this.openDatabase(context);
return database;
}
public static DatabaseConnection getConn() {
if (conn == null) {
conn = new DatabaseConnection();
}
return conn;
}
private SQLiteDatabase database = null;
private static DatabaseConnection conn = null;
private DatabaseConnection() {
}
private static String rootDirectory = "/data/data/pos/";
// private final String DATABASE_PATH =
// android.os.Environment.getExternalStorageDirectory().getAbsolutePath()
// + "/rexen_mobile_db";
private static final String DATABASE_FILENAME = "rx_posm.db";
// 复制小于1M的数据库程序
private SQLiteDatabase openDatabase(Context context) {
try {
// 获得rx_mobile.db文件的绝对路径
String databaseFilename = rootDirectory + "/" + DATABASE_FILENAME;
File dir = new File(rootDirectory);
// 如果目录不中存在,创建这个目录
if (!dir.exists())
dir.mkdir();
// 如果在目录中不存在
// dictionary.db文件,则从res\raw目录中复制这个文件到
// 指定的目录
if (!(new File(databaseFilename)).exists()) {
System.out.println("file is not exists!");
// 获得封装dictionary.db文件的InputStream对象
InputStream is = null;
is = context.getResources().openRawResource(R.raw.rx_posm);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[117760];
int count = 0;
// 开始复制dictionary.db文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
System.out.println("file is write");
}
fos.close();
is.close();
}
// 打开.db文件
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
return database;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 执行查询语句 返回cursor
* @param database 数据库连接
* @param table_name表名
* @param cols列名集合
* @param selection where子句
* @param args 参数集合
* @return cursor
*/
public Cursor getCursorByQuery( String table_name,String[]cols,String selection,String [] args,Context context){
SQLiteDatabase database = this.getDatabase( context);
return database.query(table_name, cols, selection, args, null, null, null);
}
/**
* 执行查询语句 返回cursor
* @param database 数据库连接
* @param table_name表名
* @param cols列名集合
* @param selection where子句
* @param args 参数集合
* @param order ORDER BY 子句
* @return cursor
*/
public Cursor getCursorByQuery( String table_name,String[]cols,String selection,String [] args,String order,Context context){
SQLiteDatabase database = this.getDatabase( context);
return database.query(table_name, cols, selection, args, null, null, order);
}
/**
* 向数据库插入一条数据并返回行id
* @param context
* @param table_name
* @param value
* @return
*/
public long insertIntoDB(Context context,String table_name,ContentValues value){
SQLiteDatabase database = this.getDatabase( context);
long rowId = database.insert(table_name, null, value);
return rowId;
}