Kotlin中SQLite字符串字段查询显示0的问题解决
Kotlin SQLite字符串字段查询显示0的解决方法
在Kotlin中使用SQLite创建数据表,试图存储字符串类型数据,但查询时字符串字段始终显示0。尝试过将字段类型设为VARCHAR、NVARCHAR、TEXT,结果没有变化。
原代码
try{ val veritabani=this.openOrCreateDatabase("Urunler", Context.MODE_PRIVATE,null) veritabani.execSQL("CREATE TABLE IF NOT EXISTS urunler (id INTEGER PRIMARY KEY, isim TEXT , fiyat INT) ") veritabani.execSQL( "INSERT INTO urunler (isim, fiyat ) VALUES ('asda',100)") val cursor =veritabani.rawQuery("SELECT * FROM urunler " ,null) val idColumnIndex=cursor.getColumnIndex("id") val isimColumnIndex=cursor.getColumnIndex("isim") val fiyatColumnIndex=cursor.getColumnIndex("fiyat") System.out.println("deneme11") while(cursor.moveToNext()){ System.out.println("ID :${cursor.getInt(idColumnIndex)}") System.out.println("isim :${cursor.getInt(isimColumnIndex)}") System.out.println("fiyat :${cursor.getInt(fiyatColumnIndex)}") } } catch (e:Exception){ System.out.println("error"+ e.message); }
输出结果
I/System.out: ID :1 I/System.out: isim :0 I/System.out: fiyat :100
问题原因
查询字符串字段时方法调用错误:对字符串类型的isim字段使用了cursor.getInt()方法,该方法会尝试将字段值转换为整数,转换失败时默认返回0。正确的做法是使用cursor.getString()来获取字符串类型的数据。
修正后的代码
try{ val veritabani=this.openOrCreateDatabase("Urunler", Context.MODE_PRIVATE,null) veritabani.execSQL("CREATE TABLE IF NOT EXISTS urunler (id INTEGER PRIMARY KEY, isim TEXT , fiyat INT) ") veritabani.execSQL( "INSERT INTO urunler (isim, fiyat ) VALUES ('asda',100)") val cursor =veritabani.rawQuery("SELECT * FROM urunler " ,null) val idColumnIndex=cursor.getColumnIndex("id") val isimColumnIndex=cursor.getColumnIndex("isim") val fiyatColumnIndex=cursor.getColumnIndex("fiyat") System.out.println("deneme11") while(cursor.moveToNext()){ System.out.println("ID :${cursor.getInt(idColumnIndex)}") // 使用getString获取字符串类型字段 System.out.println("isim :${cursor.getString(isimColumnIndex)}") System.out.println("fiyat :${cursor.getInt(fiyatColumnIndex)}") } } catch (e:Exception){ System.out.println("error"+ e.message); }
内容的提问来源于stack exchange,提问作者Arafin
相关产品推荐
相关产品推荐

