分享

什么是一个完整的Android数据库的Helper类为现有的SQLite数据库?

 quasiceo 2015-03-22
我试图部署应用程序与现有的SQLite数据库。 我已经通过阅读,并企图几个样品在线但是我发现,他们总是缺少的代码,并可以做或工作作为标榜。 有没有人有一个完整的Android数据库的Helper类部署在Android上现有的SQLite数据库?

-------------------------------------------------------------------------------------------------------------------------
1. 这就是我了,希望它可以帮助别人认为是有trouble。
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();
  }
 }
}

2.
DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
请确保您的应用程序,它在创建DatabaseHelper对象一次。 读取数据:
SQLiteDatabase db = dbHelper.getReadableDatabase();
对于读/修改数据:
SQLiteDatabase db = dbHelper.getWritableDatabase();
insert()query()update()delete()SQLiteDatabase对象的方法: 你也不要通过直接accesssing sqlite的文件,你在做创建数据库 在你的onCreate(...)方法使用SQLiteDatabase对象的execSQL()方法。执行你的CREATE TABLE查询那里。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多