Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-SQLite-syntax错误(代码1):,编译时:CREATE TABLE_Android_Sqlite - Fatal编程技术网

Android-SQLite-syntax错误(代码1):,编译时:CREATE TABLE

Android-SQLite-syntax错误(代码1):,编译时:CREATE TABLE,android,sqlite,Android,Sqlite,通过向数据库添加新项,我得到以下错误: near“)”:语法错误(代码1):,编译时:创建表事件(名称文本、艺术文本、标记文本primarymonat文本primaryjahr文本primary) 我做错了什么?找不到错误 public class database extends SQLiteOpenHelper { // All Static variables // Database Version private static final int DATABASE_VERSION =

通过向数据库添加新项,我得到以下错误:

near“)”:语法错误(代码1):,编译时:创建表事件(名称文本、艺术文本、标记文本primarymonat文本primaryjahr文本primary)

我做错了什么?找不到错误

public class database extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "eventsManager";

// Contacts table name
private static final String TABLE_EVENTS = "Events";

// Contacts Table Columns names
private static final String KEY_NAME = "name";
private static final String KEY_ART = "art";
private static final String KEY_TAG = "tag";
private static final String KEY_MONAT = "monat";
private static final String KEY_JAHR = "jahr";

public database(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
            + KEY_NAME + " TEXT," + KEY_ART + " TEXT,"
            + KEY_TAG + " TEXT primary" + KEY_MONAT + " TEXT primary" + KEY_JAHR + " TEXT primary"+ ")";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_EVENTS);

    // Create tables again
    onCreate(db);
}

/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new contact
void addContact(events contact) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Event Name
    values.put(KEY_ART, contact.getArt());
    values.put(KEY_TAG, contact.getTag());
    values.put(KEY_MONAT, contact.getMonat());
    values.put(KEY_JAHR, contact.getJahr());

    // Inserting Row
    db.insert(TABLE_EVENTS, null, values);
    db.close(); // Closing database connection
} }
日志:

    10-24 20:11:38.360    2107-2107/com.example.michael... D/AndroidRuntime﹕ Shutting down VM
10-24 20:11:38.360    2107-2107/com.example.michael... W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40ca3930)
10-24 20:11:38.370    2107-2107/com.example.michael... E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.michael.../com.example.michael...e.FullscreenActivity}: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Events(name TEXT,art TEXT,tag TEXT primarymonat TEXT primaryjahr TEXT primary)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: CREATE TABLE Events(name TEXT,art TEXT,tag TEXT primarymonat TEXT primaryjahr TEXT primary)
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
            at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
            at com.example.michael....database.onCreate(database.java:42)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
            at com.example.michael....database.addContact(database.java:61)
            at com.example.michael....FullscreenActivity.onCreate(FullscreenActivity.java:149)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
10-2420:11:38.360 2107-2107/com.example.michael。。。D/AndroidRuntime﹕ 关闭虚拟机
10-24 20:11:38.360 2107-2107/com.example.michael。。。W/dalvikvm﹕ threadid=1:线程以未捕获异常退出(组=0x40ca3930)
10-2420:11:38.3702107-2107/com.example.michael。。。E/AndroidRuntime﹕ 致命异常:主
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.michael…/com.example.michael…e.FullscreenActivity}:android.database.sqlite.SQLiteException:near”)”:语法错误(代码1):,编译时:创建表事件(名称文本、艺术文本、标记文本primarymonat文本primaryjahr文本primary)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
在android.app.ActivityThread.access$600(ActivityThread.java:141)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5041)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
在dalvik.system.NativeStart.main(本机方法)
由以下原因引起:android.database.sqlite.SQLiteException:near“)”:编译时语法错误(代码1)::创建表事件(名称文本、艺术文本、标记文本primarymonat文本primaryjahr文本primary)
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
在com.example.michael…database.onCreate(database.java:42)
位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
在com.example.michael…database.addContact(database.java:61)
在com.example.michael.FullscreenActivity.onCreate(FullscreenActivity.java:149)上
位于android.app.Activity.performCreate(Activity.java:5104)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
在android.app.ActivityThread.access$600(ActivityThread.java:141)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:137)
位于android.app.ActivityThread.main(ActivityThread.java:5041)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
在dalvik.system.NativeStart.main(本机方法)

将sql查询更改为此,您遗漏了一些逗号和空格:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
        + KEY_NAME + " TEXT," + KEY_ART + " TEXT,"
        + KEY_TAG + " TEXT primary, " + KEY_MONAT + " TEXT primary, " + KEY_JAHR + " TEXT primary"+ ")";
实际查询应如下所示:

CREATE TABLE Events(name TEXT, art TEXT, tag TEXT primary, monat TEXT primary, jahr TEXT primary)

将sql查询更改为此,您遗漏了一些逗号和空格:

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
        + KEY_NAME + " TEXT," + KEY_ART + " TEXT,"
        + KEY_TAG + " TEXT primary, " + KEY_MONAT + " TEXT primary, " + KEY_JAHR + " TEXT primary"+ ")";
实际查询应如下所示:

CREATE TABLE Events(name TEXT, art TEXT, tag TEXT primary, monat TEXT primary, jahr TEXT primary)

据我所知,一个表只能有一个主键。您正在尝试创建复合主键吗

下面给出的代码用于创建复合键

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
+ KEY_NAME + " TEXT," + KEY_ART + " TEXT,"
+ KEY_TAG + " TEXT  ," + KEY_MONAT + " TEXT ," + KEY_JAHR + " TEXT ,"+
"PRIMARY KEY("+KEY_TAG+","+KEY_MONAT+","+KEY_JAHR +"))";

或者您可以将键标签、键MONAT、键JAHR中的任意两个设置为唯一非空,其余一个设置为主键UNIQUEPRIMARY KEY之间的区别在于UNIQUE可以为null,PRIMARY KEY不能为null。而且一个表可以有任意数量的列,具有UNIQUE约束,但只能有一个PRIMARY KEY…

据我所知,一个表只能有一个PRIMARY KEY。您正在尝试创建复合主键吗

下面给出的代码用于创建复合键

String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_EVENTS + "("
+ KEY_NAME + " TEXT," + KEY_ART + " TEXT,"
+ KEY_TAG + " TEXT  ," + KEY_MONAT + " TEXT ," + KEY_JAHR + " TEXT ,"+
"PRIMARY KEY("+KEY_TAG+","+KEY_MONAT+","+KEY_JAHR +"))";

或者您可以将键标签、键MONAT、键JAHR中的任意两个设置为唯一非空,其余一个设置为主键UNIQUEPRIMARY KEY之间的区别在于UNIQUE可以为null,PRIMARY KEY不能为null。而且一个表可以有任意数量的列,具有UNIQUE约束,但只能有一个PRIMARY KEY…

据我所知,如果您想创建唯一索引,你必须在一个单独的地方做