android 有哪些数据库,什么是现有SQLite数据库的完整Android数据库助手类?

Biff MaGriff..

27

这就是我想出来的,希望它可以帮助那些遇到麻烦的人.

package com.MyPackage;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.UUID;

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteException;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

public class AnyDBAdapter {

private static final String TAG = "AnyDBAdapter";

private DatabaseHelper mDbHelper;

private static SQLiteDatabase mDb;

//make sure this matches the

//package com.MyPackage;

//at the top of this file

private static String DB_PATH = "/data/data/com.MyPackage/databases/";

//make sure this matches your database name in your assets folder

// my database file does not have an extension on it

// if yours does

// add the extention

private static final String DATABASE_NAME = "data";

//Im using an sqlite3 database, I have no clue if this makes a difference or not

private static final int DATABASE_VERSION = 3;

private final Context adapterContext;

public AnyDBAdapter(Context context) {

this.adapterContext = context;

}

public AnyDBAdapter open() throws SQLException {

mDbHelper = new DatabaseHelper(adapterContext);

try {

mDbHelper.createDataBase();

} catch (IOException ioe) {

throw new Error("Unable to create database");

}

try {

mDbHelper.openDataBase();

} catch (SQLException sqle) {

throw sqle;

}

return this;

}

//Usage from outside

// AnyDBAdapter dba = new AnyDBAdapter(contextObject); //in my case contextObject is a Map

// dba.open();

// Cursor c = dba.ExampleSelect("Rawr!");

// contextObject.startManagingCursor(c);

// String s1 = "", s2 = "";

// if(c.moveToFirst())

// do {

// s1 = c.getString(0);

// s2 = c.getString(1);

// } while (c.moveToNext());

// dba.close();

public Cursor ExampleSelect(string myVariable)

{

String query = "SELECT locale, ? FROM android_metadata";

return mDb.rawQuery(query, new String[]{myVariable});

}

//Usage

// AnyDBAdatper dba = new AnyDBAdapter(contextObjecT);

// dba.open();

// dba.ExampleCommand("en-CA", "en-GB");

// dba.close();

public void ExampleCommand(String myVariable1, String myVariable2)

{

String command = "INSERT INTO android_metadata (locale) SELECT ? UNION ALL SELECT ?";

mDb.execSQL(command, new String[]{ myVariable1, myVariable2});

}

public void close() {

mDbHelper.close();

}

private static class DatabaseHelper extends SQLiteOpenHelper {

Context helperContext;

DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

helperContext = context;

}

@Override

public void onCreate(SQLiteDatabase db) {

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

Log.w(TAG, "Upgrading database!!!!!");

//db.execSQL("");

onCreate(db);

}

public void createDataBase() throws IOException {

boolean dbExist = checkDataBase();

if (dbExist) {

} else {

//make sure your database has this table already created in it

//this does not actually work here

/*

* db.execSQL("CREATE TABLE IF NOT EXISTS \"android_metadata\" (\"locale\" TEXT DEFAULT 'en_US')"

* );

* db.execSQL("INSERT INTO \"android_metadata\" VALUES ('en_US')"

* );

*/

this.getReadableDatabase();

try {

copyDataBase();

} catch (IOException e) {

throw new Error("Error copying database");

}

}

}

public SQLiteDatabase getDatabase() {

String myPath = DB_PATH + DATABASE_NAME;

return SQLiteDatabase.openDatabase(myPath, null,

SQLiteDatabase.OPEN_READONLY);

}

private boolean checkDataBase() {

SQLiteDatabase checkDB = null;

try {

String myPath = DB_PATH + DATABASE_NAME;

checkDB = SQLiteDatabase.openDatabase(myPath, null,

SQLiteDatabase.OPEN_READONLY);

} catch (SQLiteException e) {

}

if (checkDB != null) {

checkDB.close();

}

return checkDB != null ? true : false;

}

private void copyDataBase() throws IOException {

// Open your local db as the input stream

InputStream myInput = helperContext.getAssets().open(DATABASE_NAME);

// Path to the just created empty db

String outFileName = DB_PATH + DATABASE_NAME;

// Open the empty db as the output stream

OutputStream myOutput = new FileOutputStream(outFileName);

// transfer bytes from the inputfile to the outputfile

byte[] buffer = new byte[1024];

int length;

while ((length = myInput.read(buffer)) > 0) {

myOutput.write(buffer, 0, length);

}

// Close the streams

myOutput.flush();

myOutput.close();

myInput.close();

}

public void openDataBase() throws SQLException {

// Open the database

String myPath = DB_PATH + DATABASE_NAME;

mDb = SQLiteDatabase.openDatabase(myPath, null,

SQLiteDatabase.OPEN_READWRITE);

}

@Override

public synchronized void close() {

if (mDb != null)

mDb.close();

super.close();

}

}

}

数据库版本"DATABASE_VERSION"是您开发的数据库的当前版本..因此,如果您处理应用程序的第一个版本,数据库应该具有V1,如果您将应用程序更新到版本2并且也更新数据库,则数据库版本应该有v2等等..这个标志用于跟踪数据库更新,如果android检测到数据库版本增加,它调用onUpdate()方法,可以让你备份已经存储在用户手机上的当前数据库所以它不会被删除并替换为新的...... (2认同)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值