无法创建android sqlite DB

时间:2017-05-16 14:53:10

标签: java android database sqlite

我正在开发一个android项目,而我正在尝试创建数据库,似乎我有错误,这是我的代码,假设创建一个包含多个表的数据库,但它不会创建任何表,请帮我找到错误:)

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中获得的
  

05-16 10:55:02.407 17033-17033 /? D / AndroidRuntime:>>>>>> AndroidRuntime   启动com.android.internal.os.RuntimeInit<<<<<<<   05-16 10: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:添加了共享lib libnativehelper.so 0x0   05-16 10:55:02.455 17033-17033 /? D / dalvikvm:在libnativehelper.so 0x0中找不到JNI_OnLoad,跳过init   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:注意:类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 个答案:

答案 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,并尝试按上述方式对语句进行整齐编码,以便更容易发现连接错误。

答案 1 :(得分: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()调用。