android studio db,由db浏览器创建的sqlite db在android studio中不起作用

梁兴文
2023-12-01

实际上,屏幕截图几乎确认资产文件夹中的文件是有效的SQLite数据库 .

这是前16个字节匹配的数据库头 The header string: "SQLite format 3\000" Database File Format .

Android Studio本身不包括将文件作为SQLite数据库进行操作性打开的要求(有一些工具,比如DB Browser这样做) .

使用App,您需要做的是将文件作为SQLiteDatabase打开 . 这通常通过将文件从资产文件夹复制到合适的位置来完成(因为资产文件夹是它只读取的包的一部分),然后通常通过SQLiteOpenHelper的子类从该位置打开它 .

有一个类可用,即SQLiteAssetHelper,可以使数据库相对容易打开 . Note SQLiteAssetHelper期望数据库(名称与包含扩展名的文件名相同)位于assets文件夹的 databases 文件夹中(您可能需要创建此文件夹,尽管屏幕截图显示您已将数据库放入数据库中)夹) .

示例

以下是使用SQliteAssethelper打开数据库的快速示例,在这种情况下,按照sqlite_master(SQlite的主表)列出项目(表,视图,索引,触发器等) .

Build.gradle (App)(部分): -

dependencies {

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support.constraint:constraint-layout:1.1.3'

implementation 'com.readystatesoftware.sqliteasset:sqliteassethelper:+' //<<<<<<<<<< ADDED JUST THIS LINE

testImplementation 'junit:junit:4.12'

androidTestImplementation 'com.android.support.test:runner:1.0.2'

androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

}

See comment re added line

DatabaseHelper(SQLiteAssethelper的子类) DBHelper.java

public class DBHelper extends SQLiteAssetHelper {

public static final String DBNAME = "DaycareCenters.db";

public static final int DBVERSION = 1;

SQLiteDatabase mDB;

public DBHelper(Context context) {

super(context, DBNAME, null, DBVERSION);

mDB = this.getWritableDatabase();

}

}

调用Activity(作为示例) MainActivity.java

public class MainActivity extends AppCompatActivity {

DBHelper mDBHlpr;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mDBHlpr = new DBHelper(this);

Cursor csr = mDBHlpr.mDB.rawQuery("SELECT * FROM sqlite_master",null);

while (csr.moveToNext()) {

Log.d("SQLITEMASTER","Name = " + csr.getString(csr.getColumnIndex("name")) + " Type = " + csr.getString(csr.getColumnIndex("type")));

}

csr.close();

}

}

结果(写入日志)

注意我刚刚复制了一个方便复制的数据库,表等列表与你的不一样 .

.

12-09 09:55:19.760 1473-1473/? I/SQLiteAssetHelper: successfully opened database DaycareCenters.db

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = android_metadata Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = player_card Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = sqlite_autoindex_player_card_1 Type = index

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = email Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = region Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = card Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = pc Type = table

12-09 09:55:19.764 1473-1473/? D/SQLITEMASTER: Name = sqlite_autoindex_pc_1 Type = index

第一行来自SQliteAssetHelper - 它确认数据库是从assets文件夹复制的 .

第二行显示表android_metadata,这是一个将添加的特定于Android的表,它包含语言环境 .

其他一些表格 .

由于约束或隐含约束而自动创建的一些索引

总之,一切都如预期 .

 类似资料: