如何在android中使用greendao在两个具有一对一关系的表中插入记录

时间:2015-08-18 06:17:04

标签: java android sqlite greendao

在greendao

中生成和建立一对一关系的代码下方
private static void addPersonInfo(Schema schema) {
        Entity person=schema.addEntity("Person");
        person.addIdProperty().primaryKey().autoincrement();
        person.addStringProperty("personName");

        Entity order=schema.addEntity("Order");
        order.addLongProperty("orderID").primaryKey().autoincrement();
        order.addStringProperty("orderName");
        Property orderProperty=person.addLongProperty("orderID").getProperty();
        person.addToOne(order,orderProperty);   
    }

上面的代码生成相应的Person.java,PersonDao.java,Order.java,OrderDao.java,DaoSession.java和DaoMaster.java文件

现在在我的MainActivity的onCreate()方法中,我只是想在表中插入一条记录,但我不知道我该怎么做。 我试过这样:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"RelationDemo.db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession();
        Person person=new Person();
        Order order=new Order();
        OrderDao orderDao=daoSession.getOrderDao();
        order.setOrderID(Long.parseLong("111"));
        order.setOrderName("person1 order");
        orderDao.insert(order);
        PersonDao personDao=daoSession.getPersonDao();
        person.setPersonName("person1");
        person.setOrderID(Long.parseLong("111"));
        person.setOrder(order);
        personDao.insert(person);

}

但这会产生异常:引起:android.database.sqlite.SQLiteException:near“ORDER”:语法错误(代码1):,同时编译:INSERT INTO ORDER('ORDER_ID', 'ORDER_NAME')VALUES(?,?)

请帮帮我。感谢

1 个答案:

答案 0 :(得分:0)

您似乎正在以正确的方式行事,至少在谈论greendao代码时。

但它似乎是一个SQLite问题。我认为它可能是表名,因为" ORDER"它是SQLite reserved word用于" ORDER BY" clausule。您可以引用该关键字,因为它在链接中被告知,但我认为应该很容易为表格使用不同的名称。