- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 this tutorial将数据库导入我的应用程序。
它在 API 10 上运行良好,
但在 API 17 上它会抛出以下错误:
05-19 14:52:46.492: E/SQLiteLog(1893): (14) cannot open file at line 30176 of [00bb9c9ce4]
05-19 14:52:46.492: E/SQLiteLog(1893): (14) os_unix.c:30176: (2) open(/data/data/com.example.koday/databases/dizionario7.sqlite) -
05-19 14:52:46.492: E/SQLiteDatabase(1893): Failed to open database '/data/data/com.example.koday/databases/dizionario7.sqlite'.
05-19 14:52:46.492: E/SQLiteDatabase(1893): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.example.koday.DataBaseHelper.checkDataBase(DataBaseHelper.java:82)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.example.koday.DataBaseHelper.createDataBase(DataBaseHelper.java:45)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.example.koday.MainActivity.frontquiz(MainActivity.java:70)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.example.koday.MainActivity.onCreate(MainActivity.java:64)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.Activity.performCreate(Activity.java:5104)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.os.Handler.dispatchMessage(Handler.java:99)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.os.Looper.loop(Looper.java:137)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at android.app.ActivityThread.main(ActivityThread.java:5039)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at java.lang.reflect.Method.invokeNative(Native Method)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at java.lang.reflect.Method.invoke(Method.java:511)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-19 14:52:46.492: E/SQLiteDatabase(1893): at dalvik.system.NativeStart.main(Native Method)
05-19 14:52:47.683: E/(1893): database aperto
05-19 14:52:47.683: E/SQLiteLog(1893): (1) no such table: dati
这是我的代码:
public class DataBaseHelper extends SQLiteOpenHelper {
// The Android's default system path of your application database.
private static String DB_PATH = "/data/data/com.example.koday/databases/";
private static String DB_NAME = "dizionario7.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
/**
* Constructor Takes and keeps a reference of the passed context in order to
* access to the application assets and resources.
*
* @param context
*/
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);
this.myContext = context;
}
/**
* Creates a empty database on the system and rewrites it with your own
* database.
* */
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
// do nothing - database already exist
} else {
// By calling this method and empty database will be created into
// the default system path
// of your application so we are gonna be able to overwrite that
// database with our database.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
/**
* Check if the database already exist to avoid re-copying the file each
* time you open the application.
*
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// database does't exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
* Copies your database from your local assets-folder to the just created
* empty database in the system folder, from where it can be accessed and
* handled. This is done by transfering bytestream.
* */
private void copyDataBase() throws IOException {
// Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
public void openDataBase() throws SQLException {
// Open the database
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
// Add your public helper methods to access and get content from the
// database.
// You could return cursors by doing "return myDataBase.query(....)" so it'd
// be easy
// to you to create adapters for your views.
// Getting single contact
String getkword(String word) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query("data",
new String[] { "_id", "english", "korean" }, "english" + "=?",
new String[] { word }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
String kword = cursor.getString(2);
// return contact
db.close();
return kword;
}
// Getting All Contacts
public Cursor getCursor() {
// Select All Query
String selectQuery = "SELECT * FROM " + "data";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
return cursor;
}
}
编辑编辑编辑编辑我在 list 中设置了权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
感谢您的帮助!
最佳答案
我认为问题在于不同版本 SDK 的数据库位置。请试试这个
private static String DB_PATH = "";
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, 1);// 1? its Database Version
if(android.os.Build.VERSION.SDK_INT >= 4.2){
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
} else {
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}
this.mContext = context;
}
检查一下
关于android - E/SQLiteLog(1893) : (14) cannot open file at line 30176 of [00bb9c9ce4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636017/
我想知道是否可以访问放在 tomcat 的 conf 文件夹中的文件。通常我会在这个文件中放置多个 webapp 的配置,在 war 之外。 我想使用类路径独立于文件系统。 我过去使用过 lib 文件
我有一个 PowerShell 脚本,它获取文件列表并移动满足特定条件的文件。为什么即使对象为空,foreach 循环也会运行? 我假设如果 $i 不存在,它就不会运行。但是如果 $filePath
我已将 BasicAccountRule.drl 放置在我的 Web 应用程序中,位置为:C:/workspace/exim_design/src/main/resources/rules/drl/i
我使用 File.open('file.txt').class 和 File.open('file.txt').readlines.class 以及前者进行了检查一个返回 File,后者返回 Arra
我正在尝试使用 FileOutputStream 删除文件,在其中写入内容后。这是我用来编写的代码: private void writeContent(File file, String fileC
我正在尝试使用 flink 和 python 批处理 api 测试 Wordcount 经典示例。我的问题是,将数据源从 env.from_elements() 修改为 env.read_text()
我正在尝试制作一个可以同时处理多个不同文件的程序。我的想法是制作一个包含 20 个 FILE* 的数组,以便在我达到此限制时能够关闭其中一个并打开请求的新文件。 为此,我想到了一个函数,它选择一个选项
我有两个文件A和B文件A: 976464 792992 文件B TimeStamp,Record1,976464,8383,ABCD 我想搜索文件 A 和文件 B 中的每条记录并打印匹配的记录。打印的
我有一些保存在 map 中的属性文件。示例: Map map = new HashMap<>(); map.put("1", "One"); map.put("2", "Two"); map.put(
我正在尝试找出一个脚本文件,该文件接受一个包含文件列表的文件(每一行都是一个文件路径,即 path/to/file)并将它们合并到一个文件中。 例如: list.text -- path/to/fil
为了使用 File.CreateText() 和 File.AppendText() 你必须: 通过调用这些方法之一打开流 写消息 关闭流 处理流 为了使用 File.AppendAllText()
使用rsync时,如何在使用--files-from参数复制时重命名文件?我有大约190,000个文件,在从源复制到目标时,每个文件都需要重命名。我计划将文件列表放在一个文本文件中传递给--files
我在非服务器应用程序中使用 Spring(只需从 Eclipse 中某个类的 main() 编译并运行它)。 我的问题是作为 new FileSystemXmlApplicationContext 的
QNX (Neutrino 6.5.0) 使用 ksh 的开源实现作为其 shell 。许多提供的脚本,包括系统启动脚本,都使用诸如 if ! test /dev/slog -ef /dev/slog
当我尝试打开从我的应用程序下载的 xls 文件时,出现此错误: excel cannot open the file because the file format or file extension
有一些相关的概念,即文件指针、流和文件描述符。 我知道文件指针是指向数据类型 FILE 的指针(在例如 FILE.h 和 struct_FILE.h 中声明)。 我知道文件描述符是 int ,例如成员
好吧,这应该很容易... 我是groovy的新手,我希望实现以下逻辑: def testFiles = findAllTestFiles(); 到目前为止,我想出了下面的代码,该代码可以成功打印所有文
我理解为什么以下内容会截断文件的内容: Get-Content | Out-File 这是因为 Out-File 首先运行,它会在 Get-Content 有机会读取文件之前清空文件。 但是当我尝
您好,我正在尝试将文件位置表示为变量,因为最终脚本将在另一台机器上运行。这是我尝试过的代码,然后是我得到的错误。在我看来,python 是如何添加“\”的,这就是导致问题的原因。如果是这种情况,我如何
我有一个只包含一行的输入文件: $ cat input foo bar 我想在我的脚本中使用这一行,据我所知有 3 种方法: line=$(cat input) line=$( input"...,
我是一名优秀的程序员,十分优秀!