2015-04-12 79 views
0

我已经创建了存储在SD卡中的数据库。但似乎发生了一些错误。 这里是代码的CreateDatabase存储在SD卡中的Android数据

public void createDatabase(){ 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/smsgarbage.db"; 
    sqlite = openOrCreateDatabase(path, MODE_PRIVATE, null); 
    try { 
     String query = "CREATE TABLE tblGarbage(id text PRIMARY KEY, prefixNum text)"; 
     sqlite.execSQL(query); 
     Toast.makeText(MainActivity.this, "Oncreate dabase was created", Toast.LENGTH_LONG).show(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

清单文件,我已经填写:

<uses-permission android:name="android.permission.RECEIVE_SMS"/> 
<uses-permission android:name="android.permission.WRITE_SMS"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

人谁是主人对这个问题,请花时间重新检查出来支持我。我很欣赏这一点。

+2

'有些事情是错误发生了......发布错误日志。那么只有问题可以找到。 –

+0

发生了什么问题? –

回答

0

嗨,如果你想通过SD卡创建数据库正确的方式来实现看下面的方式让我知道如果你有任何疑问,如果你没有得到我在任何点。

第1步。扩展SQLiteOpenHelper用完整的SD卡路径替换数据库名称。这将在定义位置创建数据库。

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 


import com.adb.test.sql.DAO.FoodMarchantDAO; 


public class SQLite extends SQLiteOpenHelper { 

    public static int DATABASE_VERSION = 1; 

    public static String DATABASE_NAME = "smsgarbage.db"; 

    private static final String DATABASE_PATH_NAME = getDBAbsolutePath(); 

    /** 
    * Create a helper object to create, open, and/or manage a database. This method always returns very quickly. 
    * The database is not actually created or opened until one of getWritableDatabase() 
    * or getReadableDatabase() is called. 
    * @param context 
    * @param name 
    * @param factory 
    * @param version 
    */ 
    public SQLite(Context context) 
    { 
     super(context, DATABASE_PATH_NAME, null, version); 
    } 


    @Override 
    public void onCreate(SQLiteDatabase db) { 
     // when we call SQLiteDatabase getWritableDatabase() this would called 
     // In fist time application install if no database then it would called once but that time Application 
     // database might be null we have to used here db 
    } 


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

    @Override 
    public void onOpen(SQLiteDatabase db) { 
     super.onOpen(db); 
    } 

    private static String getDBAbsolutePath() { 
     return new StringBuilder().append(appHomeDirectory()).append(DATABASE_NAME).toString(); 
    } 

    public static String appHomeDirectory() { 
     return new StringBuilder().append(getExternalStoragePath()).append("foodbazer").append("/").toString(); 
    } 
} 

第2步。在应用程序级别如何访问SQLite帮助类,请参阅下面的内容。

import com.adb.test.sql.data.SQLite; 
import android.app.Application; 
import android.database.sqlite.SQLiteDatabase; 


public class FoodBazerApplication extends Application{ 

    private static FoodBazerApplication mFoodBazerApplication; 

    public SQLiteDatabase mAppLevelDB; 

    public static FoodBazerApplication getInstance() 
    { 
     return mFoodBazerApplication; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mFoodBazerApplication = this; 
     SQLite tmpSQL= new SQLite(getApplicationContext()); 
     // it return null if first time database create onCreate() called, 
     // once database create it will open the database so openDataBase() called 
     mAppLevelDB = tmpSQL.getWritableDatabase(); 
    } 
}