Java 在android上从SQLite检索数据

Java 在android上从SQLite检索数据,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在尝试使用三个参数,id、name和date从android中的SQLite读取数据。例如,id=“number”和name=“something”以及介于(“第一个日期”、“第二个日期”)之间的日期。问题是,我不知道如何处理最后一个函数。还有两个参数,我不知道该怎么做,也不知道该放在哪里。那么,是否有人有任何经验和熟悉这种代码风格,可以分享或帮助我?(我也从书中获取了这段代码,书中根本没有任何与此相关的解决方案。) 对于android sqlite数据库操作,您可以简单地使用android

我正在尝试使用三个参数,id、name和date从android中的SQLite读取数据。例如,id=“number”和name=“something”以及介于(“第一个日期”、“第二个日期”)之间的日期。问题是,我不知道如何处理最后一个函数。还有两个参数,我不知道该怎么做,也不知道该放在哪里。那么,是否有人有任何经验和熟悉这种代码风格,可以分享或帮助我?(我也从书中获取了这段代码,书中根本没有任何与此相关的解决方案。)


对于android sqlite数据库操作,您可以简单地使用android提供的SQLiteOpenHelper类

这是使用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;
}
}

您有三个参数标记(
),因此必须为其指定三个参数:

cursor = queryPersons(
    ...,
    new String[] { id.toString(), name, date }
);

你指的是哪种方法?你的意思是
mDatabase.query(…)
?@abdulhamidhaiban mDatabase是SQLiteDatabase类的一个瞬间。我也不太明白。我在书中找到的。我们不知道你指的是哪本书,所以我不知道你为什么要提到它it@dra,实际上,我的问题只是关于getPerson函数。首先,它必须使用条件进行查询。例如,name=“something”和id=“number”。第二,我可以有另一个替代解决方案,而不使用类似SQLiteDatabase.execute(“命令”)的东西,但遵循类似于上一个函数的东西吗?谢谢你的帮助。我的答案有一个getPerson()函数
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;
}
}
cursor = queryPersons(
    ...,
    new String[] { id.toString(), name, date }
);