0

这是完整的日志 cat

    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

和我的DatabaseHelper 类

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) {


        }





}
4

1 回答 1

0

这是你的问题:

@Override 
public void onCreate(SQLiteDatabase db) { 
    String myPath = DB_PATH + DB_NAME; 
    db.execSQL(myPath); 
} 

我不知道您要做什么,但myPath不是 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();
    }
}
于 2012-06-27T13:59:09.693 回答