Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLite异常列不存在_Java_Android_Database_Sqlite - Fatal编程技术网

Java SQLite异常列不存在

Java SQLite异常列不存在,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在尝试编写一个简单的应用程序,用SQLite计算我按下按钮的次数。将只有一个包含两列的表。我实现了SQLiteOpenHelper,如下所示: import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class SqliteHelperInstance extends SQLit

我正在尝试编写一个简单的应用程序,用SQLite计算我按下按钮的次数。将只有一个包含两列的表。我实现了SQLiteOpenHelper,如下所示:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class SqliteHelperInstance extends SQLiteOpenHelper {

public static final String DATABASE_NAME = "app_stats";
public static final String TABLE_NAME = "day_stats";
public static final String COLUMN_DATE = "date";
public static final String COLUMN_CIGCOUNT = "cigcount";
public static final int DATABASE_VERSION = 1;

private static final String CREATE_DB = "create table " + TABLE_NAME + " ( " +  COLUMN_DATE + " text "
+ COLUMN_CIGCOUNT + " integer );";

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

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

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
    db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
    onCreate(db);
}
}

所以我有一个有两列的表,第一列是“date”,第二列是计数器。 现在,我使用我的数据库管理器类创建了一个插入到表中的方法

public class DbManager {

private SqliteHelperInstance sqlHelper;
private SQLiteDatabase database;
    public DbManager(Context context){
    sqlHelper = new SqliteHelperInstance(context);
}
    public void open() throws SQLException{
    database = sqlHelper.getWritableDatabase();
}
    public void addEntry(String dateEntry){
            DbEntry newEntry = new DbEntry();
            newEntry.setDate(dateEntry);
            newEntry.setCounter(0);
    values.put(SqliteHelperInstance.COLUMN_DATE, dateEntry);
    values.put(SqliteHelperInstance.COLUMN_CIGCOUNT, newEntry.getCigNum());
    database.insert(SqliteHelperInstance.TABLE_NAME, null, values);
    }
}
但当我运行应用程序时,它会给我一个错误,即“cigcount”列不存在。以下是catlog消息:

05-08 16:23:15.830: E/SQLiteLog(1076): (1) table day_stats has no column named cigcount
05-08 16:23:15.850: E/SQLiteDatabase(1076): Error inserting cigcount=0 date=2014-05-08
05-08 16:23:15.850: E/SQLiteDatabase(1076): android.database.sqlite.SQLiteException: table day_stats has no column named cigcount (code 1): , while compiling: INSERT INTO day_stats(cigcount,date) VALUES (?,?)

有人能帮我解决这个问题吗?

您的列规格之间缺少一个逗号

private static final String CREATE_DB = "create table " + TABLE_NAME + " ( " +  COLUMN_DATE + " text "
+ COLUMN_CIGCOUNT + " integer );";
应该是

private static final String CREATE_DB = "create table " + TABLE_NAME + " ( " +  COLUMN_DATE + " text, "
+ COLUMN_CIGCOUNT + " integer );";

修复后,卸载应用程序,以便删除旧的数据库文件。(您的
onUpgrade()
中也有语法错误,仅增加版本无法更新架构。)

列规范之间缺少逗号

private static final String CREATE_DB = "create table " + TABLE_NAME + " ( " +  COLUMN_DATE + " text "
+ COLUMN_CIGCOUNT + " integer );";
应该是

private static final String CREATE_DB = "create table " + TABLE_NAME + " ( " +  COLUMN_DATE + " text, "
+ COLUMN_CIGCOUNT + " integer );";

修复后,卸载应用程序,以便删除旧的数据库文件。(您的
onUpgrade()
中也有语法错误,仅增加版本无法更新架构。)

尽管您的错误是正确的,但这并不能解决问题!我还是会犯同样的错误!我正在用我的手机测试它,所以我猜每次我吃午饭时它都会重新安装应用程序,对吗?不,不,带有错误模式的旧数据库文件不会被替换,只会被代码替换。好的,很高兴知道!所以我必须先卸载这个应用程序。谢谢,虽然你的错误是对的,但这并没有解决问题!我还是会犯同样的错误!我正在用我的手机测试它,所以我猜每次我吃午饭时它都会重新安装应用程序,对吗?不,不,带有错误模式的旧数据库文件不会被替换,只会被代码替换。好的,很高兴知道!所以我必须先卸载这个应用程序。谢谢,成功了