簡體   English   中英

sqlite游標返回錯誤的列值

[英]sqlite cursor returning wrong value for a column

為什么我從數據庫獲取的列url null

我正在像這樣在sqlite中添加數據

  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
    }

日志值的結果www.i I/System.out﹕ TYPE=image NAME=H ID=10 URL=http://api.androidhive.info/images/sample.jpg

但是,當我得到所有結果時,我有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());
    }

這是我得到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);

這是系統外包的結果

[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'}

這是全班級

     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();
    }

}

在您的Objects geturl(String name)方法中,更改

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);

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);

假設您的Objects類具有以下結構:

public class Objects {
    private String id;
    private String name;
    private String url;
    private String type;

    // methods
}

傳遞給db.query()方法的tableColumns參數( new String[] {OBJECT_ID,OBJECT_NAME , OBJECT_URL, OBJECT_TYPE } )必須遵循與Objects類相同的順序(首先是id ,2nd name ,3rd url ,第4 type

注意表定義中的數據類型,因為SQLite不支持MySql數據類型。 您的varchar字段按類型相似性應該是正確的,但是text是存儲字符串的正確方法,而不是varcharstring

您還定義了datetime ,這不是一個好主意。 請改用textinteger (帶有時間戳)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM