开发者社区> 问答> 正文

android是用外部sqlite文件问题求解.?报错

有一个10m多大小的sqlite文件,要在android应用中使用它。

尝试过的方法如下:

1、把sqlite文件放入raw目录下,通过文件读写操作,将sqlite文件存入到sd卡中。这时候会出现错误:android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed。程序并没有读完全部的数据库内容就退出了。我这里的sd卡容量肯定能存放的下,文件读写部分的代码在下面:

// 首先在项目的包路径下创建一个存放数据文件的目录
		File dbDir = new File(dbPath);
		if (!dbDir.exists()) {
			dbDir.mkdir();
		}

		// 将已经存在的数据文件从raw下读入到应用中
		InputStream dbStream = context.getResources().openRawResource(
				R.raw.media);
		FileOutputStream fos = null;
		//
		File dbFile = new File(dbPath + dbName);

		try {
			if (!dbFile.exists()) {
				dbFile.createNewFile();
			}
			if (dbStream != null) {
				Log.i("simaben",
						"dbFile's path is -->" + dbFile.getAbsolutePath());
				fos = new FileOutputStream(dbFile);
				byte[] buffer = new byte[1024];
				int count = 0;

				int tmp = dbStream.read(buffer);

				while ((count = dbStream.read(buffer)) != -1) {
					fos.write(buffer, 0, count);
				}
				fos.flush();
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			if (dbStream != null) {
				try {
					dbStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

2、如果把sqlite文件放入到assents目录下,启动会报错:android.database.sqlite.SQLiteException: unable to open database file

请教一下现在应该怎么解决这个问题?谢谢大家了。

展开
收起
爱吃鱼的程序员 2020-06-22 18:49:43 616 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你可以把默认的db文件先放到assets目录下,应用首次启动时复制到SD卡的指定目录,然后将Android源码SQLiteOpenHelper.java拷贝出来自己修改数据库引用的路径为指定的SD卡路径就行了。 这个错误遇到过,是因为文件路径错误,断点调试下吧

    2020-06-22 18:50:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Android热修复技术原理详解与升级探索 立即下载
Android内存泄漏自动化链路分析组件Probe 立即下载
微信SQLite数据库损坏恢复实践 立即下载