我正在开发一个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:忽略第二个调试器 - 接受和删除
答案 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()调用。