jejefull Posté(e) 6 mars 2012 Posté(e) 6 mars 2012 Bonjour, j'essai, depuis quelque jour, d'utiliser sqlite. je programme sur eclipse avec l emulateur. Voila , j' ai une erreur que je ne comprend pas: autoincrement is only allowed for Integer primary key Voici mon code: public class DatabaseHelper extends SQLiteOpenHelper { /** * Nom de la DB (nom du fichier SQLite). */ private static String DATABASE_NAME = "accesdbtests.db"; /** * Numéro de version de la DB. * Si ce numéro change, la fonction onUpgrade est exécutée * pour effacer le contenu de la DB et recréer la nouvelle * version . */ private static final int DATABASE_VERSION = 1; /** * Lien vers la session DB. */ private SQLiteDatabase db; /** * Nom de la table de la BD */ private static final String TABLE_PROGRAMMES = "Programmes"; /** * Script SQL de création de la table Programmes. */ private static final String COLONNE_ID = "id"; private static final int COLONNE_ID_ID = 0; private static final String COLONNE_EXO = "exercice"; private static final int COLONNE_EXO_ID = 1; private static final String COLONNE_DUREE = "duree"; private static final int COLONNE_DUREE_ID = 2; private static final String REQUETTE_CREATION_BD = "create table " + TABLE_PROGRAMMES + "(" + COLONNE_ID + "integer primary key autoincrement," + COLONNE_EXO + "text not null, " + COLONNE_DUREE + "text not null)"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); db = getWritableDatabase(); } /** * Exécuté si la DB n'existe pas. */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(REQUETTE_CREATION_BD); } /** * Exécuté chaque fois que le numéro de version de DB change. */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE " + TABLE_PROGRAMMES + ";"); onCreate(db); } /** * Insère un exercice dans la BDD */ public long insertExo(Effort effort) { ContentValues exoToInsert = new ContentValues(); exoToInsert.put(COLONNE_EXO, effort.getExercice()); exoToInsert.put(COLONNE_DUREE, effort.getDuree()); return db.insert(TABLE_PROGRAMMES, null, exoToInsert); } /** * Charge le contenu de la table Programmes * et retourne ce contenu sous la forme d'une liste de Exercice + Duree ; */ public ArrayList<String> getprogramme() { ArrayList<String> output = new ArrayList<String>(); String[] colonnesARecup = new String[] { COLONNE_EXO, COLONNE_DUREE }; Cursor cursorResults = db.query(TABLE_PROGRAMMES, colonnesARecup, null, null, null, "exercice asc, duree asc", null); if (null != cursorResults) { if (cursorResults.moveToFirst()) { do { String exerciceduree = cursorResults.getString(COLONNE_EXO_ID) + " " + cursorResults.getString(COLONNE_DUREE_ID); output.add(exerciceduree); } while (cursorResults.moveToNext()); } // end§if } return output; } } Un petit coup de main serai le bien venu, merci
Sylvain-a Posté(e) 7 mars 2012 Posté(e) 7 mars 2012 Bonjour, Renommes ta colonne id en _id comme imposé par android
jejefull Posté(e) 7 mars 2012 Auteur Posté(e) 7 mars 2012 Merci de ta reponse je vient donc de modifier cette ligne: private static final String COLONNE_ID = "_id"; Mais j'ai toujours les memes erreurs: 03-07 09:58:17.207: E/Database(202): Failure 1 (AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY) on 0x118980 when preparing 'create table Programmes(_idinteger primary key autoincrement,exercicetext not null, dureetext not null)'. 03-07 09:58:17.214: D/AndroidRuntime(202): Shutting down VM 03-07 09:58:17.214: W/dalvikvm(202): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 03-07 09:58:17.214: E/AndroidRuntime(202): Uncaught handler: thread main exiting due to uncaught exception 03-07 09:58:17.224: E/AndroidRuntime(202): android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY: create table Programmes(_idinteger primary key autoincrement,exercicetext not null, dureetext not null) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1610) 03-07 09:58:17.224: E/AndroidRuntime(202): at sdz.home_training.DatabaseHelper.onCreate(DatabaseHelper.java:68) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 03-07 09:58:17.224: E/AndroidRuntime(202): at sdz.home_training.DatabaseHelper.<init>(DatabaseHelper.java:59) 03-07 09:58:17.224: E/AndroidRuntime(202): at sdz.home_training.BtnCreerOnClick.onClick(BtnCreerOnClick.java:26) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.View.performClick(View.java:2364) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.View.onTouchEvent(View.java:4179) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.widget.TextView.onTouchEvent(TextView.java:6541) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.View.dispatchTouchEvent(View.java:3709) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 03-07 09:58:17.224: E/AndroidRuntime(202): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 03-07 09:58:17.224: E/AndroidRuntime(202): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 03-07 09:58:17.224: E/AndroidRuntime(202): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.os.Handler.dispatchMessage(Handler.java:99) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.os.Looper.loop(Looper.java:123) 03-07 09:58:17.224: E/AndroidRuntime(202): at android.app.ActivityThread.main(ActivityThread.java:4363) 03-07 09:58:17.224: E/AndroidRuntime(202): at java.lang.reflect.Method.invokeNative(Native Method) 03-07 09:58:17.224: E/AndroidRuntime(202): at java.lang.reflect.Method.invoke(Method.java:521) 03-07 09:58:17.224: E/AndroidRuntime(202): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 03-07 09:58:17.224: E/AndroidRuntime(202): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 03-07 09:58:17.224: E/AndroidRuntime(202): at dalvik.system.NativeStart.main(Native Method) 03-07 09:58:17.244: I/dalvikvm(202): threadid=7: reacting to signal 3 03-07 09:58:17.244: E/dalvikvm(202): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
arnouf Posté(e) 11 mars 2012 Posté(e) 11 mars 2012 Il manque juste un espace. L'erreur générée est la suivante create table Programmes(_idinteger primary key autoincrement,exercicetext not null, dureetext not null Ajoute un espace avant integer primary key "create table " + TABLE_PROGRAMMES + "(" + COLONNE_ID + " integer primary key autoincrement," + COLONNE_EXO
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.