Java 无法在Android应用程序中使用外部数据库

Java 无法在Android应用程序中使用外部数据库,java,android,mysql,database,sqlite,Java,Android,Mysql,Database,Sqlite,我想在MySQL中使用我的外部数据库。我有一个存档的数据库database.db.zip,并将其复制到我的Android Java项目的assets文件夹中。最后,我创建了一个用于打开数据库的类: import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQue

我想在MySQL中使用我的外部数据库。我有一个存档的数据库
database.db.zip
,并将其复制到我的Android Java项目的
assets
文件夹中。最后,我创建了一个用于打开数据库的类:

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;

public class databaseOpen extends SQLiteAssetHelper {

private static final String DATABASE_NAME = "parole.db";
private static final int DATABASE_VERSION = 1;

public databaseOpen(Context context) {

    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public String risposta(String parolain ){
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    String[] selectionArgs = {"ciao"};
    Cursor c =db.query("prima", null, null,selectionArgs, null, null,   null);
    c.moveToFirst();

    return c.getString(0);
}
}
我已经在我的
主页
中回收了它:

private databaseOpen db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    db = new databaseOpen(this);
    Toast toast=Toast.makeText(this, db.risposta("ciao"), Toast.LENGTH_LONG);
}
但它不起作用。以下是我得到的输出:

09-26 15:20:23.761    1099-1099/? I/SQLiteAssetHelper successfully opened database parole.db
09-26 15:20:23.764    1099-1099/? E/SQLiteLog (1) no such table: prima
09-26 15:20:23.783    1099-1099/? D/AndroidRuntime Shutting down VM
09-26 15:20:23.801    1099-1099/? E/AndroidRuntime FATAL EXCEPTION: main
    Process: com.example.roby.jarvis, PID: 1099
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.roby.jarvis/com.example.roby.jarvis.Home}: android.database.sqlite.SQLiteException: no such table: prima (code 1): , while compiling: SELECT * FROM prima
我想在mysql中使用我的外部数据库,我已经压缩了它(database.db.zip),并在java项目的assensts文件夹中复制了它

记录在案, 要么你使用了错误的术语,要么你感到困惑。 Android和您文章中的代码都与SQLite配合使用。 它不能与MySQL一起工作

当某些东西不起作用时, 阅读错误消息, 这通常可以解释问题,例如:

09-26 15:20:23.764 1099-1099/?E/SQLiteLog﹕ (1) 没有这样的表格:prima

文件中不存在名为“prima”的表

调试的下一步是检查电脑上文件的内容, 使用
sqlite3
命令行工具或类似工具, 并查看它有哪些表(
.schema
命令)

我想在mysql中使用我的外部数据库,我已经压缩了它(database.db.zip),并在java项目的assensts文件夹中复制了它

记录在案, 要么你使用了错误的术语,要么你感到困惑。 Android和您文章中的代码都与SQLite配合使用。 它不能与MySQL一起工作

当某些东西不起作用时, 阅读错误消息, 这通常可以解释问题,例如:

09-26 15:20:23.764 1099-1099/?E/SQLiteLog﹕ (1) 没有这样的表格:prima

文件中不存在名为“prima”的表

调试的下一步是检查电脑上文件的内容, 使用
sqlite3
命令行工具或类似工具,
然后查看它有哪些表(
.schema
命令)。

首先:您没有将
数据库
文件从资产文件复制到设备,这显然会导致
找不到此类表

试试这个代码,它对我有用。(我还对不同部分进行了评论,以供您理解)

用法:

DataBaseHelper dataBaseHelper = new DataBaseHelper(this);

    try {
        dataBaseHelper.createDataBase();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {

        dataBaseHelper.openDataBase();

    }catch(SQLException sqle){

        throw sqle;

    }

    Cursor c = dataBaseHelper.getData();

    if(c!=null) {
        /* your cursor code */
        c.close();
    }


    dataBaseHelper.close();
*注意:某些设备可能无法将数据库复制到设备。(已知设备:OnePlus)

不要忘记添加此权限

在你的舱单上


编辑1:OnePlus能够将数据库复制到
/data/data//databases/.db
,但它不允许访问该数据,对此我没有任何线索。

首先:您没有将
数据库
文件从资产文件复制到设备,这显然会导致
找不到此类表

试试这个代码,它对我有用。(我还对不同部分进行了评论,以供您理解)

用法:

DataBaseHelper dataBaseHelper = new DataBaseHelper(this);

    try {
        dataBaseHelper.createDataBase();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {

        dataBaseHelper.openDataBase();

    }catch(SQLException sqle){

        throw sqle;

    }

    Cursor c = dataBaseHelper.getData();

    if(c!=null) {
        /* your cursor code */
        c.close();
    }


    dataBaseHelper.close();
*注意:某些设备可能无法将数据库复制到设备。(已知设备:OnePlus)

不要忘记添加此权限

在你的舱单上


编辑1:OnePlus能够将数据库复制到
/data/data//databases/.db
,但它不允许访问该数据,对此我没有任何线索。

Logcat告诉您。。。没有这样的桌子:primaLogcat告诉你。。。没有这样的表:但我在projecti中复制数据库的地方我使用了ur代码,但android没有找到表,但应用程序现在没有崩溃,我尝试使用sqlitebrowser搜索表,它找到了表和值您有存储数据库的路径吗?通过记录路径或通过sqlitebrowser获取路径。如果您尝试手动编辑上述代码中的DB_路径,我已将数据库复制到pc中手机中的app/databases文件夹中,并已将其打开sqlitebrowser@swalkner请参见
Edit1
但我在project中复制数据库的地方我使用了你的代码,但安卓找不到表,但应用程序现在没有崩溃,我尝试使用sqlitebrowser搜索表,它会找到表和值您有存储数据库的路径吗?通过记录路径或通过sqlitebrowser获取路径。如果您尝试手动编辑上述代码中的DB_路径,我已将数据库复制到pc中手机中的app/databases文件夹中,并已将其打开sqlitebrowser@swalkner请参见
Edit1