android 同时打开两个sqlite database db
1,数据库类
package com.example.testdb; import android.content.Context; 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 DBAdapter { // DB info public static String MAIN_DATABASE_NAME = "Bowers.db"; public static final String OFFSET_DATABASE_NAME = "BowersOffset.db"; public static final int MAIN_DATABASE_VERSION = 1; public static final int OFFSET_DATABASE_VERSION = 1; // database control private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private Context mCtx; public String currentDBName; public int currentDBVer; private class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context, String dbname, int dbversion) { super(context, dbname, null, dbversion); } @Override public void onCreate(SQLiteDatabase db) { Log.e("xxxx","onCreate"); db.execSQL("CREATE TABLE `room` (`roomName` VARCHAR , `clazzId` INTEGER DEFAULT 0 , `createTime` BIGINT , `roomId` BIGINT , `check_code` BIGINT , `roomType` INTEGER , PRIMARY KEY (`roomId`) );"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.e("xxxx","onCreate"); } } public DBAdapter(Context ctx) { mCtx = ctx; } public DBAdapter open(String dbname, int dbversion) throws SQLException { mDbHelper = new DatabaseHelper(mCtx, dbname, dbversion); mDb = mDbHelper.getWritableDatabase(); currentDBName = dbname; currentDBVer=dbversion; return this; } public void insert() { mDb.execSQL("Replace into room(roomName, roomType ) values( '"+currentDBName+"',"+currentDBVer+");"); } public void close() { mDbHelper.close(); } //指定数据库文件路径方法打开数据库。 static String MAIN_DB_PATH="/data/data/com.example.testdb/databases/"; 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; } public void openDataBase(String dbname) throws SQLException { String dbPath = MAIN_DB_PATH + dbname; mDb = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE); } }
2,activity
package com.example.testdb; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DBAdapter setupDBHelper = new DBAdapter(this); setupDBHelper.open(DBAdapter.MAIN_DATABASE_NAME, DBAdapter.MAIN_DATABASE_VERSION); setupDBHelper.insert(); DBAdapter offsetDBHelper = new DBAdapter(this); offsetDBHelper.open(DBAdapter.OFFSET_DATABASE_NAME, DBAdapter.OFFSET_DATABASE_VERSION); offsetDBHelper.insert(); } //The following is useless. @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
3,manifest xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.testdb" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.testdb.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2014-04-09 50个c/c++源代码网站