Android的 - SQLite的 - 语法错误(code 1),在编译:CREATE TABLE [英] Android - SQLite - syntax error (code 1): , while compiling: CREATE TABLE

查看:543
本文介绍了Android的 - SQLite的 - 语法错误(code 1),在编译:CREATE TABLE的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过增加新的项目到数据库中,我得到这个错误:

近):语法错误(code 1),在编译:CREATE TABLE活动(Name文本,艺术文本,标记文字primarymonat TEXT primaryjahr TEXT主)

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

 公共类数据库扩展SQLiteOpenHelper {//所有静态变量
//数据库版本
私有静态最终诠释DATABASE_VERSION = 1;//数据库名称
私有静态最后弦乐DATABASE_NAME =eventsManager;//联系人表名
私有静态最后弦乐TABLE_EVENTS =事件;//联系方式表列名
私有静态最后弦乐KEY_NAME =名;
私有静态最后弦乐KEY_ART =艺术;
私有静态最后弦乐KEY_TAG =标签;
私有静态最后弦乐KEY_MONAT =monat;
私有静态最后弦乐KEY_JAHR =雅尔;公共数据库(上下文的背景下){
    超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}//创建表
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    字符串CREATE_CONTACTS_TABLE =CREATE TABLE+ TABLE_EVENTS +(
            + KEY_NAME +TEXT+ KEY_ART +TEXT
            + KEY_TAG +TEXT主+ KEY_MONAT +TEXT主+ KEY_JAHR +TEXT主+);
    db.execSQL(CREATE_CONTACTS_TABLE);
}//数据库升级
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    如果存在//删除旧的表
    db.execSQL(DROP TABLE IF EXISTS+ TABLE_EVENTS);    //再次创建表
    的onCreate(DB);
}/ **
 *所有CRUD(创建,读取,更新,删除)操作
 * ///添加新联系人
无效的addContact(活动触点){
    SQLiteDatabase分贝= this.getWritableDatabase();    ContentValues​​值=新ContentValues​​();
    values​​.put(KEY_NAME,contact.getName()); //事件名称
    values​​.put(KEY_ART,contact.getArt());
    values​​.put(KEY_TAG,contact.getTag());
    values​​.put(KEY_MONAT,contact.getMonat());
    values​​.put(KEY_JAHR,contact.getJahr());    //插入行
    db.insert(TABLE_EVENTS,空,价值);
    db.close(); //关闭数据库连接
}}

logcat的:

  20 10-24:11:38.360 2107年至2107年/ com.example.michael ... D / AndroidRuntime:关闭VM
10-24 20:11:38.360 2107至07年/ com.example.michael ... W / dalvikvm:主题ID = 1:螺纹未捕获的异常退出(组= 0x40ca3930)
10-24 20:11:38.370 2107至07年/ com.example.michael ... E / AndroidRuntime:致命异常:主要
    了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.michael ... / com.example.michael ... e.FullscreenActivity}:android.database.sqlite.SQLiteException:临近):语法错误( code 1),在编译:CREATE TABLE活动(Name文本,艺术文本,标记文字primarymonat TEXT primaryjahr TEXT主)
            在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.invokeNative(本机方法)
            在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:引起近):语法错误(code 1),在编译:CREATE TABLE活动(Name文本,艺术文本,标记文字primarymonat TEXT primaryjahr TEXT主)
            在android.database.sqlite.SQLiteConnection.native prepareStatement(本机方法)
            在android.database.sqlite.SQLiteConnection.acquire preparedStatement(SQLiteConnection.java:882)
            在android.database.sqlite.SQLiteConnection。prepare(SQLiteConnection.java:493)
            在android.database.sqlite.SQLiteSession。prepare(SQLiteSession.java:588)
            在android.database.sqlite.SQLiteProgram<&初始化GT;(SQLiteProgram.java:58)
            在android.database.sqlite.SQLiteStatement<&初始化GT;(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.invokeNative(本机方法)
在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(本机方法)


解决方案

按我的知识 - 。一个表只能有一个主键。你想创建一个复合主键?

下面给出的code被用来创建一个组合键

 字符串CREATE_CONTACTS_TABLE =CREATE TABLE+ TABLE_EVENTS +(
+ KEY_NAME +TEXT+ KEY_ART +TEXT
+ KEY_TAG +TEXT+ KEY_MONAT +TEXT+ KEY_JAHR +TEXT+
主键(+ KEY_TAG +,+ KEY_MONAT +,+ KEY_JAHR +));

或者您可以设置任意两个 KEY_TAG,KEY_MONAT,KEY_JAHR 唯一NOT NULL 剩下的一个为 PRIMARY KEY 即可。之间的差异唯一 PRIMARY KEY 唯一可以为空和主键不能为空。并表可以有任何numberof列唯一约束butcan只有一个主键...

By adding new items to the database I get this error:

near ")": syntax error (code 1): , while compiling: CREATE TABLE Events(name TEXT,art TEXT,tag TEXT primarymonat TEXT primaryjahr TEXT primary)

What did I do wrong? Can't find the mistake..

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
} }

Logcat:

    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)

解决方案

as per my knowledg., a table can have only one primary key. are you trying to create a composite primary key?

the below given code is used to create a composite 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 +"))";

or you can set any two of KEY_TAG,KEY_MONAT,KEY_JAHR as UNIQUE NOT NULL and remaining one as PRIMARY KEY. The difference between UNIQUE and PRIMARY KEY is that UNIQUE can be null and PRIMARY KEY cannot be null. and a table can have any numberof column with unique constraint butcan have only one primary key...

这篇关于Android的 - SQLite的 - 语法错误(code 1),在编译:CREATE TABLE的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆