如何解决Android Sqlite中没有这样的表错误

时间:2014-10-10 13:07:03

标签: android sqlite

我曾尝试将数据添加到以下帮助程序类中,但我收到了“没有这样的表”错误。

如果我们使用普通的SQL查询,它就会开始工作。但是这种类型的查询不起作用。如何编写这些类型的查询,请解释一下这种语法!

static class EmpHelper extends SQLiteOpenHelper{
        private static final String DATABASE_NAME = "empdatabase";
        private static final String TABLE_NAME = "emptable";
        private static final int DATABASE_VERSION = 2;
        private static final String UID = "_id";
        private static final String NAME = "Name";
        private static final String PASSWORD = "Password";

        private static final String CREATE_TABLE = "CREATE TABLE" + TABLE_NAME
                + "("+UID+ " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME
                + " VARCHAR(255)," + PASSWORD + "VARCHAR2(255)"+")";

        private static final String DROP_TABLE = "DROP TABLE IF EXISTS"
                + TABLE_NAME;
        private Context context;


        public EmpHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.context = context;
            Message.message(context, "constructor called");
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub

            try {
                db.execSQL(CREATE_TABLE);

            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                }
        }

2 个答案:

答案 0 :(得分:2)

你应该改变这个

 + " VARCHAR(255)," + PASSWORD + "VARCHAR2(255)"+")"; 

 + " VARCHAR(255)," + PASSWORD + " VARCHAR2(255)"+")"; //add space after VARCHAR2(255)

更改此设置后,您必须卸载您的应用并再次安装新的apk内置

答案 1 :(得分:1)

您的CREATE TABLE SQL存在多个语法问题,您可以在onCreate()中捕获异常。因此,SQLiteOpenHelper认为即使没有执行SQL,数据库创建也是成功的。

修复:

  • "TABLE"TABLE_NAME之间添加空格。
  • PASSWORD"VARCHAR"之间添加空格。
  • 删除catch。需要向调用者抛出异常。
  • 卸载您的应用,以便删除旧的空数据库并再次运行onCreate()

(就此而言,DROP_TABLE中也有空格。