2012-03-25 109 views
0

下面的代碼是我的數據庫處理程序類我從教程中獲得它。除了那篇教程,我在很多論壇上看到了這種方法。但是,即使我創建了表,它似乎不會被創建。我的錯誤可以幫助我。不能在android中創建數據庫

public class DatabaseHandler extends SQLiteOpenHelper implements 
    DatabaseHandlerInterface { 

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "AACDroidDB"; 

// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 
private static final String TABLE_PHRASES = "phrase"; 

// Phrase Table Columns names 
private static final String KEY_PHRASE_ID = "id"; 
private static final String KEY_PHRASE_STARTLETTER = "startLetter"; 
private static final String KEY_PHRASE_FULLPHRASE = "fullPhrase"; 
private static final String KEY_PHRASE_USAGECOUNT = "usageCount"; 
private static final String KEY_PHRASE_ISFAMOUS = "isFamous"; 
private static final String KEY_PHRASE_CREATEDATE = "createDate"; 
private static final String KEY_PHRASE_LASTUSAGEDATE = "lastUsageDate"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 

    String CREATE_PHRASES_TABLE = "CREATE TABLE " + TABLE_PHRASES + "(" 
      + KEY_PHRASE_ID + " INTEGER PRIMARY KEY," 
      + KEY_PHRASE_STARTLETTER + " text, " 
      + KEY_PHRASE_FULLPHRASE + " text, " 
      + KEY_PHRASE_USAGECOUNT + " integer, " 
      + KEY_PHRASE_ISFAMOUS + " integer, " 
      + KEY_PHRASE_CREATEDATE + " text, " + KEY_PHRASE_LASTUSAGEDATE 
      + " text" + ");"; 

    db.execSQL(CREATE_PHRASES_TABLE); 
    Log.d(Constants.DB_LOG, "database created"); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_PHRASES); 

    // Create tables again 
    onCreate(db); 
} 

/** 
* All CRUD(Create, Read, Update, Delete) Operations 
*/ 

// Adding new phrase 
public void addPhrase(Phrase phrase) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(KEY_PHRASE_STARTLETTER, phrase.getStartletter()); 
    values.put(KEY_PHRASE_FULLPHRASE, phrase.getFullphrase()); 
    values.put(KEY_PHRASE_USAGECOUNT, phrase.getUsagecount()); 
    values.put(KEY_PHRASE_ISFAMOUS, phrase.getIsFamous()); 
    values.put(KEY_PHRASE_CREATEDATE, phrase.getCreateDate()); 
    values.put(KEY_PHRASE_LASTUSAGEDATE, phrase.getLastUsageDate()); 
    // 
    db.insert(TABLE_PHRASES, null, values); 
    db.close(); // Closing database connection 
} 

// getting new phrase 
public Phrase getPhrase(int idForPhrase) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_PHRASES, new String[] { KEY_PHRASE_ID, 
      KEY_PHRASE_STARTLETTER, KEY_PHRASE_FULLPHRASE, 
      // KEY_PHRASE_USAGECOUNT, 
      KEY_PHRASE_ISFAMOUS, 
      // KEY_PHRASE_CREATEDATE, 
      KEY_PHRASE_LASTUSAGEDATE }, KEY_PHRASE_ID + "=?", 
      new String[] { String.valueOf(idForPhrase) }, null, null, null, 
      null); 

    if (cursor != null) 
     cursor.moveToFirst(); 

    // int id = Integer.parseInt(cursor.getString(0)); 
    String startLetter = cursor.getString(1); 
    String fullPhrase = cursor.getString(2); 
    // int usageCount = Integer.parseInt(cursor.getString(3)); 
    // int isFamous = Integer.parseInt(cursor.getString(4)); 
    // String createDate = cursor.getString(5); 
    // String lastUsageDate = cursor.getString(6); 

    Phrase phrase = new Phrase(); 
    // phrase.setId(id); 
    phrase.setStartletter(startLetter); 
    phrase.setFullphrase(fullPhrase); 
    // phrase.setUsagecount(usageCount); 
    // phrase.setIsFamous(isFamous); 
    // phrase.setCreateDate(createDate); 
    // phrase.setLastUsageDate(lastUsageDate); 

    // return contact 
    return phrase; 
} 

// Updating single contact 
public int updatePhrase(Phrase phrase) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(KEY_PHRASE_STARTLETTER, phrase.getStartletter()); 
    values.put(KEY_PHRASE_FULLPHRASE, phrase.getFullphrase()); 
    values.put(KEY_PHRASE_USAGECOUNT, phrase.getUsagecount()); 
    values.put(KEY_PHRASE_ISFAMOUS, phrase.getIsFamous()); 
    values.put(KEY_PHRASE_CREATEDATE, phrase.getCreateDate()); 
    values.put(KEY_PHRASE_LASTUSAGEDATE, phrase.getLastUsageDate()); 

    // updating row 
    return db.update(TABLE_PHRASES, values, KEY_PHRASE_ID + " = ?", 
      new String[] { String.valueOf(phrase.getId()) }); 
} 

}

+0

我目前也是從Android開始的,並且「似乎並沒有被創建」我的想法是,我認爲創建一個數據庫會在手機上創建一個物理文件,但是我經歷過它並沒有這樣做,噸。我找不到任何文件,但我可以插入和選擇數據從數據庫反正:)希望它可以幫助。 – f2lollpll 2012-03-25 19:45:11

回答

0

的onCreate()方法時,該設備上首次創建數據庫只調用。嘗試從設置 - >應用程序 - >管理應用程序清除設備上的本地數據。

您也可以更改數據庫版本。

1

onCreate(...)方法SQLiteHelper直到獲得對數據庫的引用纔會調用。

在你Activity創建助手的一個實例,然後從它那裏得到一個可寫的數據庫如下...

DatabaseHandler myHelper = new DatabaseHandler(this); 
SQLiteDatabase db = myHelper.getWritableDatabase(); 

順便說一句,我會建議使用名爲「_id」爲你的數據庫ID列,如果你打算使用遊標。在Android中,Cursor必須具有專門稱爲_id的列才能正常工作。創建表格時使用該特定名稱意味着您不必在SQL查詢中「別名」列名稱。