Android 内存读写 库,从Android内存读取SQLITE数据库

这篇博客介绍了如何在Android应用中使用已创建的SQLite数据库,而不是通过SQLiteOpenHelper的onCreate()和onUpgrade()方法自动生成。文章提供了一个示例代码,说明了如何将数据库从应用程序的assets目录复制到设备的可访问位置,并展示了如何打开和使用这个数据库进行读写操作。
摘要由CSDN通过智能技术生成

我已经在Java应用程序上创建了一个sqlite数据库,并将其推送到了我的android.我想读取此数据库(以后也可能要写入该数据库).到目前为止,我发现的大多数教程都是在android中创建数据库的.

我认为我不需要重写SQLiteOpenHelper类的onCreate()和onUpdate()方法吗?在下面的教程中,他还创建了表,因为我已经有了数据库

你们可能知道的任何教程,示例代码吗?

public class DatabaseHandler extends SQLiteOpenHelper {

// All Static variables

// Database Version

private static final int DATABASE_VERSION = 1;

// Database Name

private static final String DATABASE_NAME = "contactsManager";

// Contacts table name

private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names

private static final String KEY_ID = "id";

private static final String KEY_NAME = "name";

private static final String KEY_PH_NO = "phone_number";

public DatabaseHandler(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

// Creating Tables

@Override

public void onCreate(SQLiteDatabase db) {

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("

+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"

+ KEY_PH_NO + " TEXT" + ")";

db.execSQL(CREATE_CONTACTS_TABLE);

}

// Upgrading database

@Override

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

// Drop older table if existed

db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

// Create tables again

onCreate(db);

}

我只需要打开内存中的数据库,对我的数据库执行SQL查询并获取结果.

解决方法:

您必须先将资产中的数据库复制到设备上的应用程序存储区(或其他可访问的位置),然后才能使用它.您不能直接在.apk文件中使用它.

有关如何执行此操作的示例:

public class DBAdapter {

// DB info

public static final String MAIN_DATABASE_NAME = "yourDB";

public static String MAIN_DB_PATH = "/data/data/your.package.name/databases/";

public static final int MAIN_DATABASE_VERSION = 1;

// database control

private DatabaseHelper mDbHelper;

private static SQLiteDatabase mDb;

private static Context mCtx;

private static class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String dbname, int dbversion) {

super(context, dbname, null, dbversion);

if (checkDataBase(dbname)) {

openDataBase(dbname);

} else {

try {

this.getReadableDatabase();

copyDataBase(dbname);

this.close();

openDataBase(dbname);

} catch (IOException e) {

throw new Error("Error copying database");

}

Toast.makeText(context,

"Initial " + dbname + " database has been created",

Toast.LENGTH_LONG).show();

}

}

@Override

public void onCreate(SQLiteDatabase db) {

}

@Override

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

}

}

public DBAdapter(Context ctx) {

DBAdapter.mCtx = ctx;

}

public DBAdapter open(String dbname, int dbversion) throws SQLException {

mDbHelper = new DatabaseHelper(mCtx, dbname, dbversion);

mDb = mDbHelper.getWritableDatabase();

return this;

}

public void close() {

mDbHelper.close();

}

private static void copyDataBase(String dbname) throws IOException {

InputStream myInput = mCtx.getAssets().open(dbname);

String outFileName = MAIN_DB_PATH + dbname;

OutputStream myOutput = new FileOutputStream(outFileName);

byte[] buffer = new byte[1024];

int length;

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

myOutput.write(buffer, 0, length);

}

myOutput.flush();

myOutput.close();

myInput.close();

}

private static boolean checkDataBase(String dbname) {

SQLiteDatabase checkDB = null;

boolean exist = false;

try {

String db = MAIN_DB_PATH + dbname;

checkDB = SQLiteDatabase.openDatabase(db, null,

SQLiteDatabase.OPEN_READONLY);

} catch (SQLiteException e) {

Log.v("db log", "database does't exist");

}

if (checkDB != null) {

exist = true;

checkDB.close();

}

return exist;

}

private static void openDataBase(String dbname) throws SQLException {

String dbPath = MAIN_DB_PATH + dbname;

mDb = SQLiteDatabase.openDatabase(dbPath, null,

SQLiteDatabase.OPEN_READWRITE);

}

}

标签:sqlite,sqliteopenhelper,android,database

来源: https://codeday.me/bug/20191101/1980331.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值