2012-03-06 34 views
0
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DatabaseHelper extends SQLiteOpenHelper{ 


//The Android's default system path of your application database. 
private static String DB_PATH = "/data/data/dk.millerbean.quiz/databases/"; 
private static String DB_NAME = "quiz.db"; 

//private SQLiteDatabase myDataBase; 
private SQLiteDatabase myData; 
private final Context myContext; 

/** 
* Constructor 
* Takes and keeps a reference of the passed context in order to access to the application assets and resources. 
* @param context 
*/ 
public DatabaseHelper(Context context) { 
super(context, DB_NAME, null, 1); 
this.myContext = context; 
this.myData = getWritableDatabase(); 

} 




/** 
* Creates a empty database on the system and rewrites it with your own database. 
* */ 
private void createDataBase(SQLiteDatabase db) throws IOException 
{ 
    boolean dbExist = checkDataBase(); 
    if(dbExist) 
    { 
     //do nothing - database already exist 
    } 
    else 
    { 
     db.execSQL("CREATE TABLE Quiz(_id INTEGER PRIMARY KEY, quizName Text)"); 

    } 
} 

/** 
* Execute all of the SQL statements in the String[] array 
* @param db The database on which to execute the statements 
* @param sql An array of SQL statements to execute 
*/ 
private void execMultipleSQL(SQLiteDatabase db, String[] sql){ 
    for(String s : sql) 
     if (s.trim().length()>0) 
     { 
      db.execSQL(s); 
     } 
} 


public boolean checkDataBase() 
{ 
    SQLiteDatabase checkDB = null; 
    try 
    { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    } 
    catch(SQLiteException e) 
    { 
     e.getStackTrace(); 
    } 

    if(checkDB != null) 
    { 
     checkDB.close(); 
    } 

    return checkDB != null ? true : false; 
} 


public void openDataBase() throws SQLException 
{ 
    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
} 


@Override 
public synchronized void close() 
{ 
    if(myData != null) 
    { 
     myData.close(); 
    } 
    super.close(); 
} 


@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    try { 
     createDataBase(db); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 


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

}Android的數據庫類不是從logcat的工作

我的錯誤:

02-28 22:34:24.160: W/dalvikvm(18715): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 
02-28 22:34:24.200: E/AndroidRuntime(18715): FATAL EXCEPTION: main 
02-28 22:34:24.200: E/AndroidRuntime(18715): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{dk.millerbean.quiz/dk.millerbean.quizActivity}: java.lang.NullPointerException 
02-28 22:34:24.200: E/AndroidRuntime(18715): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1880) 
02-28 22:34:24.200: E/AndroidRuntime(18715): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
02-28 22:34:24.200: E/AndroidRuntime(18715): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
+0

應該有第二節到你的堆棧跟蹤,顯示你的'NullPointerException'的位置。 – CommonsWare 2012-03-07 01:19:08

+0

我在哪裏可以找到這個? – Millerbean 2012-03-07 08:23:01

+0

通過閱讀。它會立即顯示在上面粘貼的堆棧跟蹤下方。 – CommonsWare 2012-03-07 12:23:34

回答

0

嘗試使用SQLiteOpenHelper來管理你的表的創建。它會確保所有事情都按照正確的順序進行。