1

私は Sqlite に詳しくないので、http: //satyan.github.io/sugar/creation.html にドキュメントがあるデータベース ライブラリである SugarORM を使用しています。

その機能のほとんどは sqlite のものと同じですが、より単純なコマンドを使用しています。

エクササイズDB

public class ExerciseDB extends SugarRecord 
{
    @Column(name = "ex_recordId", unique = true, notNull = true)
    private String ex_recordId;
    private String ex_group;
    private String ex_name;    
    private int ex_cal;

    public ExerciseDB()
    {
    }

    public ExerciseDB(String ex_recordId, String ex_group, String ex_name, int ex_cal) 
    {
        this.ex_recordId = ex_recordId;
        this.ex_group = ex_group;
        this.ex_name = ex_name;
        this.ex_cal = ex_cal;
    }

データベースは、たとえば次のように保存されます。

ExerciseDB e0001= new ExerciseDB("ex0001", "Sports", "AAA", 190); save(e0001);
ExerciseDB e0002= new ExerciseDB("ex0002", "Sports", "BBB", 190); save(e0002);

質問:

レコード "ex0001" を検索する方法を教えてください。次のコードを使用して検索しようとしました。

ExerciseDB.find(ExerciseDB.class, key);
List<ExerciseDB> books = ExerciseDB.find(ExerciseDB.class, "ex_recordId = ?", key, null,null,null);
String gg = books.get(1).get_ex_group();

しかし、それは報告します

android.database.sqlite.SQLiteException: no such column: ex0001 (code 1): , while compiling: SELECT * FROM Ex_Records WHERE ex0001

find の公式ドキュメント:

List<Book> books = Book.find(Book.class, "author = ?", new String{author.getId()});

Book book = Book.findById(Books.class, 1);
Author author = book.author;

しかし、これが何1を表し、どのように見つけるかはわかりません

コードのドキュメントは次のとおりです。

    public static <T> List<T> find(Class<T> type, String whereClause, String... whereArgs) {
        return find(type, whereClause, whereArgs, null, null, null);
    }

public static <T> List<T> find(Class<T> type, String whereClause, String[] whereArgs, String groupBy, String orderBy, String limit) {
        SugarDb db = getSugarContext().getSugarDb();
        SQLiteDatabase sqLiteDatabase = db.getDB();
        T entity;
        List<T> toRet = new ArrayList<T>();
        Cursor c = sqLiteDatabase.query(NamingHelper.toSQLName(type), null, whereClause, whereArgs,
                groupBy, null, orderBy, limit);
        try {
            while (c.moveToNext()) {
                entity = type.getDeclaredConstructor().newInstance();
                SugarRecord.inflate(c, entity);
                toRet.add(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            c.close();
        }
        return toRet;
    }

基本はSqliteに似ているはずです...上記のコードドキュメントに基づいて助けを提供できる人はいますか? よろしくお願いします!

4

2 に答える 2

1

次のように別の方法を使用しfindWithQueryます。

List<ExerciseDB> bb = ExerciseDB.findWithQuery(ExerciseDB.class, "Select * from Ex_Records where ex_recordId = ?", "ex0001");
于 2015-01-18T15:04:34.540 に答える