2

Can someone please tell what wrong with that code can't solve it.

it's keep tell me that table has no column. Thanks

public class DatabaseHandlerTest extends SQLiteOpenHelper {

// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "MessagesManager";

// messages table name
private static final String TABLE_MESSAGE = "message";


// messages Table Columns names
private static final String KEY_ID = "id";
private static final String KEY_USER_NAME = "user_name";
private static final String KEY_USER_MESSAGE = "user_messgae";


public DatabaseHandlerTest(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {

    String CREATE_MESSAGE_TABLE =
            "CREATE TABLE "
                    + TABLE_MESSAGE + "("
                    + KEY_ID + " INTEGER PRIMARY KEY,"
                    + KEY_USER_NAME + " TEXT,"
                    + KEY_USER_MESSAGE + " TEXT" + ")";
  /* String CREATE_CONTACTS_TABLE =
            "CREATE TABLE "
                     + TABLE_CONTACTS + "("
                     + KEY_ID + " INTEGER PRIMARY KEY,"
                     + KEY_NAME + " TEXT,"
                     + KEY_PH_NO + " TEXT" + ")";*/
    db.execSQL(CREATE_MESSAGE_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_MESSAGE);

    // Create tables again
    onCreate(db);
}

/**
 * All CRUD(Create, Read, Update, Delete) Operations
 */

// Adding new message
void addMessage(ChatMessage msg) {
    SQLiteDatabase db = this.getWritableDatabase();


    ContentValues values = new ContentValues();

    values.put(KEY_USER_NAME, msg.getmUsername());
    values.put(KEY_USER_MESSAGE, msg.getmUserMessge());

    // Inserting Row
    db.insert(TABLE_MESSAGE, null, values);
    db.close(); // Closing database connection
}

// Getting single message
public ChatMessage getMessage(String id) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_MESSAGE, new String[]{
                    KEY_ID,
                    KEY_USER_NAME,
                    KEY_USER_MESSAGE}, KEY_ID + "=?",
            new String[]{id}, null, null, null, null);
    if (cursor != null)
        cursor.moveToFirst();

    ChatMessage msg = new ChatMessage();
    msg.setmId(Integer.parseInt(cursor.getString(0)));
    msg.setmUsername(cursor.getString(6));
    msg.setmUserMessge(cursor.getString(7));

    // return message
    return msg;
}

// Getting All messages
public List<ChatMessage> getAllMessages() {
    List<ChatMessage> messageList = new ArrayList<>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_MESSAGE;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            ChatMessage msg = new ChatMessage();

            msg.setmId(Integer.parseInt(cursor.getString(0)));
            msg.setmUsername(cursor.getString(1));
            msg.setmUserMessge(cursor.getString(2));
            // Adding message to list
            messageList.add(msg);
        } while (cursor.moveToNext());
    }


    // return message list
    return messageList;
}

// Updating single message
public int updateMessage(ChatMessage msg) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put(KEY_USER_NAME, msg.getmUsername());
    values.put(KEY_USER_MESSAGE, msg.getmUserMessge());

    // updating row
    return db.update(TABLE_MESSAGE, values, KEY_ID + " = ?",
            new String[]{String.valueOf(msg.getmId())});
}

// Deleting single message
public void deleteMessage(ChatMessage msg) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_MESSAGE, KEY_ID + " = ?",
            new String[]{String.valueOf(msg.getmId())});
    db.close();
}


// Getting messages Count
public int getMessageCount() {
    String countQuery = "SELECT  * FROM " + TABLE_MESSAGE;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();

    // return count
    return cursor.getCount();
}

}

02-04 23:17:26.830 14306-14306/com.android.myshull E/SQLiteLog: (1) table message has no column named user_name
02-04 23:17:26.830 14306-14306/com.android.myshull E/SQLiteDatabase: Error inserting user_name=Test user_messgae=TEST
                                                                         android.database.sqlite.SQLiteException: table message has no column named user_name (code 1): , while compiling: INSERT INTO message(user_name,user_messgae) VALUES (?,?)
                                                                             at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                             at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                                             at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                                             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.insertWithOnConflict(SQLiteDatabase.java:1469)
                                                                             at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
                                                                             at com.tal.android.myshull.DatabaseHandlerTest.addMessage(DatabaseHandlerTest.java:83)
                                                                             at com.tal.android.myshull.TestDataBaseFragment$1.onClick(TestDataBaseFragment.java:53)
                                                                             at android.view.View.performClick(View.java:5198)
                                                                             at android.view.View$PerformClick.run(View.java:21147)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:148)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Raghunandan
  • 132,755
  • 26
  • 225
  • 256
user3341575
  • 65
  • 3
  • 8
  • 3
    Look like you have updated your database create table query, Either set `DATABASE_VERSION = 2;` or `clear application data` and try again. – Dhaval Patel Feb 05 '16 at 04:36

2 Answers2

1

well checked the code and it does creates the table in the database,

private static final String KEY_ID = "id";
private static final String KEY_USER_NAME = "user_name";
private static final String KEY_USER_MESSAGE = "user_messages";

String CREATE_MESSAGE_TABLE =
        "CREATE TABLE "
                + " message " + "( "
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_USER_NAME + " TEXT, "
                + KEY_USER_MESSAGE + " TEXT" + ")";

you might want to uninstall the application to clear the database and reinstall it,

Pankaj Nimgade
  • 4,529
  • 3
  • 20
  • 30
0

I think @Pankaj Nimgade is right, Whenever you change sqlite structure you will have to clear your app data. Because If table with same name exists sqlite does not check for any changes in the table. It just assumes table has no changes.

Ragesh Ramesh
  • 3,470
  • 2
  • 14
  • 20