3

このタイプのSQLiteテーブルがあります

テーブル車両:

CATEGORY    COUNTRY   ID    NAME          EMAIL
A           GE         1    BMW           sample1@salple.it
A           GE         2    Lamborghini   sample2@salple.it
B           GE         3    BMW           sample3@salple.it

指定された名前または指定されたカテゴリを持つすべてのエントリを選択し、すべてのパラメーターをコンストラクターの各行に渡したい

Vehicle(String category, String country, int id, String name, String email)

いくつかのチュートリアルを使用して、このアダプターを実装しました。

public class TestAdapter  
{ 
    protected static final String TAG = "DataAdapter"; 

    private final Context mContext; 
    private SQLiteDatabase mDb; 
    private DataBaseHelper mDbHelper; 

    public TestAdapter(Context context)  
    { 
        this.mContext = context; 
        mDbHelper = new DataBaseHelper(mContext); 
    } 

    public TestAdapter createDatabase() throws SQLException  
    { 
        try  
        { 
            mDbHelper.createDataBase(); 
        }  
        catch (IOException mIOException)  
        { 
            Log.e(TAG, mIOException.toString() + "  UnableToCreateDatabase"); 
            throw new Error("UnableToCreateDatabase"); 
        } 
        return this; 
    } 

    public TestAdapter open() throws SQLException  
    { 
        try  
        { 
            mDbHelper.openDataBase(); 
            mDbHelper.close(); 
            mDb = mDbHelper.getReadableDatabase(); 
        }  
        catch (SQLException mSQLException)  
        { 
            Log.e(TAG, "open >>"+ mSQLException.toString()); 
            throw mSQLException; 
        } 
        return this; 
    } 

    public void close()  
    { 
        mDbHelper.close(); 
    } 



    public boolean SaveVehicles(String category , String country, String id, String name, String email) 
    {
        try
        {
            ContentValues cv = new ContentValues();
            cv.put("Category", category);
            cv.put("Country", country);
            cv.put("id", id);
            cv.put("Name", name);
            cv.put("Email", email);

            mDb.insert("Vehicles", null, cv);

            Log.d("SaveVehicles", "informationsaved");
            return true;

        }
        catch(Exception ex)
        {
            Log.d("SaveVehicles", ex.toString());
            return false;
        }
    }


} 

しかし、私の問題を解決するために、必要なさまざまな get メソッドをどのように実装できるかわかりません。

4

2 に答える 2

4

SQL クエリからオブジェクトを作成すると、次のようになります。

/**
 * @return Returns a list of all objects.
 */
public ArrayList<Object> getAllObjects() 
{
    // Select All Query
    String selectQuery = "SELECT * FROM SOME_TABLE";
    // Get the isntance of the database
    SQLiteDatabase db = this.getWritableDatabase();
    //get the cursor you're going to use
    Cursor cursor = db.rawQuery(selectQuery, null);

    //this is optional - if you want to return one object
    //you don't need a list
    ArrayList<Object> objectList = new ArrayList<Object>();

    //you should always use the try catch statement incase
    //something goes wrong when trying to read the data
    try
    {           
        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                 //the .getString(int x) method of the cursor returns the column
                 //of the table your query returned
                Object object= new Object(Integer.parseInt(cursor.getString(0)),
                                        Integer.parseInt(cursor.getString(1)),
                                        Integer.parseInt(cursor.getString(2)),
                                        cursor.getString(3),
                                        cursor.getString(4),
                                        cursor.getString(5),
                                        Boolean.parseBoolean(cursor.getString(6))
                                        );                                      
                // Adding contact to list
                objectList.add(object);
            } while (cursor.moveToNext());
        }
    }
    catch (SQLiteException e)
    {
        Log.d("SQL Error", e.getMessage());
        return null;
    }
    finally
    {
      //release all your resources
        cursor.close();
        db.close();
    }
    return objectList;      
}

上記のコードは、データベースに「SOME_TABLE」という名前のテーブルがあり、7 つのパラメーターを受け取るオブジェクトがあることを前提としていますが、スニペットを変更して機能させることができるはずです。

于 2012-09-13T15:26:05.890 に答える
0

データベースにデータを照会し、返されたカーソルを反復処理して必要なデータを引き出し、それを文字列に入れてコンストラクターにフィードする必要があります。

クエリは次のようになります (提供した情報とqueryメソッドを使用):

public Cursor fetchList(String category) {
    return mDb.query("Vehicles", new String[] { "CATEGORY", "COUNTRY", "ID", "NAME", "EMAIL" }, "Category =" + category,
            null, null, null, null);
}

これは基本的なクエリであり、SQL インジェクション攻撃の対象であることに注意してください。ユーザーがカテゴリに入力することを許可せず、提供されたリストから選択させる場合を除き、脆弱性を軽減するためにパラメーター化する必要があります。

とにかく、検索パラメーターに一致したレコードごとに 1 つの行で、カーソル内のデータが返されます。そこから、返されたカーソルを繰り返し処理し、そこからデータを取り出して、使用できる文字列にする必要があります。

于 2012-09-13T15:08:11.043 に答える