user3535757
user3535757

Reputation: 59

SQLite (1) no such table

When I run my android app I keep getting the error (1) no such table userTable, as far as I am aware I am creating the table in

TABLE_CREATE = "create table userTable("    
                + USER + " text not null, "  + PWD + " text not null, );";

I have two other databases in this project and the are working fine, any help is welcome.

package com.weightpro.db;

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

public class usrPwdDB {

public static final String USER = "userName";
public static final String PWD = "password";
public static final String TABLE_NAME = "userTable";
public static final String DATA_BASE_NAME = "userdatabase";
public static final String KEY_ROWID = "_id";
public static final int DB_VERSION = 2;
private static final String TABLE_CREATE = "create table userTable("    
            + USER + " text not null, "  + PWD + " text not null, );"; 

DBHelper WDBHelper;
Context mContext;
SQLiteDatabase db;

public usrPwdDB(Context mContext) {
    this.mContext = mContext;
    WDBHelper = new DBHelper(mContext);

}

 private static class DBHelper extends SQLiteOpenHelper
 {

    public DBHelper(Context context) {
        super(context,DATA_BASE_NAME, null, DB_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        try{
        db.execSQL(TABLE_CREATE);
        }

        catch(SQLException e)
        {
            e.printStackTrace();
        }
    } 

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS userTable");
        onCreate(db);
    }


 }
public usrPwdDB open()
{
    db = WDBHelper.getWritableDatabase();
    return this;

}

public void close(){
    WDBHelper.close();
}

public long insertInfo(String userName, String password){
    ContentValues content = new ContentValues();
    content.put(USER, userName);
    content.put(PWD, password);
    return db.insertOrThrow(TABLE_NAME, null, content);
}

public boolean getUserNameAndPassword(String userName, String Password) throws SQLException {

            Cursor mCursor =
            db.query(true, TABLE_NAME, new String[] {USER,
                    PWD},USER+"='"+userName+"' AND password='"+Password+"'", null,
                    null, null, null, null);

    if (mCursor.getCount() > 0)
    {
        return true;
    }
    return false;}

public Cursor returnData(){
    return db.query(TABLE_NAME, new String[] {USER, PWD},null,null,null,null,null);
}
}

Upvotes: 1

Views: 779

Answers (3)

Fahad
Fahad

Reputation: 193

private static final String TABLE_CREATE = "create table userTable("    
        + USER + " text not null, "  + PWD + " text not null,);" ;

remove "," after "text not null" and also remove ";"(semicolon) in the string, that is not needed i think,

then clear data or uninstall application then execute again

even though the creation of table failed i think next time onCreate() in SQLiteOpenHelper only executes once, so you will need to clear data of application

if you are using separate class for separate table and using same DB name, then all the tables in the first using class will be ok, and others will not be created since for a single database onCreate() function works only one, even if there is separate classes each with onCreate(),

onCreate() function creates a file in DB location of android file system when first called onCreate(), if the onCreate called again it check for the existence of DBNAME file in DB location and avoid creating if its exit, I think this is logic behind it...

so keep one onCreate() function for a single DB file and create all tables in that function

Upvotes: 0

Lucifer
Lucifer

Reputation: 29632

remove the last comma , from the create table syntax,

private static final String TABLE_CREATE = 
    "create table userTable("    
    + USER + " text not null, "  
    + PWD + " text not null, );";    // remove this comma after not null

The correct syntax should be

private static final String TABLE_CREATE = 
    "create table userTable("    
    + USER + " text not null, "  
    + PWD + " text not null );";    

Upvotes: 4

M D
M D

Reputation: 47807

You go wrong over here

 + USER + " text not null, "  + PWD + " text not null, );"; //remove , from last text not null

correct SQL command with below

private static final String TABLE_CREATE = "create table userTable("    
        + USER + " text not null, "  + PWD + " text not null);" ;

Upvotes: 2

Related Questions