I get an sqlite error code 1 whenever I try inputting data into my database (in android studio)

Viewed 27

I have created a database helper class, and when I run the code I keep getting the following error message: "android.database.sqlite.SQLiteException: table words_info has no column named back_word (code 1 SQLITE_ERROR[1]): , while compiling: INSERT INTO words_info(front_word,back_word) VALUES (?,?)." I tried changing the version of the database but that didn't work either... at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)

package com.example.language;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class HelperDB extends SQLiteOpenHelper {
    static final int DATABASE_VERSION = 1;
    public static final String DB_NAME = "words.db";
    public static final String TABLE_NAME = "words_info";
    public static final String FRONT_WORD = "front_word";
    public static final String BACK_WORD = "back_word";




    public HelperDB(Context context) {
        super(context, DB_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        String st = "CREATE TABLE " + TABLE_NAME + " ( " + FRONT_WORD + " TEXT , " + BACK_WORD + "TEXT ) "; //CREATE TABLE words_info (front_word TEXT, back_word TEXT)
        db.execSQL(st);
    }

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

        // Create tables again
        onCreate(db);
    }

    public void addWord(Card c){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues cv = new ContentValues();

        cv.put(FRONT_WORD, c.getFront_word());
        cv.put(BACK_WORD, c.getBack__word());

        db.insert(TABLE_NAME, null, cv);
        db.close();
    }

    public List<Card> getWords(){
        List<Card> returnList = new ArrayList<>();

        String queryString = "SELECT * FROM " + TABLE_NAME;

        SQLiteDatabase db = getReadableDatabase();

        Cursor cursor = db.rawQuery(queryString, null);

        if(cursor.moveToFirst()){
            //loop through the cursor (result set) and create new card object. put them into the return list
            do{
                String front_word = cursor.getString(0);
                String back_word = cursor.getString(1);

                Card card = new Card(front_word, back_word);
                returnList.add(card);

            }while(cursor.moveToNext());
        }
        else{

        }
        cursor.close();
        return returnList;
    }

    public void deleteOne(Card c){
        SQLiteDatabase db = getWritableDatabase();
        String queryString = "DELETE FROM " + TABLE_NAME + " WHERE " + FRONT_WORD + " = " + c.getFront_word();

        Cursor cursor = db.rawQuery(queryString, null);

    }


} 
2022-05-01 16:15:56.733 2853-2853/com.example.language E/SQLiteLog: (1) table words_info has no column named back_word in "INSERT INTO words_info(front_word,back_word) VALUES (?,?)"
2022-05-01 16:15:56.737 2853-2853/com.example.language E/SQLiteDatabase: Error inserting front_word=hello back_word=hello
    android.database.sqlite.SQLiteException: table words_info has no column named back_word (code 1 SQLITE_ERROR[1]): , while compiling: INSERT INTO words_info(front_word,back_word) VALUES (?,?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1463)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:901)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:62)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:2217)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:2088)
        at com.example.language.HelperDB.addWord(HelperDB.java:51)
        at com.example.language.MainActivity$1.onClick(MainActivity.java:50)
        at android.view.View.performClick(View.java:8160)
        at android.widget.TextView.performClick(TextView.java:16222)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
        at android.view.View.performClickInternal(View.java:8137)
        at android.view.View.access$3700(View.java:888)
        at android.view.View$PerformClick.run(View.java:30236)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:246)
        at android.app.ActivityThread.main(ActivityThread.java:8595)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
1 Answers

I think you should add a space in front of the second "TEXT"

so your code to create table will look like this:

String st = "CREATE TABLE " + TABLE_NAME + " ( " + FRONT_WORD + " TEXT , " + BACK_WORD + " TEXT ) ";
Related