zoukankan      html  css  js  c++  java
  • 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));

  • 相关阅读:
    input输入框的各种样式
    Spring JdbcTemplate方法详解
    TF/IDF计算方法
    分布式日志收集系统--Chukwa
    分布式日志系统
    Iframe知识点
    拖拽事件
    面向对象知识点
    JS使用合并数组
    块元素block,内联元素inline; inline-block;
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/2719074.html
Copyright © 2011-2022 走看看