android java.lang.IllegalArgumentException: column 'id' does not exist 错误

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

在网上了很长时间终于在一个国外的网站上找到了解释



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)

就是说在返回的cursor里的字符串数组里面一定要加上他的id

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值