2013-01-06 66 views
0

我有問題將值插入到我的Android SQLite數據庫的表中。我已經嘗試過修改一些教程示例,但無濟於事。有人可以看看我的代碼,指出我應該改變什麼才能使其工作?這裏是我的班級代碼:SQLite數據庫安卓 - INSERT方法

public class Baza extends SQLiteOpenHelper { 
SQLiteDatabase db; 
static final String dbName ="MyDb"; 
static final int dbVersion = 1; 

// tabela przepisy 
static final String TabName = "Przepisy"; 
static final String TabCol1 = "id"; 
static final String TabCol2 = "Nazwa"; 
static final String TabCol3 = "Kategoria"; 

static final String dbCreate = "CREATE TABLE" + TabName + "(" + 
    TabCol1+ " INTEGER PRIMARY KEY, "+ 
    TabCol2+ " TEXT, " + 
    TabCol3+ " TEXT)"; 

public Baza(Context context) { 
    super(context, dbName, null, dbVersion); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 
    db.execSQL(dbCreate); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 
    db.execSQL("DROP TABLE IF EXISTS "+ TabName); 
} 

public boolean insert(String name, String cat) 
{ 
    db = super.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 

     cv.put(TabCol2, name); 
     cv.put(TabCol3, cat); 

     long isAdded = db.insert(TabName, null, cv); 
     if (isAdded == -1)  return false; 
     else return true; 
} 
} 

我很感激任何幫助。

logcat的錯誤:

I/Process(1289): Sending signal. PID: 1289 SIG: 9 
D/AndroidRuntime(1318): Shutting down VM 
W/dalvikvm(1318): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
E/AndroidRuntime(1318): FATAL EXCEPTION: main 
E/AndroidRuntime(1318): java.lang.NullPointerException 
E/AndroidRuntime(1318): at com.example.mojabaza.Baza.insert(Baza.java:60) 
E/AndroidRuntime(1318): at com.example.mojabaza.Mojabaza$2.onClick(Mojabaza.java:45) 
E/AndroidRuntime(1318): at android.view.View.performClick(View.java:2485) 
E/AndroidRuntime(1318): at android.view.View$PerformClick.run(View.java:9080) 
E/AndroidRuntime(1318): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(1318): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(1318): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(1318): at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime(1318): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1318): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(1318): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime(1318): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime(1318): at dalvik.system.NativeStart.main(Native Method) 
+0

你可以發佈你的堆棧跟蹤嗎?這可能會有所幫助。 – yugidroid

+0

向我們展示瞭如何創建Baza實例並使用它。 – Leonidos

回答

0

你缺少一個空間,我不知道AUTO INCREMENT就是兩個字:

"CREATE TABLE" + TabName + "(" + 
    TabCol1+ " INTEGER PRIMARY KEY AUTO INCREMENT, "+ 

用途:

// Added: v 
"CREATE TABLE " + TabName + "(" + 
    TabCol1+ " INTEGER PRIMARY KEY, "+ // autoincrement is implied as well as `not null` 

根據錯誤你可能需要設置dbVersion等於2建立這個新的模式。

+0

感謝您的幫助和解答。我改變了代碼,但它仍然不起作用。當我調用insert(String,String)方法時出現錯誤:db = super.getWritableDatabase(); – user1953558

+0

單擊[「編輯」](http://stackoverflow.com/posts/14187269/edit)在您的問題下發布LogCat錯誤,以便我們可以看到發生了什麼。 (當你這樣做的時候,請通知我一個評論。) – Sam

+0

Logcat上傳 – user1953558