我已经使用数据库浏览器创建了一个SQLite数据库,当我将其移动到资产文件夹并在android studio中打开它时,它看起来非常糟糕并且无法正常工作。解决办法是什么 ? :(
这是一个screenshot
答案 0 :(得分:0)
实际上,屏幕截图几乎确认了资产文件夹中的文件是有效的SQLite数据库。
这是前16个字节与数据库标头的字节匹配标头字符串:“ SQLite格式3 \ 000” Database File Format。
Android Studio本身不包含将文件作为SQLite数据库实际打开的要求(有一些工具,例如DB Browser可以执行此操作)。
对于您的应用程序,您需要做的是将文件作为SQLiteDatabase打开。通常,这是通过以下步骤完成的:将文件从资产文件夹复制到合适的位置(由于资产文件夹是软件包的一部分,它是只读的),然后通常通过SQLiteOpenHelper的子类从该位置打开文件。
有一个可用的类,即SQLiteAssetHelper,可以使打开数据库相对容易。 请注意,SQLiteAssetHelper希望数据库(名称与包含扩展名的文件名相同)位于资产文件夹的 databases 文件夹中(您可能必须创建此文件夹,尽管屏幕截图显示您已经将数据库放入了数据库文件夹中。
以下是使用SQliteAssethelper打开数据库的快速示例,在这种情况下,按照sqlite_master(SQlite的主表)列出项目(表,视图,索引,触发器等)。
Build.gradle (应用程序)(部分):-
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'
}
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();
}
}
一个调用活动(例如) 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