sqlite的光标列返回错误的值 [英] sqlite cursor returning wrong value for a column
问题描述
为什么我从数据库中获取空
从列网址
?
我在源码这样添加数据
无效addObjects(对象对象){
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues值=新ContentValues();
values.put(OBJECT_ID,10); //对象名称
values.put(OBJECT_NAME,H); //对象名称
values.put(OBJECT_URLhttp://api.androidhive.info/images/sample.jpg); // URL对象
values.put(OBJECT_TYPE,图像); //接触式
的System.out.println(值);
//插入行
db.insert(TABLE_OBJECTS,空,价值观);
db.close(); //闭幕数据库连接
}
日志值 www.i我/的System.out的结果是:TYPE =图片名称= H ID = 10 URL = HTTP://api.androidhive.info/images/sample.jpg
然而,当我得到的所有结果我的url = NULL
公开名单<对象> getAllObjects(){
名单<对象> Objectslist =新的ArrayList<对象>();
//选择所有查询
字符串selectQuery =SELECT * FROM+ TABLE_OBJECTS;
SQLiteDatabase DB = this.getWritableDatabase();
光标光标= db.rawQuery(selectQuery,NULL);
//遍历所有行和添加到列表
如果(cursor.moveToFirst()){
做 {
对象对象=新的对象();
Log.d(OBJECT_URL,OBJECT_URL);
object.setId(cursor.getInt(cursor.getColumnIndex(OBJECT_ID)));
object.setName(cursor.getString(cursor.getColumnIndex(对象)));
object.setUrl(cursor.getString(cursor.getColumnIndex(OBJECT_URL)));
//添加联系人列出
Objectslist.add(对象);
}而(cursor.moveToNext());
}
这是主要的活动我得到的sqlite的结果
名单,其中,对象和GT;对象= db.getAllObjects();
Log.d(他,TTTTTT);
的System.out.println(对象);
DBadapter适配器=新DBadapter(getApplicationContext(),R.layout.grid_item_layout,对象);
这是系统outprint的结果
[对象{n = 10,名称=HTTP://api.androidhive.info/images/sample.jpg,URL ='空',类型='空' ,类='空'},{对象ID = 10,名称=HTTP://api.androidhive.info/images/sample.jpg,URL ='空',类型='空',类别='空}
这是完整的源码级
公共类数据库处理器扩展SQLiteOpenHelper {
//所有静态变量
//数据库版本
私有静态最终诠释DATABASE_VERSION = 1;
//联系方式表名
私有静态最后弦乐TABLE_OBJECTS =物;
私有静态最后弦乐OBJECT_ID =ID;
私有静态最后弦乐OBJECT_NAME =NAME;
私有静态最后弦乐OBJECT_TYPE =类型;
私有静态最后弦乐OBJECT_URL =URL;
私有静态最后弦乐OBJECT_CATEGORY =类别;
私有静态最后弦乐OBJECT_DATE_ADDED =DATE_ADDED;
私有静态最后弦乐OBJECT_USERS_ID =USERS_ID;
私有静态最后弦乐OBJECT_HIDE_YN =HIDE_YN;
公共数据库处理器(上下文的背景下){
超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
}
//创建表
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
db.execSQL(DROP TABLE IF EXISTS+ TABLE_OBJECTS);
字符串CREATE_OBJECTS_TABLE =CREATE TABLE+ TABLE_OBJECTS +(
+ OBJECT_ID +INTEGER PRIMARY KEY AUTOINCREMENT,
+ OBJECT_NAME +VARCHAR(100)NULL,
+ OBJECT_TYPE +VARCHAR(10)NULL,
+ OBJECT_URL +VARCHAR(1000)NULL,
+ OBJECT_CATEGORY +VARCHAR(50)NULL,
+ OBJECT_DATE_ADDED +DATETIME NULL,
+ OBJECT_USERS_ID +NUMERIC(10)NULL,
+ OBJECT_HIDE_YN +VARCHAR(1)NULL);
db.execSQL(CREATE_OBJECTS_TABLE);
}
//升级数据库
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
如果存在//删除旧的表
db.execSQL(DROP TABLE IF EXISTS+ TABLE_OBJECTS);
//再次创建表
的onCreate(DB);
}
/ **
*所有CRUD(创建,读取,更新,删除)操作
* /
//添加新联系人
无效addObjects(对象对象){
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues值=新ContentValues();
values.put(OBJECT_ID,10); //对象名称
values.put(OBJECT_NAME,H); //对象名称
values.put(OBJECT_URLhttp://api.androidhive.info/images/sample.jpg); // URL对象
values.put(OBJECT_TYPE,图像); //接触式
的System.out.println(值);
//插入行
长ID = db.insert(TABLE_OBJECTS,空,价值观);
的System.out.println(ID:+ ID);
db.insert(TABLE_OBJECTS,空,价值观);
db.close(); //闭幕数据库连接
}
//对象对象=新的对象(字符串);
//获取单触点
对象的getURL(字符串名称){
SQLiteDatabase DB = this.getReadableDatabase();
光标光标= db.query(TABLE_OBJECTS,新的String [] {OBJECT_URL,
OBJECT_NAME,OBJECT_CATEGORY,OBJECT_TYPE},OBJECT_NAME +=?,
新的String [] {将String.valueOf(名称)},NULL,NULL,NULL,NULL);
如果(光标!= NULL)
cursor.moveToFirst();
对象对象=新的对象(cursor.getString(0),cursor.getString(1)
cursor.getString(2),cursor.getString(3));
返回对象;
}
//获取所有联系人
公开名单<对象> getAllObjects(){
名单<对象> Objectslist =新的ArrayList<对象>();
//选择所有查询
字符串selectQuery =SELECT * FROM+ TABLE_OBJECTS;
SQLiteDatabase DB = this.getWritableDatabase();
光标光标= db.rawQuery(selectQuery,NULL);
//遍历所有行和添加到列表
如果(cursor.moveToFirst()){
做 {
对象对象=新的对象();
Log.d(OBJECT_URL,OBJECT_URL);
object.setId(cursor.getInt(cursor.getColumnIndex(OBJECT_ID)));
object.setName(cursor.getString(cursor.getColumnIndex(对象)));
object.setUrl(cursor.getString(cursor.getColumnIndex(OBJECT_URL)));
//添加联系人列出
Objectslist.add(对象);
}而(cursor.moveToNext());
}
//返回联系人列表
返回Objectslist;
}
//更新单触点
公众诠释updateContact(对象对象){
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues值=新ContentValues();
values.put(OBJECT_NAME,object.getName()); //对象名称
values.put(OBJECT_URL,object.getUrl()); // URL对象
values.put(OBJECT_TYPE,object.getType()); //接触式
values.put(OBJECT_CATEGORY,object.getCategory()); //联系范畴
//更新行
返回db.update(TABLE_OBJECTS,价值观,OBJECT_ID +=?,
新的String [] {将String.valueOf(object.getId())});
}
//删除单个联系人
公共无效deleteContact(对象对象){
SQLiteDatabase DB = this.getWritableDatabase();
db.delete(TABLE_OBJECTS,OBJECT_ID +=?,
新的String [] {将String.valueOf(objects.getId())});
db.close();
}
//获取联系人计数
公众诠释getObjectsCount(){
字符串countQuery =SELECT * FROM+ TABLE_OBJECTS;
SQLiteDatabase DB = this.getReadableDatabase();
光标光标= db.rawQuery(countQuery,NULL);
cursor.close();
//返回计数
返回cursor.getCount();
}
}
在你的对象的getURL(字符串名称)
的方法,改变
光标光标= db.query(TABLE_OBJECTS,新的String [] {OBJECT_URL,
OBJECT_NAME,OBJECT_CATEGORY,OBJECT_TYPE},OBJECT_NAME +=?,
新的String [] {将String.valueOf(名称)},NULL,NULL,NULL,NULL);
到
光标光标= db.query(TABLE_OBJECTS,新的String [] {OBJECT_ID,
OBJECT_NAME,OBJECT_URL,OBJECT_TYPE},OBJECT_NAME +=?,
新的String [] {将String.valueOf(名称)},NULL,NULL,NULL,NULL);
假设您的对象类的结构如下:
公共类对象{
私人字符串ID;
私人字符串名称;
私人字符串URL;
私人字符串类型;
//方法
}
在 TableColumn来
参数(新的String [] {OBJECT_ID,OBJECT_NAME,OBJECT_URL,OBJECT_TYPE}
),您传递到 db.query()
方法有尊重顺序相同的对象类(第 ID
,第二届名称
,第三网址
4 键入
)
why I am getting from the database null
from column url
?
I am adding data in sqlite like this
void addObjects(Objects object) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(OBJECT_ID,"10" ); // OBJECT Name
values.put(OBJECT_NAME, "H"); // OBJECT Name
values.put(OBJECT_URL, "http://api.androidhive.info/images/sample.jpg"); // OBJECT URL
values.put(OBJECT_TYPE, "image"); // Contact type
System.out.println(values);
// Inserting Row
db.insert(TABLE_OBJECTS, null, values);
db.close(); // Closing database connection
}
the result of log values www.i I/System.out﹕ TYPE=image NAME=H ID=10 URL=http://api.androidhive.info/images/sample.jpg
however when I get all the result I have url = null
public List<Objects> getAllObjects() {
List<Objects> Objectslist = new ArrayList<Objects>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_OBJECTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Objects object = new Objects();
Log.d("OBJECT_URL", OBJECT_URL);
object.setId(cursor.getInt(cursor.getColumnIndex(OBJECT_ID)));
object.setName(cursor.getString(cursor.getColumnIndex(OBJECT_NAME)));
object.setUrl(cursor.getString(cursor.getColumnIndex(OBJECT_URL)));
// Adding contact to list
Objectslist.add(object);
} while (cursor.moveToNext());
}
This is main activity I am getting the result of sqlite
List<Objects> Objects = db.getAllObjects();
Log.d("he","tttttt");
System.out.println(Objects);
DBadapter adapter = new DBadapter(getApplicationContext(), R.layout.grid_item_layout, Objects);
this is the result of system outprint
[Objects{id=10, name='http://api.androidhive.info/images/sample.jpg', url='null', type='null', category='null'}, Objects{id=10, name='http://api.androidhive.info/images/sample.jpg', url='null', type='null', category='null'}
this is full sqlite class
public class DatabaseHandler extends SQLiteOpenHelper {
// All Static variables
// Database Version
private static final int DATABASE_VERSION = 1;
// Contacts table name
private static final String TABLE_OBJECTS = "OBJECTS";
private static final String OBJECT_ID="ID";
private static final String OBJECT_NAME="NAME";
private static final String OBJECT_TYPE ="TYPE";
private static final String OBJECT_URL ="URL";
private static final String OBJECT_CATEGORY ="CATEGORY";
private static final String OBJECT_DATE_ADDED ="DATE_ADDED";
private static final String OBJECT_USERS_ID ="USERS_ID";
private static final String OBJECT_HIDE_YN ="HIDE_YN";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// Creating Tables
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("DROP TABLE IF EXISTS " + TABLE_OBJECTS);
String CREATE_OBJECTS_TABLE ="CREATE TABLE " +TABLE_OBJECTS+"("
+ OBJECT_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"
+ OBJECT_NAME +" VARCHAR(100) NULL,"
+ OBJECT_TYPE +" VARCHAR(10) NULL,"
+ OBJECT_URL +" VARCHAR(1000) NULL,"
+OBJECT_CATEGORY +" VARCHAR(50) NULL,"
+OBJECT_DATE_ADDED +" DATETIME NULL,"
+OBJECT_USERS_ID +" NUMERIC(10) NULL,"
+OBJECT_HIDE_YN +" VARCHAR(1) NULL) ";
db.execSQL(CREATE_OBJECTS_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_OBJECTS);
// Create tables again
onCreate(db);
}
/**
* All CRUD(Create, Read, Update, Delete) Operations
*/
// Adding new contact
void addObjects(Objects object) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(OBJECT_ID,"10" ); // OBJECT Name
values.put(OBJECT_NAME, "H"); // OBJECT Name
values.put(OBJECT_URL, "http://api.androidhive.info/images/sample.jpg"); // OBJECT URL
values.put(OBJECT_TYPE, "image"); // Contact type
System.out.println(values);
// Inserting Row
long id = db.insert(TABLE_OBJECTS, null, values);
System.out.println( "id:"+id);
db.insert(TABLE_OBJECTS, null, values);
db.close(); // Closing database connection
}
// Objects object=new Objects(String );
// Getting single contact
Objects geturl(String name) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_OBJECTS, new String[] {OBJECT_URL,
OBJECT_NAME , OBJECT_CATEGORY, OBJECT_TYPE }, OBJECT_NAME + "=?",
new String[] { String.valueOf(name) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Objects object = new Objects(cursor.getString(0),cursor.getString(1),
cursor.getString(2),cursor.getString(3));
return object;
}
// Getting All Contacts
public List<Objects> getAllObjects() {
List<Objects> Objectslist = new ArrayList<Objects>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_OBJECTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Objects object = new Objects();
Log.d("OBJECT_URL", OBJECT_URL);
object.setId(cursor.getInt(cursor.getColumnIndex(OBJECT_ID)));
object.setName(cursor.getString(cursor.getColumnIndex(OBJECT_NAME)));
object.setUrl(cursor.getString(cursor.getColumnIndex(OBJECT_URL)));
// Adding contact to list
Objectslist.add(object);
} while (cursor.moveToNext());
}
// return contact list
return Objectslist;
}
// Updating single contact
public int updateContact(Objects object) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(OBJECT_NAME, object.getName()); // OBJECT Name
values.put(OBJECT_URL, object.getUrl()); // OBJECT URL
values.put(OBJECT_TYPE, object.getType()); // Contact type
values.put(OBJECT_CATEGORY, object.getCategory()); // Contact category
// updating row
return db.update(TABLE_OBJECTS, values, OBJECT_ID + " = ?",
new String[] { String.valueOf(object.getId()) });
}
// Deleting single contact
public void deleteContact(Objects objects) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_OBJECTS, OBJECT_ID + " = ?",
new String[] { String.valueOf(objects.getId()) });
db.close();
}
// Getting contacts Count
public int getObjectsCount() {
String countQuery = "SELECT * FROM " + TABLE_OBJECTS;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
// return count
return cursor.getCount();
}
}
In your Objects geturl(String name)
method , change
Cursor cursor = db.query(TABLE_OBJECTS, new String[] {OBJECT_URL,
OBJECT_NAME , OBJECT_CATEGORY, OBJECT_TYPE }, OBJECT_NAME + "=?",
new String[] { String.valueOf(name) }, null, null, null, null);
to
Cursor cursor = db.query(TABLE_OBJECTS, new String[] {OBJECT_ID,
OBJECT_NAME , OBJECT_URL, OBJECT_TYPE }, OBJECT_NAME + "=?",
new String[] { String.valueOf(name) }, null, null, null, null);
Supposing that your Objects class has the following structure:
public class Objects {
private String id;
private String name;
private String url;
private String type;
// methods
}
the tableColumns
argument (new String[] {OBJECT_ID,OBJECT_NAME , OBJECT_URL, OBJECT_TYPE }
) that you pass to the db.query()
method has to respect the same order as in your Objects class (first the id
, 2nd name
, 3rd url
, 4th type
)
这篇关于sqlite的光标列返回错误的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!