• sqlite 错误


    一、遇见错误IllegalArgumentException: column '_id' does not exist

    解决:建的表中必须以'_id'为主键,且利用Cursor查询中必须要查询这个值

            1)创建数据表时插入一个名为_id的列,类型为自增量,因为在使用Cursor相关的Adapter时需要用到这个列

            2)如果实在不需要这个列的话,可以把数据表中某一列使用AS映射为 _id,再进行操作

    二、把数据库的部分列的内容显示到ListView    

    if(mCur!=null&&row>=0){
                ListAdapter adp = new SimpleCursorAdapter(this, 
                                 //定义List中每一行的显示模块,表示每一行包含两个数据项
                                  android.R.layout.simple_expandable_list_item_2, 
                                  mCur, 
                                  //将数据库的NAME与AGE两列拿出来显示
                                  new String[] {mDb.NAME,mDb.AGE}, 
                                  new int[] {android.R.id.text1,android.R.id.text2});
                mList.setAdapter(adp);
            }

    现在,我很无聊的想把每一个item的两个数据项中的name项取出来

    mList.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {//注意:此处的parent是整个ListView,而view才是我们点击的那一个item
                   // mList.getItemAtPosition(position);
                   //这里之所以要用ViewGroup是因为需要用到getChildA方法,但是这个方法普通view是没有的,
    ViewGroup viewg
    = (ViewGroup) view; TextView v = (TextView)viewg.getChildAt(0); String name = (String)v.getText(); //用String转换,因为v.getText()取出的是charsequence } });

    三、当想删除name = fenghao 的记录时报错

          根据_id删除记录时,db.delete(TABLE_NAME, KEY_ID+"="+rowid, null);正确。

          我想到是否能以此种方式删除“name = 冯浩”的记录。于是照写为db.delete(TABLE_NAME, NAME+"="+name, null);报错。

          错误:android.database.sqlite.SQLiteException: no such column: 冯浩: DELETE FROM T1 WHERE name=冯浩

          报的错误很清楚的说了没有名为冯浩的这一列,我的确没有名为冯浩的这一列,但是我这么写的目的是为了删除名为name的这一列中为冯浩的记录,但是为什么它会认为是要删除名为冯浩的这一列了?

    为什么删除_id的时候就是对的了?值得思考,难道因为KEY_ID是主键吗?

          解决:改为db.delete(TABLE_NAME, "name =?", new String[]{name});

    四、报错android.database.sqlite.SQLiteException: near ...

          错误提示为语法错误,百度后发现SQLite中text的比较不能用“=”,而需要用诸如Like/In /Between等关键字

          改为String DELETE_RECORD = "DELETE FROM " + TABLE_NAME + " WHERE name Like '冯浩'";

          即Like后面的字符串需要用单引号括起来。

    五、取出数据库中的一列数据

        cur.getString(cur.getColumnIndex(columnName));

  • 相关阅读:
    iOS设备后台播放音乐方法
    iOS 编译64位FFMPEG
    os8 location authorization 错误.
    IOS 使用新浪微博SDK
    IOS 解析歌词lrc
    IOS 通过button获取cell
    IOS 解析XML文档
    OC .(点)与->(箭头)用法区别
    黑苹果安装合集
    Hello,World
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2719074.html
Copyright © 2020-2023  润新知