微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Asset文件夹中的SQLite连接

如何使用Asset文件夹中的sqlite连接.

解决方法

这称为DataBaseHelper. java文件

public class DataBaseHelper extends sqliteOpenHelper
{
private static String TAG = "TAG";
private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
private static String DB_NAME = "ServiceInfo.sqlite";
private sqliteDatabase mDataBase; 
private final Context mContext;

public DataBaseHelper(Context context) 
{
    super(context,DB_NAME,null,1);
    DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    this.mContext = context;
}   

public void createDataBase() throws IOException
{
    boolean mDataBaseExist = checkDataBase();
    if(!mDataBaseExist)
    {
        this.getReadableDatabase();
        try 
        {
            copyDataBase();
        } 
        catch (IOException mIOException) 
        {
            throw new Error("ErrorcopyingDataBase");
        }
    }
}

private boolean checkDataBase()
{
    sqliteDatabase mCheckDataBase = null;
    try
    {
        String myPath = DB_PATH + DB_NAME;
        mCheckDataBase = sqliteDatabase.openDatabase(myPath,sqliteDatabase.NO_LOCALIZED_COLLATORS);
    }
    catch(sqliteException msqliteException)
    {
        Log.e(TAG,"DatabaseNotFound " + msqliteException.toString());
    }

    if(mCheckDataBase != null)
    {
        mCheckDataBase.close();
    }
    return mCheckDataBase != null;
}

private void copyDataBase() throws IOException
{
    InputStream mInput = mContext.getAssets().open(DB_NAME);
    String outFileName = DB_PATH + DB_NAME;
    OutputStream mOutput = new FileOutputStream(outFileName);
    byte[] mBuffer = new byte[1024];
    int mLength;
    while ((mLength = mInput.read(mBuffer))>0)
    {
        mOutput.write(mBuffer,mLength);
    }
    mOutput.flush();
    mOutput.close();
    mInput.close();
}

public boolean openDataBase() throws sqlException
{
    String mPath = DB_PATH + DB_NAME;
    mDataBase = sqliteDatabase.openDatabase(mPath,sqliteDatabase.NO_LOCALIZED_COLLATORS);
    return mDataBase != null;
}

@Override
public synchronized void close() 
{
    if(mDataBase != null)
        mDataBase.close();
    super.close();
}

@Override
public void onCreate(sqliteDatabase db) 
{ }

@Override
public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) 
{
    Log.v(TAG,"UpgradingDatabase,This will drop current database and will recreate it");
}
}

现在AdapetrClass.java

public class KamaDBAdapter
{
protected static final String TAG = "TAG";

private final Context mContext;
private sqliteDatabase mDb;
private DataBaseHelper mDbHelper;

private static String ACCOUNT_TABLE = "account";
public static String ACCOUNT_EXTradATA = "exTradata";
public static String ACCOUNT_ID = "ID";
public static String ACCOUNT_ADDITIONALDATA = "additionalData";
public static String ACCOUNT_DATA = "data";

public KamaDBAdapter(Context context) 
{
    this.mContext = context;
    mDbHelper = new DataBaseHelper(mContext);
}

public KamaDBAdapter createDatabase() throws sqlException 
{
    try 
    {
        mDbHelper.createDataBase();
    } 
    catch (IOException mIOException) 
    {
        Log.e(TAG,mIOException.toString() + "  UnabletoCreateDatabase");
        throw new Error("UnabletoCreateDatabase");
    }
    return this;
}

public KamaDBAdapter open() throws sqlException 
{
    try 
    {
        mDbHelper.openDataBase();
        mDbHelper.close();
        mDb = mDbHelper.getReadableDatabase();
    } 
    catch (sqlException msqlException) 
    {
        Log.e(TAG,msqlException.toString());
        throw msqlException;
    }
    return this;
}

public void close() 
{
    mDbHelper.close();
}

public int countAccountData() 
{
    Cursor mCoursor = mDb.query(ACCOUNT_TABLE,new String[] {},null);
    int mReturnedCount = mCoursor.getCount();
    mCoursor.close();
    return mReturnedCount;
}

public long insertData(String mExtra,String mAdditionalData,String mData) 
{
    ContentValues initialValues = new ContentValues();
    initialValues.put(ACCOUNT_EXTradATA,mExtra);
    initialValues.put(ACCOUNT_ADDITIONALDATA,mAdditionalData);
    initialValues.put(ACCOUNT_DATA,mData);
    return mDb.insert(ACCOUNT_TABLE,initialValues);
}

public boolean updateData(int mPosition,String mExtra,mData);
    return mDb.update(ACCOUNT_TABLE,initialValues,"ID=" + mPosition,null) > 0;
}

public String retriveData(int mPosition)
{
    Cursor mCursor = mDb.query(ACCOUNT_TABLE,new String[] {ACCOUNT_DATA},null);
    mCursor.movetoFirst();
    String mReturn = mCursor.getString(mCursor.getColumnIndex(ACCOUNT_DATA));
    mCursor.close();
    return mReturn;
}

public String retriveAdditionalData(int mPosition)
{
    Cursor mCursor = mDb.query(ACCOUNT_TABLE,new String[] {ACCOUNT_ADDITIONALDATA},null);
    mCursor.movetoFirst();
    String mReturn = mCursor.getString(mCursor.getColumnIndex(ACCOUNT_ADDITIONALDATA));
    mCursor.close();
    return mReturn;
}

public boolean deleteAccount(int mPosition) 
{
    return mDb.delete(ACCOUNT_TABLE,ACCOUNT_ID + "=" + mPosition,null) > 0;
}
}

现在在你的主类中调用这个类:这样的东西:

private static KamaDBAdapter mDbHelper;
mDbHelper = new KamaDBAdapter(Usage.this);
mDbHelper.createDatabase();

现在您的数据库已复制到设备.您可以从本地设备访问您在Asset文件夹中放置的相同数据库.

希望它可以帮到你.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐