2016-08-21 18 views
-1

私はアンドロイドでSQLiteからデータを読み取ろうとしていますが、ID、名前、日付の3つのパラメータを使用しています。たとえば、id = "number"、name = "something"、日付間( "最初の日付"、 "2番目の日付")です。問題は、私は何をするのか分かりません。最後の機能です。もう2つのパラメータが残っています。私は何をするか、どこに配置するかを知っていません。だから、誰もこのコードスタイルに精通していて、共有したり、助けてくれますか? (私もこの本から、このコードを取ると、これに関連するためのすべてのソリューションは、すべての本ではありませんでした。)androidのSQLiteからデータを取得

//Table person; It contain the same attribute as Person class 
public static final class PersonTable 
{ 
    public static final String NAME = "Persons"; 
    public static final class Cols 
    { 
     static final String ID = "id"; 
     static final String NAME = "name"; 
     static final String DATE = "date"; 
    } 
}  



public class PersonCursorWrapper extends CursorWrapper 
{ 
     public PersonCursorWrapper(Cursor cursor) 
    { 
      super(cursor); 
     } 

    public Person getPerson() 
    { 
      int id = geIntI(getColumnIndex(PersonTable.Cols.ID)); 
      String name = getString(getColumnIndex(PersonTable.Cols.NAME)); 
      long date = getLong(getColumnIndex(PersonTable.Cols.DATE)); 


      Person Person = new Person(); 
      Person.id(id); 
      Person.setDate(new Date(date)); 
      Person.setName(name); 

      return Person; 
     } 
    } 
} 


private PersonCursorWrapper queryPersons(String whereClause, String[] whereArgs) 
{ 
    Cursor cursor = mDatabase.query 
    (
     PersonTable.NAME, 
     null, 
     whereClause, 
     whereArgs, 
     null, 
     null, 
     null 
    ); 

     return new PersonCursorWrapper(cursor); 
    } 



public Person getPerson(int id, String name, String date) 
{ 
    PersonCursorWrapper cursor = queryPersons(
     PersonTable.Cols.ID + " = ?"+" "+ 
     PersonTable.Cols.NAME + " = ?"+" "+ 
     PersonTable.Cols.DATE + " = ?", 
     new String[] { id.toString() } 
     ); 

    try 
    { 
       if (cursor.getCount() == 0) 
       { 
        return null; 
       } 

       cursor.moveToFirst(); 
       return cursor.getPerson(); 
    } 
    finally 
    { 
       cursor.close(); 
    } 
} 
+0

どのような方法ですか? 'mDatabase.query(...)'を意味しますか? –

+0

@AbdulhamidDhaiban mDatabaseはSQLiteDatabaseクラスのインスタントです。そして私もそれをよく理解していません。私は本でそれを見つけました。 –

+0

あなたはあなたが何を参照しているのか分からないので、私はなぜあなたがそれを言及しているのかよく分かりません –

答えて

0

をあなたは、単にアンドロイドを提供SQLiteOpenHelperクラスを使用することができますAndroidのSQLiteデータベースの操作について。

これは、SQLiteOpenHelperを使用した場合の完全な実装です。ここで

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.util.ArrayList; 
import java.util.List; 

public class DatabaseHandler2 extends SQLiteOpenHelper { 

// Database details 
private static final int DATABASE_VERSION = 1; 
private static String DATABASE_NAME = "dbname.db"; 

// Table names 
private static String TABLE_PERSON = "person"; 

// Table Columns name 
private static final String COLUMN_ID = "workout_id"; 
private static final String COLUMN_NAME = "exercise_id"; 

// Create queries 
private static final String CREATE_TABLE_PERSON = "CREATE TABLE " +   TABLE_PERSON + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT NOT NULL)"; 

public DatabaseHandler2(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(CREATE_TABLE_PERSON); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_PERSON); 
} 


public Person getPerson(int id) { 
    Person person = new Person(); 

    String selectQuery = "SELECT * FROM " + TABLE_PERSON + " WHERE " + COLUMN_ID + "=" + id; 
    SQLiteDatabase rdb; 
    rdb = this.getReadableDatabase(); 
    Cursor cursor = rdb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      person.setId(cursor.getInt(0)); 
      person.setName(cursor.getString(1)); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    rdb.close(); 

    return person; 
} 

public List<Person> getAllPersons() { 
    List<Person> personList = new ArrayList<Person>(); 
    String selectQuery = "SELECT * FROM " + TABLE_PERSON; 
    SQLiteDatabase rdb; 
    rdb = this.getReadableDatabase(); 
    Cursor cursor = rdb.rawQuery(selectQuery, null); 
    if (cursor.moveToFirst()) { 
     do { 
      Person person = new Person(); 
      person.setId(cursor.getInt(0)); 
      person.setName(cursor.getString(1)); 
      personList.add(person); 
     } while (cursor.moveToNext()); 
    } 
    cursor.close(); 
    rdb.close(); 

    return personList; 
} 

public void savePerson(Person person) { 
    SQLiteDatabase wdb; 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_ID, person.getId()); 
    values.put(COLUMN_NAME, person.getName()); 
    wdb = this.getWritableDatabase(); 
    long rowId = wdb.insert(TABLE_PERSON, null, values); 
    wdb.close(); 
} 

public void deletePerson(int id) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_PERSON, COLUMN_ID + "='" + id + "'", null); 
    db.close(); 
} 

public boolean renamePerson(int id, String newName) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(COLUMN_NAME, newName); 

    int numOfRowsEffected = db.update(TABLE_PERSON, values, COLUMN_ID + "='" + id + "'", null); 
    db.close(); 
    return numOfRowsEffected > 0 ? true : false; 
} 
} 

は、Personクラスである

パブリッククラスPerson {

private int id; 
private String name; 

public Person() { 
} 

public Person(int id, String name) { 
    this.id = id; 
    this.name = name; 
} 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 
+0

@dra、実際には、私の質問はgetPerson関数についてです。まず、条件付きでクエリを実行する必要があります。たとえば、name = "something"、id = "number"などです。また、SQLiteDatabase.execute( "command")のようなものを使わずに別の代替ソリューションを用意することもできますが、最後の関数に似ていますか?それでも助けようと努力しているのです。 –

+0

私の答えにはgetPerson()関数があります –

1

は、次の3つのパラメーター・マーカー(?)を持っているので、あなたはそれを三つのパラメータ与えることがあります。

cursor = queryPersons(
    ..., 
    new String[] { id.toString(), name, date } 
); 
関連する問題