机器人数据库不能找到列_id,即使它是KEY_ID = _id [英] ANDROID Database cannot find column _id even though it is KEY_ID=_id

查看:252
本文介绍了机器人数据库不能找到列_id,即使它是KEY_ID = _id的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的错误。


  

无法启动活动:没有这样的列:_id(code 1),而
  编译:SELECT _id,名字从接触WHERE _id


Imade肯定我的专栏拼写 _id 而不是 ID 我不明白为什么会这样。

 公共类数据库处理器扩展SQLiteOpenHelper {
//所有静态变量
私有静态最后弦乐TAG =MyActivity;
//数据库版本
私有静态最终诠释DATABASE_VERSION = 1;//数据库名称
私有静态最后弦乐DATABASE_NAME =contactsManager;//联系人表名
私有静态最后弦乐TABLE_CONTACTS =接触;//联系方式表列名
公共静态最后弦乐KEY_ID =_id;
公共静态最后弦乐KEY_NAME =名;
公共数据库处理器(上下文的背景下){
    超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}//创建表
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    字符串CREATE_CONTACTS_TABLE =CREATE TABLE+ TABLE_CONTACTS +(
            + KEY_ID +INTEGER PRIMARY KEY,+ KEY_NAME +TEXT);
    db.execSQL(CREATE_CONTACTS_TABLE);
}//数据库升级
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
    如果存在//删除旧的表
    db.execSQL(DROP TABLE IF EXISTS+ TABLE_CONTACTS);    //再次创建表
    的onCreate(DB);
}//添加新联系人
无效addAddress(字符串名称){
    SQLiteDatabase分贝= this.getWritableDatabase();    ContentValues​​值=新ContentValues​​();
    values​​.put(KEY_NAME,名); // 联系人姓名
    //插入行
    db.insert(TABLE_CONTACTS,空,价值);
    db.close(); //关闭数据库连接
}公共布尔deleteAllAddresses(){
    SQLiteDatabase分贝= this.getWritableDatabase();
    INT doneDelete = 0;
    doneDelete = db.delete(TABLE_CONTACTS,NULL,NULL);
    Log.w(TAG,Integer.toString(doneDelete));
    返回doneDelete> 0;}公共光标fetchAddressesbyName(字符串inputText的)抛出的SQLException {    SQLiteDatabase分贝= this.getWritableDatabase();
    Log.w(TAG,inputText的);
    光标mCursor = NULL;
    如果(inputText的== NULL || inputText.length()== 0){
        mCursor = db.query(TABLE_CONTACTS,新的String [] {KEY_ID,
                        KEY_NAME,},
                NULL,NULL,NULL,NULL,NULL);    }其他{
        mCursor = db.query(真,TABLE_CONTACTS,新的String [] {KEY_ID,
                        KEY_NAME,},
                KEY_NAME +LIKE'%+的inputText +%',空,
                NULL,NULL,NULL,NULL);
    }
    如果(mCursor!= NULL){
        mCursor.moveToFirst();
    }
    返回mCursor;}    公共光标fetchAllAddresses(){
    SQLiteDatabase分贝= this.getWritableDatabase();
    光标mCursor = db.query(TABLE_CONTACTS,新的String [] {KEY_ID,KEY_NAME,},KEY_ID,NULL,NULL,NULL,NULL);    如果(mCursor!= NULL){
        mCursor.moveToFirst();
    }
    返回mCursor;
}
}

下面是我的联系类。

 公共类联系{
//私有变量
INT ID;
字符串名称= NULL;//获取ID
公众诠释的getID(){
    返回ID;
}//设置ID
公共无效SETID(INT ID){
    this.id = ID;
}//获取名称
公共字符串的getName(){
    返回名称;
}//设置名称
公共无效setname可以(字符串名称){
    this.name =名称;
}
}


解决方案

尝试从1升级到Database_Version 2 ...我认为这将帮助你。

Here is my error.

Unable to start activity : no such column: _id (code 1): , while compiling: SELECT _id, name FROM contacts WHERE _id

Imade sure my column spelled _id instead of id I don't understand why this is happening.

public  class DatabaseHandler extends SQLiteOpenHelper {


// All Static variables
private static final String TAG = "MyActivity";
// Database Version
private static final int DATABASE_VERSION = 1;

// Database Name
private static final String DATABASE_NAME = "contactsManager";

// Contacts table name
private static final String TABLE_CONTACTS = "contacts";

// Contacts Table Columns names
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";


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

// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_CONTACTS_TABLE = " CREATE TABLE " + TABLE_CONTACTS + "("
            + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT)";
    db.execSQL(CREATE_CONTACTS_TABLE);
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

    // Create tables again
    onCreate(db);
}

// Adding new contact
void addAddress(String name) {
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    values.put(KEY_NAME, name); // Contact Name


    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    db.close(); // Closing database connection
}

public boolean deleteAllAddresses() {
    SQLiteDatabase db = this.getWritableDatabase();
    int doneDelete = 0;
    doneDelete = db.delete(TABLE_CONTACTS, null, null);
    Log.w(TAG, Integer.toString(doneDelete));
    return doneDelete > 0;

}

public Cursor fetchAddressesbyName(String inputText) throws SQLException {

    SQLiteDatabase db = this.getWritableDatabase();
    Log.w(TAG, inputText);
    Cursor mCursor = null;
    if (inputText == null || inputText.length() == 0) {
        mCursor = db.query(TABLE_CONTACTS, new String[]{KEY_ID,
                        KEY_NAME,},
                null, null, null, null, null);

    } else {
        mCursor = db.query(true, TABLE_CONTACTS, new String[]{KEY_ID,
                        KEY_NAME,},
                KEY_NAME + " like '%" + inputText + "%'", null,
                null, null, null, null);
    }
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}

    public Cursor fetchAllAddresses() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor mCursor = db.query(TABLE_CONTACTS, new String[]{ KEY_ID, KEY_NAME,},KEY_ID , null,null,null, null);

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
}

Here is my contact class.

public class Contact {
//private variables
int id;
String name=null;

// getting ID
public int getID(){
    return id;
}

// setting id
public void setID(int id){
    this.id = id;
}

// getting name
public String getName(){
    return name;
}

// setting name
public void setName(String name){
    this.name = name;
}


}

解决方案

Try to upgrade Database_Version from 1 to 2... I think that will help you.

这篇关于机器人数据库不能找到列_id,即使它是KEY_ID = _id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆