Android SQLite无法找到存在的列

时间:2015-10-28 06:37:50

标签: android android-sqlite sqliteopenhelper

我正在创建一个表并在本地数据库android中使用insert或replace sql,但它给了我错误

*

  

表employeeTable没有名为activationCode(code 1)的列:,编译时:insert或replace into   EmployeeTable中(activationCode,用户名,用户类型,lastSeen)VALUES   (' 6131313313',' testingcheck',' Employer' Tue Oct 27 10:04:36   GMT + 05:30 2015');

*

我的创建表格代码:

sql = "CREATE TABLE " + EMPLOYEE_TABLE + "(" + COMMON_ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + ACTIVATION_CODE_COLUMN + "TEXT ," + USER_NAME_COLUMN + "TEXT ," + USER_TYPE_COLUMN + "TEXT,"+LAST_SEE_COLUMN + "Text);";

    db.execSQL(sql);

}

我的插入或替换代码:

public void insertEmployeeDetails(String activationCode1 , String userName , String userType , String lastSeen) {
    String sql1 = "insert or replace into " + EMPLOYEE_TABLE + "(" + ACTIVATION_CODE_COLUMN + " , " + USER_NAME_COLUMN + " , " +
USER_TYPE_COLUMN +" , "+  LAST_SEE_COLUMN + ")" + "VALUES ('" +activationCode1 +"' , '" + userName + "' , '" + userType + "' , '"+ lastSeen + "');";

    getWritableDatabase().execSQL(sql1);
}

和回调代码:

myDbHelper.insertEmployeeDetails(employerConstants.activationCode,employerConstants.userName,
                employerConstants.userType , employerConstants.lastSeenon);

列激活码存在但无法找出导致问题的原因?

5 个答案:

答案 0 :(得分:3)

使用以下代码插入数据。

dataBase = getWritableDatabase();
cValues = new ContentValues();
cValues.put(ACTIVATION_CODE_COLUMN, activationCode1);
cValues.put(USER_NAME_COLUMN, userName);
cValues.put(USER_TYPE_COLUMN, userType);
cValues.put( LAST_SEE_COLUMN, lastSeen);
dataBase.insert(EMPLOYEE_TABLE, null, cValues);
dataBase.close();

您的创建查询也包含错误

sql = "CREATE TABLE " + EMPLOYEE_TABLE + "(" + COMMON_ID_COLUMN + "  INTEGER PRIMARY KEY AUTOINCREMENT, "
        + ACTIVATION_CODE_COLUMN + " TEXT, " + USER_NAME_COLUMN + " TEXT , " + USER_TYPE_COLUMN + " TEXT, "+LAST_SEE_COLUMN + " Text);";

复制上面的查询并替换您的查询 随意发表评论

答案 1 :(得分:3)

我认为问题出在你的创建查询中。试试这个用于创建表的SQL查询

sql = "CREATE TABLE " + EMPLOYEE_TABLE + " (" 
        + COMMON_ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + ACTIVATION_CODE_COLUMN + " TEXT, " 
        + USER_NAME_COLUMN + " TEXT, " 
        + USER_TYPE_COLUMN + " TEXT, "
        + LAST_SEE_COLUMN + " TEXT);";

然后卸载并安装应用程序..它应该可以工作。

答案 2 :(得分:0)

不要将字符串sql查询用于那些他们非常容易犯错误的操作。请改用PreparedStatement。

下面: http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html

答案 3 :(得分:0)

确保查询中还有适当的空格,您可以从模拟器中获取整个数据并检查出错了,我遇到了同样的问题然后我搜索了并且能够从我的模拟器中导出数据库之后由于查询中的间距,我开始知道我的字段名称不正确,我正在使用genymotion。如果需要,我可以粘贴从模拟器导出数据的过程。

答案 4 :(得分:-1)

使你的sqliteHelperClass扩展SQLiteOpenHelper。

例如

public SqliteHelper extends SQLiteOpenHelper {
    public static final int VERSION = 1;
    public static final String NAME = "your db name";

    public SqliteHelper(Context context) {
        super(context, NAME, null, VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // your db creates here
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // your db upgrade here
        // ex) drop & create
    }

}

有了这个助手类, 如果您需要数据库升级,只需更改Version值+ 1

我希望这对你有所帮助。