2017-05-16 202 views
0

我正在一個android項目上工作,雖然我試圖創建數據庫,似乎我有什麼問題,這是我的代碼,假設創建一個數據庫與多個表,但它doesn'產生任何表,請幫我在這裏找到錯誤:)無法創建android sqlite數據庫

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

public class DataBase extends SQLiteOpenHelper { 
public static final String DATABASE_NAME = "StudyLife"; 
public static final String Table_Subject = "Subject"; 
public static final String sub_col1 = "ID"; 
public static final String sub_col2 = "Name"; 
public static final String sub_col3 = "NumOfHours"; 
//Table Class 
public static final String Table_Class ="Class"; 
public static final String class_Col1 = "ID"; 
public static final String class_col2 = "Name"; 
public static final String class_Col3 = "Subject_ID"; 
public static final String class_Col4 = "Minutes "; 
public static final String Class_Col5 = "Hours"; 
public static final String class_Col6 = "Date"; 
public static final String class_Col7 = "location"; 
public static final String class_Col8 = "Type"; 
//Table Tasks && Exams 
public static final String Table_Tasks ="Tasks"; 
public static final String Task_col1 ="ID"; 
public static final String Task_col2 ="Name"; 
public static final String Task_col3 ="Subject_ID"; 
public static final String Task_col4 ="Deadline"; 
public static final String Task_col5 ="Type";//Bool To Exam OR Task 

public DataBase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, DATABASE_NAME,null, 1); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE "+ DataBase.Table_Subject + "("+DataBase.sub_col1+" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT ," 
      + DataBase.sub_col2 + "TEXT NOT NULL ," + 
       DataBase.sub_col3+" INTEGER)"); 


    db.execSQL("CREATE TABLE "+DataBase.Table_Tasks+"("+DataBase.Task_col1+"INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," + 
      DataBase.Task_col2+ "TEXT," + 
      DataBase.Task_col3+"INTEGER NOT NULL," + 
      DataBase.Task_col4+ "INTEGER," + 
      DataBase.Task_col5+ "INTEGER)"); 
    db.execSQL("CREATE TABLE "+DataBase.Table_Class+ "("+DataBase.class_Col1+" INTEGER PRIMARY KEY AUTOINCREMENT," + 
      DataBase.class_col2+"TEXT," + 
      DataBase.class_Col3+"INTEGER," + 
      DataBase.class_Col4+"TEXT," + 
      DataBase.Class_Col5+"TEXT,"+ 
      DataBase.class_Col6+"TEXT," + 
      DataBase.class_Col7+"TEXT," + 
      DataBase.class_Col8+"TEXT)"); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL(" DROP TABLE IF EXISTS Subject "); 
    db.execSQL(" DROP TABLE IF EXISTS Class"); 
    db.execSQL(" DROP TABLE IF EXISTS Tasks"); 
    onCreate(db); 

}} 

這是我在logcat中脫身跑

10月5日至十六日後:55:02.407 17033-17033 /? d/AndroidRuntime:>>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit < < < < < < 十月5日至16日:55:02.423 17033-17033 /? D/AndroidRuntime:CheckJNI關閉 05-16 10:55:02.443 17033-17033 /? D/dalvikvm:試圖加載lib libjavacore.so 0x0 05-16 10:55:02.443 17033-17033 /? D/dalvikvm:添加共享庫libjavacore.so 0x0 05-16 10:55:02.451 17033-17033 /? D/dalvikvm:試圖加載lib libnativehelper.so 0x0 05-16 10:55:02.455 17033-17033 /? D/dalvikvm:添加共享庫libnativehelper.so 0x0 05-16 10:55:02.455 17033-17033 /? D/dalvikvm:在libnativehelper.so 0x0中找不到JNI_OnLoad,跳過初始化 05-16 10:55:02.499 1282-1288 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.499 1282-1288 /? I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:02.527 772-778 /? I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:02.527 772-778 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.555 1480-1486 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.559 1480-1486 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.579 17033-17033 /? D/dalvikvm:注意:class Landroid/app/ActivityManagerNative;有179個未實現(抽象)方法 05-16 10:55:02.595 1512-1516 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.595 1512-1516 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.623 17033-17040 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.647 1546-1550 /? I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:02.659 1546-1550 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.683 818-824 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.687 818-824 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.711 788-794 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.731 788-794 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.735 885-890 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.743 885-890 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.763 695-701 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.775 695-701 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.823 1207-1213 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.823 1207-1213 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.851 16791-16797 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.851 1529-1534 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.883 1529-1534 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.883 1498-1504 /?I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.927 1498-1504 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.931 1051-1057 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.939 1051-1057 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.955 637-643 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.979 637-643 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:02.979 830-837 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:02.999 830-837 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.023 17033-17033 /? E/memtrack:無法加載memtrack模塊(沒有這樣的文件或目錄) 05-16 10:55:03.023 17033-17033 /? E/android.os.Debug:未能加載memtrack模塊:-2 05-16 10:55:03.139 17033-17033 /? D/AndroidRuntime:調用主條目com.android.commands.pm.Pm 05-16 10:55:03.187 17033-17033 /? D/AndroidRuntime:關閉VM 05-16 10:55:03.191 17033-17040 /? D/jdwp:得到了喚醒信號,從中選出 05-16 10:55:03.195 17033-17040 /? D/dalvikvm:調試器已分離;對象註冊表有1個條目 05-16 10:55:03.223 1282-1288 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.239 1282-1288 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.247 772-778 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.283 1480-1486 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.283 772-778 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.323 1512-1516 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.335 1480-1486 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.343 1546-1550 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.359 1512-1516 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.387 818-824 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.395 1546-1550 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.431 788-794 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.431 818-824 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.475 885-890 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.491 788-794 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.679 695-701 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.755 885-890 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.755 1207-1213 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.827 695-701 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.831 1529-1534 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.871 1207-1213 /? I/jdwp:忽略第二個調試器 - 接受和放棄 05-16 10:55:03.891 1498-1504 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.903 16791-16797 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.919 1051-1057 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.939 1529-1534 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:03.939 637-643 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:04.007 830-837 /? I/jdwp:忽略第二個調試器 - 接受和丟棄 05-16 10:55:04.007 1498-1504 /?I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:04.071 1051-1057 /? I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:04.087 637-643 /? I/jdwp:忽略第二個調試器 - 接受並丟棄 05-16 10:55:04.107 830-837 /? I/jdwp:忽略第二個調試器 - 接受和丟棄

+2

你可以在這裏發佈logcat錯誤嗎?只有通過查看代碼,我才能想到的是在表名和第一個'('在'CREATE TABLE'語句之間放置一個空格。「 –

+2

*每個問題*包含*」它顯示一個錯誤「*或類似的需要說錯誤是什麼 – Denny

+0

缺失空格,檢查連接的字符串 –

回答

0

只是猜測,因爲你還沒有發佈logcat,但我認爲你需要在表名和第一個開放括號之間有一個空格。因此,例如:

db.execSQL("CREATE TABLE "+ DataBase.Table_Subject + " (" + 
     DataBase.sub_col1 + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," + 
     DataBase.sub_col2 + " TEXT NOT NULL," + 
     DataBase.sub_col3 + " INTEGER)" 
    ); 

db.execSQL("CREATE TABLE " + DataBase.Table_Tasks + " (" + 
     DataBase.Task_col1 + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," + 
     DataBase.Task_col2 + " TEXT," + 
     DataBase.Task_col3 + " INTEGER NOT NULL," + 
     DataBase.Task_col4 + " INTEGER," + 
     DataBase.Task_col5 + " INTEGER)" 
    ); 

db.execSQL("CREATE TABLE " + DataBase.Table_Class + " (" + 
     DataBase.class_Col1 + " INTEGER PRIMARY KEY AUTOINCREMENT," + 
     DataBase.class_col2 + " TEXT," + 
     DataBase.class_Col3 + " INTEGER," + 
     DataBase.class_Col4 + " TEXT," + 
     DataBase.class_Col5 + " TEXT," + 
     DataBase.class_Col6 + " TEXT," + 
     DataBase.class_Col7 + " TEXT," + 
     DataBase.class_Col8 + " TEXT)" 
    ); 

編輯:還指出,你不能始終如一的字段名後加空格了。請將您的CREATE TABLE陳述中的全部轉儲到logcat,並嘗試整齊編寫上述語句,以便更容易地找出串聯錯誤。

+0

我編輯了我的代碼,但它仍然不工作k –

+0

它不起作用的方式?你可以包括logcat,以及我在上面發佈的建議嗎? (即找到包含'Caused By'的行) –

+0

同樣對於'class_Col4' - 擺脫''Minutes'末尾的空格' –

0
db.execSQL("CREATE TABLE "+ DataBase.Table_Subject + " ("+DataBase.sub_col1 +" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " 
     + DataBase.sub_col2 + " TEXT NOT NULL, " + 
      DataBase.sub_col3 + " INTEGER);"); 


    db.execSQL("CREATE TABLE "+ DataBase.Table_Tasks + " ("+DataBase.Task_col1 + " INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " + 
     DataBase.Task_col2 + " TEXT, " + 
     DataBase.Task_col3 + " INTEGER NOT NULL, " + 
     DataBase.Task_col4 + " INTEGER, " + 
     DataBase.Task_col5 + " INTEGER);"); 

db.execSQL("CREATE TABLE " + DataBase.Table_Class + " ("+DataBase.class_Col1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     DataBase.class_col2 + " TEXT, " + 
     DataBase.class_Col3 + " INTEGER, " + 
     DataBase.class_Col4 + " TEXT, " + 
     DataBase.Class_Col5 + " TEXT, "+ 
     DataBase.class_Col6 + " TEXT, " + 
     DataBase.class_Col7 + " TEXT, " + 
     DataBase.class_Col8 + " TEXT);"); 

希望這項工作。 不;在SQL語句的末尾,在列名和數據類型之前也沒有空格。

由於沒有logcat信息,如果oncreate()被調用,那麼這個代碼應該工作。如果這不起作用,請通過添加日誌讓我知道onCreate()是否被調用。