Je reçois cette erreur - 07-03 12:29:18.643: E/SQLiteLog(5181): (1) table accounts has no column named otherNotes
Ceci est mon code:
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "accountsManager";
private static final String TABLE_ACCOUNTS = "accounts";
private static final String KEY_ID = "id";
private static final String KEY_TITLE = "title";
private static final String KEY_USERID = "userId";
private static final String KEY_PASSWORD = "password";
private static final String KEY_LOGINURL = "loginUrl";
private static final String KEY_OTHERNOTES = "otherNotes";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
String CREATE_ACCOUNTS_TABLE = "CREATE TABLE " + TABLE_ACCOUNTS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_TITLE + " TEXT,"
+ KEY_USERID + " TEXT," + KEY_PASSWORD + " TEXT," + KEY_LOGINURL + " TEXT,"
+ KEY_OTHERNOTES + " TEXT" + ");";
db.execSQL(CREATE_ACCOUNTS_TABLE);
}
public void addAccount(AccountDetails account) {
SQLiteDatabase db = this.getWritableDatabase();
System.out.println("Hello!");
ContentValues values = new ContentValues();
values.put(KEY_TITLE, account.getTitle()); // Account Title
values.put(KEY_USERID, account.getUserId()); // account userid
values.put(KEY_PASSWORD, account.getPassword()); // account password
values.put(KEY_LOGINURL, account.getLoginUrl()); // account loginurl
values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
Log.v("title", KEY_TITLE);
// Inserting Row
db.insert(TABLE_ACCOUNTS, null, values);
db.close(); // Closing database connection
}
Aussi, quand je supprime la déclaration suivante:
values.put(KEY_OTHERNOTES, account.getOtherNotes()); // account othernotes
Ensuite, je rencontre le même problème avec le mot de passe ... etc. .
S'il vous plaît aider!
Il semble que vous ayez ajouté des colonnes plus tard dans la base de données. Je suis d'accord avec Ken Wolf et vous devriez envisager de désinstaller et de réinstaller votre application. Une meilleure approche consiste à supprimer et à recréer toutes les tables dans la méthode onUpdate
et à augmenter la version de la base de données chaque fois que vous modifiez le schéma.
Eh bien, si vous avez des doutes sur la syntaxe de création d'une table, cela peut arriver Lorsque vous ajoutez une nouvelle colonne à votre même table, pour cela ...
1) Désactivez votre appareil et relancez-le.
OU
2) Paramétrage -> application -> ClearData
OR
3) Modifiez DATABASE_NAME dans votre classe "DatabaseHandler" (J'ai rencontré le même problème. Mais j'ai provoqué en modifiant DATABASE_NAME.)
OR
4) Modifiez DATABASE_VERSION dans votre classe "DatabaseHandler" (Si vous avez ajouté une nouvelle colonne, celle-ci sera mise à niveau automatiquement)
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
Comme Benil le dit dans un commentaire ci-dessus , modifiez le numéro de version de la base de données et exécutez le code à nouveau.
Le code SQL a l'air bien .. Je pense que vous avez oublié d'appeler open()
sur votre objet de base de données que vous avez créé.
ajoutez ces méthodes à votre classe SQL:
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDatabase;
public DataBaseMain open() throws SQLException{
// Open the database to make her writeable, must be called before writing
// to database
ourHelper = new DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
return this;
}
public void close(){
// Closing the database for writing, avoids error.
ourHelper.close();
}
Et utilisez quand vous voulez appeler votre DB.
Essayez "Effacer les données" de votre application à partir des paramètres. Pour moi, ce problème se posait car j’étais en train de stocker des données sur une carte SD et, plus tard, j’ai ajouté des colonnes. Donc, si vous enregistrez sur une carte SD, supprimez les données précédentes.
J'ai rencontré le même problème en mettant à jour ma table de base de données dans SQLite avec de nouvelles colonnes au cours de la phase de test.
Outre les réponses déjà données ci-dessus, ce que j’ai trouvé très utile pour mettre à jour les bases de données SQLite (par exemple, après des modifications) est ABD Idea , un plugin AndroidStudio qui vous permet de:
Il est possible que vous fassiez une erreur dans la requête de création et que vous le corrigiez ensuite,
Ainsi, dans le système de fichiers, vous avez une base de données, mais cette base de données n'a probablement pas cette colonne.
Solution: Dans l'émulateur, recherchez un fichier de base de données: data/data/com.somecompany.yourapp/database/db, supprimez-le, puis réessayez.
Il est également possible d'ouvrir ce fichier dans un explorateur SQL et de vérifier si cette colonne existe.
Ici c'est votre requête..TRY ceci.
String CREATE_ACCOUNTS_TABLE = "CREATE TABLE "+TABLE_ACCOUNTS+"(KEY_ID INTEGER PRIMARY KEY,KEY_TITLE TEXT,KEY_USERID TEXT,KEY_PASSWORD TEXT,KEY_LOGINURL TEXT,KEY_OTHERNOTES TEXT);";
Vous pouvez simplement spécifier la version comme ceci:
private static final int VERSION = 4;
Si vos codes sont OK, essayez simplement de désinstaller l’application, puis relancez-la une fois. Cela a résolu mon problème. J'espère que ça a aidé
Pour ceux qui ont le même problème et dont la solution ci-dessus n'est pas résolue, cochez 2 choses:
Espace entre le nom de la colonne et le type de données comme
COLUMN_NUMBER+" TEXT PRIMARY KEY) not COLUMN_NUMBER+"TEXT PRIMARY KEY)
L’ordre des colonnes lors de la création de la table doit être identique à celui de la carte pour l’insertion de données, comme
ContentValues values = new ContentValues();
values.put(TEST_ID, testId);
values.put(CLASS_NAME, className);
values.put(SUBJECT, subject);
"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ TEST_ID + " INTEGER,"
+ CLASS_NAME + " TEXT,"
+ SUBJECT + " TEXT,"