I have had similar problem because I was not adding the _id column to the projection argument, so adding _id to the projections argument of the query was the solution. (commented by @nobugs)
package com.example.showview;
import org.w3c.dom.UserDataHandler;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.CancellationSignal;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@SuppressLint("NewApi")
public class DBoperation
{
private Context context;
private final String TableName = "sffddsdofdssdfsd";
public final String UserName = "UserName";
public final String UserAddress = "UserAddress";
private SQLiteDatabase sqLiteDatabase;
public DBoperation(Context context)
{
this.context = context;
}
//建立打开数据库
public void openOrCreatDatabase()
{
sqLiteDatabase = context.openOrCreateDatabase(TableName, context.MODE_PRIVATE, null);
sqLiteDatabase.execSQL("create TABLE " + TableName + " ( _id INTEGER PRIMARY KEY AUTOINCREMENT,"+UserName+" VARCHAR(50) NOT NULL, " + UserAddress + " VARCHAR(50) NOT NULL )");
}
//插入用户数据
public void insert(User user )
{
if(sqLiteDatabase != null)
{
ContentValues values = new ContentValues();
values.put(UserName, user.UserName);
values.put(UserAddress, user.UserAddress);
sqLiteDatabase.insert(TableName, "", values);
}
else {
System.out.print("error");
}
}
//查讯全部信息
public Cursor selectALL()
{
if(sqLiteDatabase != null)
return sqLiteDatabase.query(false, TableName, new String []{"_id",UserName,UserAddress}, null, null, null, null, null, null, null);
else
{
return null;
}
}
//根据条件查询用户
public Cursor selectUser(String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit, CancellationSignal cancellationSignal)
{
if(sqLiteDatabase != null)
return sqLiteDatabase.query(true, TableName, new String []{UserName,UserAddress}, selection, selectionArgs, groupBy, having, orderBy, limit, cancellationSignal);
return null;
}
//关闭数据库
public void closeDatabase()
{
sqLiteDatabase.close();
}
}
只展示数据库部分的代码
//查讯全部信息
public Cursor selectALL()
{
if(sqLiteDatabase != null)
return sqLiteDatabase.query(false, TableName, new String []{"_id",UserName,UserAddress}, null, null, null, null, null, null, null);
else
{
return null;
}
}
就是这一小段代码纠结了我2个多小时,一直报java.lang.IllegalArgumentException: column 'id' does not exist
在网上了很长时间终于在一个国外的网站上找到了解释
|
|
7
|
I have had similar problem because I was not adding the _id column to the projection argument, so adding _id to the projections argument of the query was the solution. (commented by @nobugs) |