Android - SQLite - erreur de syntaxe (code 1): , lors de la compilation: CREATE TABLE
Par l'ajout de nouveaux éléments à la base de données, j'obtiens cette erreur:
près de ")": erreur de syntaxe (code 1): , lors de la compilation: CRÉER un TABLEAU des Événements(nom du TEXTE,de l'art, TEXTE,TEXTE de l'étiquette primarymonat TEXTE primaryjahr TEXTE principal)
Qu'ai-je fait de mal? Ne pouvez pas trouver l'erreur..
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)
- qu'est-ce que l'utilisation du mot "primaire" dans votre sql? je n'ai jamais rencontré avant!!
- vous avez manqué la virgule après "primarymonat TEXTE"
Vous devez vous connecter pour publier un commentaire.
selon mes connaissances., une table ne peut avoir qu'une seule clé primaire. êtes-vous essayer de créer une clé primaire composite?
le code donné ci-dessous est utilisé pour créer une clé composite
ou vous pouvez définir toutes les deux de KEY_TAG,KEY_MONAT,KEY_JAHR comme UNIQUE not NULL et reste l'un comme CLÉ PRIMAIRE. La différence entre UNIQUE et CLÉ PRIMAIRE est que UNIQUE peut être null et la CLÉ PRIMAIRE ne peut pas être null. et une table peut avoir n'importe quel nombre de la colonne avec l'unique contrainte butcan avoir une seule clé primaire...
Changer votre requête sql pour cela, vous avez raté quelques virgules et des espaces:
La requête réelle devrait être ceci:
À ma connaissance, si vous voulez créer un index unique, vous devez le faire dans une requête distincte, parce que vous ne pouvez avoir qu'une seule clé primaire. Il n'a pas à inclure votre clé primaire et il sera la cause de tout insérer être vérifiée pour ces combinaisons. Si un enregistrement existe, l'ancien sera supprimé et un nouveau sera inséré à sa place.