在SQLite中创建表时出错

时间:2013-06-10 06:06:40

标签: android sqlite

我正在尝试使用SQLite在android中创建一个表但是发生了错误“没有这样的列”。我检查过一切都是正确的,请帮我解决这个问题。感谢

创建表格的代码是:

public static final String DATABASE_NAME="Employee.db";
public static final int DATABASE_VERSION=1;
public static final String TABLE_EMPLOYEE="Employee";
public static final String COLUMN_ID="Empid";
public static final String COLUMN_NAME="Empname";
public static final  String COLUMN_SALARY="Empsalary";
public static final String createReq="CREATE TABLE " + TABLE_EMPLOYEE + "("
        + COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_NAME + " TEXT,"
        + COLUMN_SALARY + " NUMERIC" + ")";

public dbhelper(Context context)
{   
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
      Log.e("dbhelper constructor: ", "dbhelper const called..");
}
@Override
public void onCreate(SQLiteDatabase db) 
{
     Log.e("onCreate method of dbhelper: ", "onCreate method of dbhelper method called..");
    db.execSQL(createReq);
}

当我在logcat中打印表的列名时,它会显示 col:Empid Col:EmpnameTEXTEmpsalaryNUMERIC

2 个答案:

答案 0 :(得分:0)

我想你错过了这里的空间:

尝试以下代码并告知我们:

public static final String createReq = "CREATE TABLE " + TABLE_EMPLOYEE + "("
        + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT NOT NULL, "
        + COLUMN_SALARY + " NUMERIC " + ")";

答案 1 :(得分:0)

修改

在说明每次创建onCreate(在这种情况下为SQLiteOpenHelper)时调用dbhelper方法时,我的原始答案是错误的。根据{{​​3}},只有在创建数据库时才会调用它(感谢@KumarBibek,引起我的注意)。这也意味着我的答案几乎没用,至少从报道的问题来看。我仍然选择让它保持活力,部分原因是对我匆忙的错误的可耻的提醒:-)而且因为它(据我所知)对未来的读者也有一些其他有用的附注。

<强> ORIGIN

无论您当前的问题如何,如果您尝试使用onCreate方法创建表格,我认为您也会遇到其他问题。除非您以某种方式删除您的表(在相应的onDestroy或其他内容中),否则您将尝试对每次CREATE TABLE...类为“已存在的表执行dbhelper查询由平台创建。您当前的问题实际上甚至可能是因为(由于所声明的错误消息,我发现它有点不太可能)。

onUpgrade中有onDowngradeSQLiteOpenHelper方法(我假设您正在扩展)onUpgrade方法更适合创建你的表,但是:你需要先删除它,或者只执行第一个版本的create语句(在newVersion方法参数上添加if-check)。或者你可以documentation,这样你的create语句看起来就像CREATE TABLE IF NOT EXISTS Employee...

如果你创建一个内存数据库,这不是问题(但是你的add a IF NOT EXISTS escape sequence,如“:Employee.db”)。但请注意,一旦释放内存数据库,您的所有数据都将被删除。

另一个提示:您实际上可以在在线SQL语法验证器中测试您的SQL语法(提供一个示例database file name would begin with a colon,确保在工具栏中选择正确的SQL引擎“SQLite”)。这些工具将验证您的 SQL语法。但是,他们无法验证逻辑的有效性(即因滥用Android生命周期而导致的错误)。

另一个侧面说明,类名应该是不成文的老式java标准,以大写字母开头。因此,您的dbhelper类(以及您的构造函数)应该实际读取Dbhelper或甚至更好DbHelper