2012-10-25 50 views
0

我想在sqlite中創建表,但它顯示錯誤,表不能創建。我有一個相同的代碼,但數據庫和表名稱是不同的。這些字段是相同的。還有一個疑問。我無法在包含相同字段的同一個數據庫中創建不同的表。sqlite。表沒有創建

DbAdapter.java

代碼如下。

public class DbAdapter { 

    private static final String DATABASE_NAME="bible1"; 
    private static final String DATABASE_TABLE="test1"; 
    private static final int DATABASE_VERSION=1; 

    public static final String KEY_ID="_id"; 
    public static final String UNITS="units"; 
    public static final String CHAPTERS="chapters"; 

    private static final String CREATE_DATABASE="create table test1 (_id integer primary key autoincrement, units text not null, chapters text not null);"; 

    private SQLiteHelper sqLiteHelper; 
    private static SQLiteDatabase sqLiteDatabase; 

    private Context context; 

    //constructor 

    public DbAdapter(Context c){ 
     context = c; 
    } 

    private static class SQLiteHelper extends SQLiteOpenHelper{ 

     public SQLiteHelper(Context context){ 

      super(context,DATABASE_NAME,null,DATABASE_VERSION); 
     } 
     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL(CREATE_DATABASE); 
      MakeUnits(); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 

     } 

    } 

    public DbAdapter open() throws SQLException{ 
     try{ 
     sqLiteHelper = new SQLiteHelper(context); 
     sqLiteDatabase = sqLiteHelper.getWritableDatabase(); 
     }catch(NullPointerException ne){ 
      Log.e("error in creating the table", "bye"); 
     } 

     return this; 
    } 

    public void close(){ 
     sqLiteHelper.close(); 
    } 

    public static long MakeUnits() 
    { 
     ContentValues insert1 = new ContentValues(); 
     insert1.put(UNITS, "Unit1"); 
     insert1.put(CHAPTERS, "CHAPTER1"); 
     return sqLiteDatabase.insert(DATABASE_TABLE,null,insert1); 
    } 

    public Cursor fetchAllNotes(){ 
     return sqLiteDatabase.query(DATABASE_TABLE, new String[]{KEY_ID,UNITS,CHAPTERS}, null, null, null, null, null); 
    } 
} 

MainActivity.java

public class MainActivity extends ListActivity { 

    private DbAdapter Database; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ListView listContent = (ListView) findViewById(android.R.id.list); 

     Database= new DbAdapter(this); 
     Database.open(); 

     Cursor c = Database.fetchAllNotes(); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

這是給錯誤時,open()方法被調用。無法弄清楚。 在logcat的標記中的錯誤是「在創建表錯誤」

+0

請您提供更多信息,如錯誤消息或呼叫跟蹤? – flypen

+0

在DbAdapter的open()方法中,它給出了錯誤。如果你寄給我你的郵件,那麼我可以郵寄代碼。 – test1990bdvt

+0

我不能在同一個數據庫中有兩個具有相同字段名稱的表。 – test1990bdvt

回答

0

,當你撥打電話到 getWritableDatabase()/ getReadableDatabase()數據庫將不僅創造

如果沒有一個可寫分貝的權限,你會得到一個可讀的 分貝。

public SQLiteDatabase getWritableDB() { 
     try { 
      return helper.getWritableDatabase(); 
     } catch (Exception e) { 
      return getReadableDB(); 
     } 
    } 

    public SQLiteDatabase getReadableDB() { 
     return helper.getReadableDatabase(); 
    } 
1

你試圖調用sqLiteDatabase.insertMakeUnits,但這sqLiteDatabase變量爲空,直到您調用​​後。您應通過dbMakeUnits並呼叫插入db,而不是sqLiteDatabase

+0

這就是它。我只是跑了一些測試,這是問題所在。順便說一句,我討厭你Tim rofl。我只是花了10分鐘計算出這個xD – Rawr

+0

添加了代碼更改。當有人明確寫出更改時,我總是很感激。 – Rawr

+0

謝謝。有效。 – test1990bdvt