本问题已经有最佳答案,请猛点这里访问。

在这里,我想使用我预先填充的SQLite数据库到我的Android应用程序。 因此,首次运行时,它会自动从assets文件夹中复制数据库,并在我的Android应用程序中将其用作数据库。

到目前为止,我已经做了这些事:

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String MyVillageSoftware ="MyVillageSoftware";

public static final String table_Question ="table_question";

private static final String DATABASE_PATH="/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/";

private static final String DATABASE_NAME="question.db";

//TOL for transaction Coloumn

SQLiteDatabase db;

Context context;

private static final String TAG = DatabaseHelper.class.getSimpleName();

public DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, 1);

this.context=context;

}

@Override

public void onCreate(SQLiteDatabase db) {

}

public void createDatabase(){

createDB();

}

public void createDB(){

boolean dbExist = DBExist();

if(!dbExist){

this.getReadableDatabase();

copyDBFromResource();

}

}

private boolean DBExist(){

SQLiteDatabase db = null;

try{

String databasePath = DATABASE_PATH+DATABASE_NAME;

db=SQLiteDatabase.openDatabase(databasePath, null,

SQLiteDatabase.OPEN_READWRITE);

db.setLocale(Locale.getDefault());

db.setLockingEnabled(true);

db.setVersion(1);

}catch(SQLiteException e){

Log.e("SqlHelper","Database nda ada babi");

}

if(db != null){

db.close();

}return db != null ? true : false;

}

private void copyDBFromResource(){

InputStream inStream=null;

OutputStream outStream = null;

String dbFilePath=DATABASE_PATH+DATABASE_NAME;

try{

inStream=context.getAssets().open(DATABASE_NAME);

outStream=new FileOutputStream(dbFilePath);

byte[] buffer = new byte[1024];

int length;

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

outStream.write(buffer, 0 , length);

}

outStream.flush();

outStream.close();

inStream.close();

}catch (IOException e){

throw new Error("Problem cuk");

}

}

public List getAllCategory() {

List AllCategoryList = new ArrayList();

List AllCategIdList = new ArrayList();

String selectQuery ="SELECT * FROM" + table_Question;

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {

do {

String Id = cursor.getString(0);

String A = cursor.getString(1);

String B = cursor.getString(2);

String C = cursor.getString(3);

String D = cursor.getString(4);

String aExplain = cursor.getString(5);

String bExplain = cursor.getString(6);

String cExplain = cursor.getString(7);

String dExplain = cursor.getString(8);

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return AllCategoryList;

}

@Override

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

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

onCreate(db);

}

}

但我得到一个这样的错误信息:

10-28 07:18:38.988 2425-2425/gook.psikologikarakter E/SQLiteLog﹕ (14) cannot open file at line 30046 of [9491ba7d73]

10-28 07:18:38.988 2425-2425/gook.psikologikarakter E/SQLiteLog﹕ (14) os_unix.c:30046: (2) open(/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/question.db) -

10-28 07:18:38.989 2425-2425/gook.psikologikarakter E/SQLiteDatabase﹕ Failed to open database '/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/question.db'.

android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)

at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)

at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)

at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)

at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)

at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)

at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)

at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)

at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)

at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)

at gook.psikologikarakter.DatabaseHelper.DBExist(DatabaseHelper.java:65)

at gook.psikologikarakter.DatabaseHelper.createDB(DatabaseHelper.java:52)

at gook.psikologikarakter.DatabaseHelper.createDatabase(DatabaseHelper.java:48)

at gook.psikologikarakter.MainActivity.onCreate(MainActivity.java:59)

at android.app.Activity.performCreate(Activity.java:5990)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)

at android.app.ActivityThread.access$800(ActivityThread.java:151)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5257)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我不知道到底发生了什么,但我想我无法打开数据库文件。 但我不知道该怎么办。 请高手帮帮我。

谢谢你。

您不能使用assets文件夹中的数据库。您希望在首次运行时将数据库复制到/ data / data / YOUR_PACKAGE / databases /。这将有所帮助:stackoverflow.com/questions/513084/…

是的先生,我的意思是,所以我的问题是如何在第一次启动应用程序时将数据库从assets文件夹复制到data / data / your_package / databases /?

我的朋友就像复制你使用java的任何其他文件一样简单。以下是专门针对您的案例:stackoverflow.com/a/20592481/1371041

但是我在这个先生上得到了错误:private String DATABASE_PATH = context.getApplicationInfo()。dataDir +"/ databases /";我收到错误"非法转发参考"

@ChallengeAccepted谢谢先生,它运作良好

很高兴解决了你的问题。至于"非法前向引用"你确定它是在构造函数中吗?你做了什么来解决你的错误?

我使用另一个模式代码来做那个先生。我使用此代码先生,private void copyDatabase(File dbFile)抛出IOException {InputStream is = context.getAssets()。open(DATABASE_NAME); OutputStream os = new FileOutputStream(dbFile); byte [] buffer = new byte [1024]; while(is.read(buffer)> 0){os.write(buffer); os.flush(); os.close(); is.close(); }

private static final String DATABASE_PATH="/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/";

这是本地文件系统上的路径,而不是运行时设备上文件的路径。 使用getResources().getAssets().openFile(...)获取文件的InputStream。

代码就像这先生一样?。context.getResources()getAssets()中openFile(DATABASE_NAME)。 但我在openFile()上遇到错误;

android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库相关推荐

  1. mysql如何上传照片_MySQL数据库之图片上传存储数据库的2种方法讲解(Mysql)

    本文主要向大家介绍了MySQL数据库之图片上传存储数据库的2种方法讲解(Mysql) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 数据库Mysql存储,读取图片 在项目中,很 ...

  2. Android 使用SQLiteDatabase操作SQLite数据库(一)

    转自http://www.eoeandroid.com/forum.php?mod=viewthread&tid=83427 此博文解决了解决了我的一个疑问 一直不知道为什么非要用占位符 原来 ...

  3. 服务器修改数据库值,服务器上怎么修改数据库内存

    服务器上怎么修改数据库内存 内容精选 换一换 数据库安全审计Agent的CPU阈值和内存阈值用户不能直接修改.Agent安装在数据库端的用户,若有需求,请您联系技术支持修改数据库安全审计Agent的阈 ...

  4. Android 使用SQLiteDatabase操作SQLite数据库(二)

    转自http://www.eoeandroid.com/thread-83428-1-1.html 除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专 ...

  5. html上传图片至数据库,Django 图片上传到数据库 并调用显示

    环境:Django2.0 Python3.6.4 建立项目,数据库设置,就不说了. 直接上代码: 在models.py中,需要建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继 ...

  6. 浅谈数据库设计技巧(上)

    浅谈数据库设计技巧(上) 说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡 ...

  7. 达梦数据库在docker上的运行和添加rlwrap环境变量

    前言 本次内容基于在docker上添加dm数据库并运行,以及如何在docker中编辑dm数据库,并上传相应的软件包用来安装,以及配置相应的环境变量信息 一.docker安装和启动 1.docker安装 ...

  8. Android studio+SQLCipher加密SQLite数据库的几个坑

    Android studio SQLCipher加密SQLite数据库的几个坑 前言:Android 自带的SQLite数据库可以用于数据存储,但是,大家都知道其数据是存储于手机的data/data/ ...

  9. 基于 SQLite 开发Android studio 的记账APP

    使用Android studio版本:3.2  JDK版本: jdk1.8.0_151 华为 mate s 测试不显示Log.d()部分手机解决方法 https://blog.csdn.net/Hor ...

最新文章

  1. Nginx设置成服务并开机自动启动的配置详解
  2. webrtc fec
  3. SQL Server技术问题之索引优缺点
  4. 面向对象的继承关系体现在数据结构上时,如何表示
  5. VTK:PolyData之Reflection
  6. windows下使用svn命令行
  7. linux下安装mysql说明
  8. 创业版上市与SAP管理软件系统的关系
  9. linux操作系统分区图解,图解磁盘分区介绍(超经典)
  10. linux代码实现进程监控,linux进程监控shell脚本代码
  11. 达内python培训视频下载
  12. jdk环境变量的配置
  13. 25匹赛马,没有秒表,五条跑道。用最少的比赛场次找出三匹跑得最快的马。过程分析
  14. WebRTC 系列2--双摄像头同时预览
  15. TRANSFORMER-TRANSDUCER:END-TO-END SPEECH RECOGNITION WITH SELF-ATTENTION
  16. 书翻页效果php,Css实现翻书效果
  17. Vue实现一键截屏功能
  18. HH SaaS电商系统的各种编号(编码/代码/代号)设计
  19. 11款最好的JavaScript源代码编辑器
  20. 【虚拟现实】基于Vizard的三维美术馆漫游

热门文章

  1. python3中实现tar_Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法...
  2. 依时利考勤机说明书_考勤机(依时利)产品手册
  3. 最优化学习笔记(五)牛顿法及拟牛顿法
  4. IT 行业的创新 - 创新的迷思 (1-4)
  5. java 如何发提示_消息提醒-如何实现收到待办给QQ发送提醒?
  6. python对象的三个属性_Python 对象属性的访问
  7. c语言双链表排序交换节点_图解:单链表翻转的三种方式!
  8. mysql登陆 慢_mysql登陆慢问题解决
  9. long类型怎么转换成string_Python知识点-Python变量类型有哪些?
  10. mysql连接服务密码_Hydra爆破常见服务密码