SQL查询数据查询异常总结

   这里面会不断的更新我在原生SQL语句的时候发现的问题异常总结:


   (1)大小写问题:
     比如你的创建表的时候语句如下:
  

db.execSQL("create table if not exists Person(_id Integer PRIMARY KEY AUTOINCREMENT,NAME varchar(32),AGE varchar(32))");
你的插入语句如下:

public boolean insert(List<Person> persons) {
        boolean flag = true;
        ContentValues values = new ContentValues();
        for (Person person : persons) {
            values.clear();
            values.put("name", person.getName());
            values.put("age", person.getAge());
            long person1 = mDb.insert("Person", null, values);
            flag = person1 > 0;
        }
        return flag;
    }
查询语句如下:

 public List<Person> query() {
        List<Person> persons = new ArrayList<>();
        Cursor cursor = mDb.rawQuery("select * from Person", null);
        while (cursor.moveToNext()) {
            Person person = new Person();
            try {
                person.setName(cursor.getString(cursor.getColumnIndex("name")));
                person.setAge(cursor.getString(cursor.getColumnIndex("age")));
                persons.add(person);
            } catch (Exception e) {
                Log.i(TAG, e.toString());
            }
        }
        cursor.close();
        return persons;
    }
你会一直查询不到数据,我这里其实做了try catch ,如果不做try catch就会崩掉的,打印日志如下:

java.lang.IllegalStateException: get field slot from row 2 col -1 failed
肯定会十分的不解,在debug的时候发现走到了查询操作的person.setName哪里,里面的cursor.getColumnIndex返回的是-1,但是就TM想喷了,表里面明明有这个字段怎么返回的是-1,其实你再仔细看看就会发现表里面的“name”是大写的NAME,而你这里是小写的。你改成大写就会发现可以顺利执行了:

public List<Person> query() {
        List<Person> persons = new ArrayList<>();
        Cursor cursor = mDb.rawQuery("select * from Person", null);
        while (cursor.moveToNext()) {
            Person person = new Person();
            try {
                person.setName(cursor.getString(cursor.getColumnIndex("NAME")));
                person.setAge(cursor.getString(cursor.getColumnIndex("AGE")));
                persons.add(person);
            } catch (Exception e) {
                Log.i(TAG, e.toString());
            }
        }
        cursor.close();
        return persons;
    }
改成大写之后就能查询到数据了。所以注意大小写,在插入数据到表的时候是不区分大小写的,但是在查询的时候就会区分大小写了。是不是很骚气。


后面发现新的问题会再继续添加进来的。



猜你喜欢

转载自blog.csdn.net/qq_34723470/article/details/78411243