代码之家  ›  专栏  ›  技术社区  ›  Biff MaGriff

对于现有的sqlite数据库,完整的android数据库助手类是什么?[关闭]

  •  14
  • Biff MaGriff  · 技术社区  · 15 年前

    我正在尝试使用现有的sqlite数据库部署应用程序。

    我已经通读并尝试在网上实现几个示例,但是我发现它们总是缺少一些代码,或者不编译或者不按广告工作。

    有没有人有一个完整的android数据库助手类用于在android上部署现有的sqlite数据库?

    2 回复  |  直到 13 年前
        1
  •  27
  •   Biff MaGriff    14 年前

    这就是我想到的,希望它能帮助那些有困难的人。

    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
  •  4
  •   Czechnology    13 年前
    DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
    

    确保在应用程序生存期内创建一次DatabaseHelper对象,然后重新使用它。

    读取数据:

    SQLiteDatabase db = dbHelper.getReadableDatabase();
    

    读取/修改数据:

    SQLiteDatabase db = dbHelper.getWritableDatabase();
    

    下一次使用 insert() , query() , update() , delete() sqliteDatabase对象的方法:

    http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

    您也不应该像在createwdatabase方法中那样直接访问sqlite文件来创建数据库。 在onCreate(…)方法中使用sqliteDatabase对象的execsql()方法。在那里执行创建表查询。