Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
android:java.lang.illegalargumentexception列“详细信息”不存在_Java_Android_Sqlite - Fatal编程技术网

android:java.lang.illegalargumentexception列“详细信息”不存在

android:java.lang.illegalargumentexception列“详细信息”不存在,java,android,sqlite,Java,Android,Sqlite,我看到很多关于_id的问题被提出,但我的问题是数据库创建查询中定义的其他列 public class DatabaseHelper extends SQLiteOpenHelper{ static final String dbName="Shadows"; static final String pages="pages"; static final String pages_id="_id"; static final String date="date";

我看到很多关于_id的问题被提出,但我的问题是数据库创建查询中定义的其他列

public class DatabaseHelper extends SQLiteOpenHelper{

    static final String dbName="Shadows";
    static final String pages="pages";
    static final String pages_id="_id";
    static final String date="date";
    static final String details="details";

    public DatabaseHelper(Context context) {
        super(context, dbName, null, 33);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE IF NOT EXISTS pages (_id INTEGER PRIMARY KEY AUTOINCREMENT, date TEXT, details TEXT);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+pages);
        onCreate(db);
    } 


    public Cursor getallPages(){
        SQLiteDatabase db=this.getReadableDatabase();
        Cursor c=db.rawQuery("SELECT * FROM PAGES", new String[] {});
        return c;
    }
}
现在,在调用这个getPages函数之后,使用了简单的游标适配器

String[] from = new String[]{
    DatabaseHelper.pages_id,
    DatabaseHelper.date,
    DatabaseHelper.details
};
int[] to = new int[]{R.id.id,R.id.name,R.id.mail};
SimpleCursorAdapter sca = new SimpleCursorAdapter(
    this,R.layout.gridview,c,from,to
);
它给出了一个错误列详细信息不存在。请提前感谢两件事

您应该在SQL构造函数中使用最终的静态字段详细信息,这样可以避免任何小的输入错误

db.execSQL("CREATE TABLE IF NOT EXISTS "+pages+" ("+pages_id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+date+" TEXT, "+details+" TEXT);");
从选择

 Cursor c=db.rawQuery("SELECT * FROM "+pages, new String[] {});
这是一个很好的实践,也意味着如果你决定改变一些东西,那么它就会自动得到处理

但最可能的原因是数据库和表已经存在,但格式不同-如果您最近更改了代码以添加或重命名“详细信息”列,则此代码不会删除并重新创建表

最简单的测试-只需从设备上清除此应用程序的数据,然后再次运行它-看起来您一直在增加数据库版本以执行相同的操作,所以您确定已执行此操作吗


除了一个有故障的现有数据库之外,这看起来应该可以正常工作。

使用“从页面中选择*”而不是“从getallPagesdelete数据库中的页面中选择*”,然后重新执行……。非常感谢!问题解决了。但你能告诉我到底是什么问题吗?取决于你是如何解决的,我怀疑尼廷可能是对的,你使用了“PAGES”和“PAGES”作为不同的表名,所以它找不到东西。也就是说,如果在引用表中的表/字段时引用静态字段,则永远不会遇到问题。而且,如果这个答案有助于接受,那将是一件好事。