Java 随apk文件一起添加数据库

Java 随apk文件一起添加数据库,java,android,eclipse,Java,Android,Eclipse,我按照教程将sqlite数据库添加到apk中,但应用程序强制关闭在我的手机上 我修改了sqliteopenhelper,如下所示: public class openingclass extends SQLiteOpenHelper { public openingclass(Context c) { super(c,Db_NAME, null, DB_VERSION); } public vo

我按照教程将sqlite数据库添加到apk中,但应用程序强制关闭在我的手机上

我修改了sqliteopenhelper,如下所示:

public class openingclass extends SQLiteOpenHelper  
    {  
        public openingclass(Context c) {  
            super(c,Db_NAME, null, DB_VERSION);  
        }  
         public void createDataBase() {  

                boolean dbExist;  
                try {  

                     dbExist = checkDataBase();  


                } catch (SQLiteException e) {  

                    e.printStackTrace();  
                    throw new Error("database dose not exist");  

                }  

                if(dbExist){  
                //do nothing - database already exist  
                }else{  

                    try {  

                        copyDataBase();  


                    } catch (IOException e) {  

                        e.printStackTrace();  
                        throw new Error("Error copying database");  

                    }  
            //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();  


            }  

            }  

            /** 
              * 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.  
                throw new Error("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{  



                    //copyDataBase();  
                    //Open your local db as the input stream  
                    InputStream myInput = c1.getAssets().open(Db_NAME);  

                    // Path to the just created empty db  
                    String outFileName = DB_PATH +"/"+ Db_NAME;  
                    File databaseFile = new File(DB_PATH);  
                     // check if databases folder exists, if not create one and its subfolders  
                    if (!databaseFile.exists()){  
                        databaseFile.mkdir();  
                    }  

                    //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();  



            }  



            @Override  
            public synchronized void close() {  

                if(myDataBase != null)  
                myDataBase.close();  

                super.close();  

            }  

        @Override  
        public void onCreate(SQLiteDatabase arg0) {  
            String S = "create table " +  
                    TABLE_NAME +  
                    " (" +  
                    TABLE_COL_MAIL + " text primary key," +  
                    TABLE_COL_NAME + " text," +  
                    TABLE_COL_PASS + " text," +  
                    TABLE_COL_PHO + " text," +  
                    TABLE_COL_ADD + " text," +  
                    TABLE_COL_GEN + " text," +  
                    TABLE_COL_DOB + " text" +  
                    ");";  
            arg0.execSQL(S);  

            String S1 = "create table " +  
                    SECOND_TABLE_NAME +  
                    " (" +  
                    TABLE_COL_USER + " text," +  
                    TABLE_COL_PRODUCT + " text," +  
                    TABLE_COL_QUANTITY + " integer" +  
                    ");";  
            arg0.execSQL(S1);  




        }  

        @Override  
        public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {  
            // TODO Auto-generated method stub  

        } 
我还硬编码的路径,我不确定

  private final String DB_PATH="/data/data/com.example.shopkart/databases/";  
        private final String Db_NAME = "dbshopkart.db"; 
其他线程告诉我路径不正确。我如何设置正确的路径(使用/不使用硬编码)。请帮助

File publicDir = Environment.getExternalStorageDirectory();

publicDir.getAbsoluteFile();

也许这会对您有所帮助

您能告诉我如何在我的代码中使用上述两行吗。publicDir.getAbsoluteFile();是设备上的根路径。因此,您使用的每种设备都不同。然后可以像这样添加“硬编码路径”:路径=(publicDir.getAbsoluteFile()+“/dir1/dir2/…);