Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用DatabaseHelper时出错请尝试指出错误_Android - Fatal编程技术网

Android 使用DatabaseHelper时出错请尝试指出错误

Android 使用DatabaseHelper时出错请尝试指出错误,android,Android,以下是完整的日志目录: 06-27 18:24:36.332: E/AndroidRuntime(1267): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.frux.kfcmobile/com.frux.kfcmobile.KFCmobileActivity}: android.database.sqlite.SQLiteException: near "/": syntax error

以下是完整的日志目录:

    06-27 18:24:36.332: E/AndroidRuntime(1267): java.lang.RuntimeException: Unable to start 
activity ComponentInfo{com.frux.kfcmobile/com.frux.kfcmobile.KFCmobileActivity}: 
android.database.sqlite.SQLiteException: near "/": syntax error
和我的数据库助手类

public class DatabaseHelper extends SQLiteOpenHelper{

    private static String DB_PATH = "/data/data/com.frux.kfcmobile/databases/";
    private static String DB_NAME = "data";
    private SQLiteDatabase myDataBase; 
    private final Context myContext;
    private static final int DATABASE_VERSION = 1;


    public DatabaseHelper(Context context) {
        // TODO Auto-generated constructor stub
        super(context, DB_NAME, null, DATABASE_VERSION);
        this.myContext = context;


    }
     public void createDataBase() throws IOException{

            boolean dbExist = checkDataBase();

            if(dbExist){
                //do nothing - database already exist
                this.getWritableDatabase();
                this.close();
            }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 message");

                }
            }

        }


     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;
        }



     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) {
        String myPath = DB_PATH + DB_NAME;
        db.execSQL(myPath);

        }






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


        }





}
这就是你的问题:

@Override 
public void onCreate(SQLiteDatabase db) { 
    String myPath = DB_PATH + DB_NAME; 
    db.execSQL(myPath); 
} 
我不知道您想做什么,但是
myPath
不是SQL语句,因此尝试将其用作SQL语句会导致错误。将其更改为空方法,错误就会消失

@Override 
public void onCreate(SQLiteDatabase db) { 
} 
另一方面,如果数据库不存在,您就没有代码来复制它。应该放在构造函数中,如下所示:

DatabaseHelper(Context context, String dbname, int dbversion) {
super(context, dbname, null, dbversion);
    this.myContext = context;    
    if (checkDataBase(dbname)) {
        openDataBase(dbname);
    } else {
        try {
            this.getReadableDatabase();
            copyDataBase(dbname);
            this.close();
            openDataBase(dbname);
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
        Toast.makeText(context,
                "Initial " + dbname + " database has been reated",
                    Toast.LENGTH_LONG).show();
    }
}

“欢迎来到SO!因为您对这里有些陌生,您可能想现在就检查一下。从onCreate()中删除代码后,它就可以工作了。thx很多dre。但是我在第一次加载应用程序06-28 09:50:02.669:E/SqliteDatabaseCpp(3249):sqlite3_open_v2(“/data/data/com.frux.kfcmobile/databases/data/data/data”)时仍然遇到这个错误“,&句柄,1,NULL)失败