Giter Club home page Giter Club logo

android-lite-orm's Introduction

#LiteOrm:Android高性能数据库框架

A fast, small, powerful ORM framework for Android. LiteOrm makes you do CRUD operarions on SQLite database with a sigle line of code efficiently.

English Intro :Readme

LiteOrm是一个小巧、强大、比系统自带数据库操作性能快1倍的 android ORM 框架类库,开发者一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

汉语简介 :Readme

QQ群: 新群 42960650一群(满) 47357508


1. 初步认识

自动化且比系统自带数据库操作快1倍!

LiteOrm是android上的一款数据库(ORM)框架库。速度快、体积小、性能高。开发者基本一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

10万条数插入对比系统API 10万条数插入对比系统API

100 000条数据测试 100 000条数据测试

###设计原则 :

  • 轻量、专注、性能优先、线程无关,专注数据及其关系存储和操作。
  • 无需工具辅助,不需要无参构造,不需要繁多注解,约定优于配置。
  • 使用极致简约,例如:db.save(u); db.query(U.class); db.deleteAll(U.class);

###功能特点 :

  • 支持多库:每个数据库文件对应一个LiteOrm管理类实例。
  • SD卡存储:可以将DB文件放在你认为合理的位置。
  • 自动建表:开发者无需关心数据库以及表细节。
  • 库文件操作:新建、打开、删除、释放一个数据库文件。
  • 独立操作:使用 LiteOrm 的 single 实例,可与 cascade 方式平滑切换,性能高,仅处理该对象数据,其关系、和关联对象忽略;
  • 级联操作:使用 LiteOrm 的 cascade 实例,可与 single 方式平滑切换,全递归,该对象数据,及其关系、和关联对象都被处理;
  • 关系存储和恢复:真正实现实体关系映射持久化以及恢复,只需在实体的关联属性上标出关系类型即可。
  • 智能列探测:App升级或者Model改变,新加了属性字段,该字段将被探测到并加入数据库中,因此无需担心新字段不被存储。
  • 丰富API支持:save(replace), insert, update, delete, query, mapping, etc。
  • 自动识别类型:分别转化为以sqlite支持的TEXT, REAL, INTEGER, BLOB几种数据类型存储。
  • 自动构建对象,通过反射和探测构造函数参数等hack手法新建对象,大多情况下亦不需要无参构造函数。
  • 更新指定列,可灵活、强制、批量赋值,强制赋值将无视被操作对象的真实值。
  • 存储序列化字段:Date、ArrayList、Vector等各种容器智能保存及读取。
  • 约束性语法支持:NOT NULL, UNIQUE, DEFAULT, COLLATE, CHECK, PRIMARY KEY,支持冲突算法。
  • 灵活的查询和删除:columns, where, roder, limit, having group, etc。

2. 快速起步:初始化应保持单例

一个数据库对应一个LiteOrm的实例,如果一个App只有一个数据库,那么LiteOrm应该是全局单例的。 如果多次新建LiteOrm实例,系统会提示你应该关闭之前的数据库,也可能会引起其他未知错误。

保持单例:

static LiteOrm liteOrm;

if (liteOrm == null) {
    liteOrm = LiteOrm.newSingleInstance(this, "liteorm.db");
}
liteOrm.setDebugged(true); // open the log

3. 基本注解

新建一个Test Model,将其作为操作对象:

@Table("test_model")
public class TestModel {

    // 指定自增,每个对象需要有一个主键
    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int id;

    // 非空字段
    @NotNull
    private String name;

    //忽略字段,将不存储到数据库
    @Ignore
    private String password;

    // 默认为true,指定列名
    @Default("true")
    @Column("login")
    private Boolean isLogin;
}

LiteOrm将为开发者建一个名为“test_model”的数据库表,其字段为:id name login。 建表语句:CREATE TABLE IF NOT EXISTS test_model (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, login TEXT DEFAULT true) 更多注解关注其他篇章或直接参看Samples。

4. 常用操作

直接操作对象即可,LiteOrm会为你完成探测、建表等工作。

  • 保存(插入or更新)
School school = new School("hello");
liteOrm.save(school);
  • 插入
Book book = new Book("good");
liteOrm.insert(book, ConflictAlgorithm.Abort);
  • 更新
book.setIndex(1988);
book.setAuthor("hehe");
liteOrm.update(book);
  • 更新指定列
// 把所有书的author强制批量改为liter
HashMap<String, Object> bookIdMap = new HashMap<String, Object>();
bookIdMap.put(Book.COL_AUTHOR, "liter");
liteOrm.update(bookList, new ColumnsValue(bookIdMap), ConflictAlgorithm.Fail);
// 仅 author 这一列更新为该对象的最新值。
//liteOrm.update(bookList, new ColumnsValue(new String[]{Book.COL_AUTHOR}, null), ConflictAlgorithm.Fail);
  • 查询
List list = liteOrm.query(Book.class);
OrmLog.i(TAG, list);
  • 查找 使用WhereBuilder
List<Student> list = liteOrm.query(new QueryBuilder<Student>(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%0"})
        .whereAppendAnd()
        .whereAppend(Person.COL_NAME + " LIKE ?", new String[]{"%s%"}));
OrmLog.i(TAG, list);
  • 查询 根据ID
Student student = liteOrm.queryById(student1.getId(), Student.class);
OrmLog.i(TAG, student);
  • 查询 任意
List<Book> books = liteOrm.query(new QueryBuilder<Book>(Book.class)
        .columns(new String[]{"id", "author", Book.COL_INDEX})
        .distinct(true)
        .whereGreaterThan("id", 0)
        .whereAppendAnd()
        .whereLessThan("id", 10000)
        .limit(6, 9)
        .appendOrderAscBy(Book.COL_INDEX));
OrmLog.i(TAG, books);
  • 删除 实体
// 删除 student-0
liteOrm.delete(student0);
  • 删除 指定数量
// 按id升序,删除[2, size-1],结果:仅保留第一个和最后一个
// 最后一个参数可为null,默认按 id 升序排列
liteOrm.delete(Book.class, 2, bookList.size() - 1, "id");
  • 删除 使用WhereBuilder
// 删除 student-1
liteOrm.delete(new WhereBuilder(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%1%"})
        .and()
        .greaterThan("id", 0)
        .and()
        .lessThan("id", 10000));
  • 删除全部
// 连同其关联的classes,classes关联的其他对象一带删除
liteOrm.deleteAll(School.class);
liteOrm.deleteAll(Book.class);


// 顺带测试:连库文件一起删掉
liteOrm.deleteDatabase();
// 顺带测试:然后重建一个新库
liteOrm.openOrCreateDatabase();
// 满血复活

关于作者(About Author)


我的博客 :http://vmatianyu.cn

我的开源站点 :http://litesuits.com

android-lite-orm's People

Contributors

litesuits avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-lite-orm's Issues

warning: non-varargs call of varargs method with inexact argument type for last parameter;

/Users/krew/Android/service/android/app/src/main/java/com/service/DbUtils.java:69: warning: non-varargs call of varargs method with inexact argument type for last parameter;
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + "=?", value));
                                                                          ^
  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
/Users/krew/Android/service/android/app/src/main/java/com/service/DbUtils.java:83: warning: non-varargs call of varargs method with inexact argument type for last parameter;
        return liteOrm.<T>query(new QueryBuilder(cla).where(field + "=?", value).limit(start, length));
                                                                          ^
  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
Note: /Users/krew/Android/service/android/app/src/main/java/com/service/DbUtils.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 warnings

msg = near "from": syntax error

如果我的对象中一个字段名叫from,liteorm直接就报错了。log显示create table就失败了。 msg = near "from": syntax error 这样的字段话取名还要想想想是不是和sql命令冲突?
我测试加这句就好了@column("ffrom"),但这样好难用。。。

@PrimaryKey(PrimaryKey.AssignType.BY_MYSELF)
@column("id")
private String id;
private String textContent;
private String from;
private String to;

权限问题

如果我要将数据库放在外部存储中,当版本选择23时在Application中初始化时就会直接报错!

子元素是List集合,能保存关联。却无法取出。

package com.litesuits.orm.junit;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.litesuits.orm.LiteOrm;
import com.litesuits.orm.db.annotation.Column;
import com.litesuits.orm.db.annotation.Mapping;
import com.litesuits.orm.db.annotation.PrimaryKey;
import com.litesuits.orm.db.annotation.Table;
import com.litesuits.orm.db.enums.AssignType;
import com.litesuits.orm.db.enums.Relation;
import com.litesuits.orm.model.demo.Teacher;

import android.content.Context;
import android.os.Environment;
import android.test.AndroidTestCase;

public class MyDemoTest extends AndroidTestCase {

public static final String DB_NAME = Environment
        .getExternalStorageDirectory().getAbsolutePath()
        + "/lite/orm/love.db";

public void estHello() {
    System.out.println("你好");
}

public void estSaveData() {
    Context mContext = getContext();
    LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
    liteOrm.save(new Teacher("丽华", 23));
    liteOrm.save(getHomeTypeList());

}

public void estDeleteData(){
    Context mContext = getContext();
    LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
    liteOrm.delete(HomeType.class);
}

public void testGetData(){
    Context mContext = getContext();
    LiteOrm liteOrm = LiteOrm.newCascadeInstance(mContext, DB_NAME);
    List<HomeType> hy = liteOrm.query(HomeType.class);
    System.out.println("hy = "+hy.toString());

}

public List<HomeType> getHomeTypeList(){
    List<HomeType>  homeTypes = new ArrayList<MyDemoTest.HomeType>();

    for (int i = 1; i <= 3; i++) {
        List<UserHome> userhomes = new ArrayList<MyDemoTest.UserHome>();
        UserHome[] uhs = new UserHome[3];
        for (int j = 1; j <= 3; j++) {
            userhomes.add(new UserHome("uid" + i + j, "nickname" + i + j));
            uhs[j-1] = new UserHome("uid" + i + j, "nickname" + i + j);
        }

// homeTypes.add(new HomeType("hometypelist:" + i, "title," + i,
// (UserHome[]) (userhomes.toArray())));
// homeTypes.add(new HomeType("hometypelist:" + i, "title," + i,
// uhs));
homeTypes.add(new HomeType("hometypelist:" + i, "title," + i,
userhomes));
}
return homeTypes;
}

@Table("home_type")
public static class HomeType implements Serializable {

    private static final long serialVersionUID = -6048223356798388872L;
    public static final String VISIBLE = "1";
    public static final String NONE = "0";

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    @Column("db_id")
    private long db_id;

    @Column("hometypelist")
    private String hometypelist;
    @Column("type_id")
    private String type_id;
    private String title;
    private String image;
    private String typeinfo;
    private String home_image;

    /** 推荐是否有更多 0无 1 有 */
    private String usermore;

    @Mapping(Relation.OneToMany)
    @Column("userlist")

// private UserHome[] userlist;
private List userList;

    private HomeType(String hometypelist, String title,
            List<UserHome> userList) {
        this.hometypelist = hometypelist;
        this.title = title;
        this.userList = userList;
    }


    public String getHometypelist() {
        return hometypelist;
    }

    public void setHometypelist(String hometypelist) {
        this.hometypelist = hometypelist;
    }

    public String getType_id() {
        return type_id;
    }

    public void setType_id(String type_id) {
        this.type_id = type_id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getTypeinfo() {
        return typeinfo;
    }

    public void setTypeinfo(String typeinfo) {
        this.typeinfo = typeinfo;
    }

// public UserHome[] getUserlist() {
// return userlist;
// }
//
// public void setUserlist(UserHome[] userlist) {
// this.userlist = userlist;
// }

    public String getHome_image() {
        return home_image;
    }

    public void setHome_image(String home_image) {
        this.home_image = home_image;
    }

    /** 推荐是否有更多 0无 1 有 */
    public String getUsermore() {
        return usermore;
    }

    public void setUsermore(String usermore) {
        this.usermore = usermore;
    }

    @Override
    public String toString() {
        return "HomeType [hometypelist=" + hometypelist + ", type_id="
                + type_id + ", title=" + title + ", image=" + image
                + ", typeinfo=" + typeinfo + ", home_image=" + home_image

// + ", userlist=" + Arrays.toString(userlist) + "]";
+ ", userlist=" + userList.toString() + "]";
}

}

@Table("user_home")
public static class UserHome implements Serializable {

    private static final long serialVersionUID = -1311542533996146739L;

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    @Column("db_id")
    private long db_id;

    @Column("uid")
    private String uid;
    @Column("easemob_uuid")
    private String easemob_uuid;
    @Column("gender")
    private String gender;
    @Column("nickname")
    private String nickname;
    @Column("header")
    private String header;
    @Column("voice")
    private String voice;
    @Column("voice_time")
    private String voice_time;



    private UserHome(String uid, String nickname) {
        this.uid = uid;
        this.nickname = nickname;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getEasemob_uuid() {
        return easemob_uuid;
    }

    public void setEasemob_uuid(String easemob_uuid) {
        this.easemob_uuid = easemob_uuid;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

    public String getVoice() {
        return voice;
    }

    public void setVoice(String voice) {
        this.voice = voice;
    }

    public String getVoice_time() {
        return voice_time;
    }

    public void setVoice_time(String voice_time) {
        this.voice_time = voice_time;
    }

    @Override
    public String toString() {
        return "UserHome [db_id=" + db_id + ", uid=" + uid
                + ", easemob_uuid=" + easemob_uuid + ", gender=" + gender
                + ", nickname=" + nickname + ", header=" + header
                + ", voice=" + voice + ", voice_time=" + voice_time + "]";
    }

}

}

Auto increase ( auto ordered ) with the AssignType.BY_MYSELF

在定义主键的时候发现了一个问题:

就是虽然我用了@PrimaryKey(AssignType.BY_MYSELF)来注解我数据的xxxId

xxxId是无规律的整数

但是在保存之后orm会自动根据这个xxxId排序.....好奇怪😶

谁能帮我解答一下...不甚感激O(∩_∩)

Relation.OneToMany 存在无法删除的最后一条关联记录

CASCADE模式下,比如A类和B类,A类中有个List,当list的数量大于一条时,list.remove(index)后,save,则AB两个类的关系表中的关系记录则会被删除,但是,当删除到最后一条时,再怎么删除就都删除不掉了,始终会有最后一条存在。希望能解答一下,谢谢。

为啥save和update方法没效果?

我用save方法保存了数据,用liteOrm.update去更新内容,返回int是正确的条数。
但是用query重新查询出来的结果还是旧的值,为啥呢?

混淆后query方法失效

混淆后query方法失效,查询不到结果,我是把代码导入到一个module,作为lib编译进我的项目,然后我发现,导出为签名的apk的时候query( QueryBuilder )方法失效了

官方Demo在某些平台(eg. 华硕平板),插入级联数据报错

01-13 13:36:16.906 20740-21066/com.litesuits.orm.samples D/Querier: ----> Query Start: SQLStatement [sql=SELECT * FROM book, bindArgs=null, mStatement=null]
01-13 13:36:16.906 20740-21066/com.litesuits.orm.samples I/SqliteDatabaseCpp: sqlite returned: error code = 1, msg = no such table: book, db=/mnt/sdcard/lite/orm/cascade.db
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: android.database.sqlite.SQLiteException: no such table: book: , while compiling: SELECT * FROM book
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:53)
01-13 13:36:16.914 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.assit.Querier.doQuery(Querier.java:23)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.checkTableAndQuery(CascadeSQLiteImpl.java:348)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.query(CascadeSQLiteImpl.java:304)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.queryAndPrintAll(CascadeTestActivity.java:297)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.testQueryAll(CascadeTestActivity.java:207)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.makeOrmTest(CascadeTestActivity.java:94)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.access$0(CascadeTestActivity.java:78)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity$1.run(CascadeTestActivity.java:379)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples W/System.err: at java.lang.Thread.run(Thread.java:856)
01-13 13:36:16.921 20740-21066/com.litesuits.orm.samples I/CascadeTestActivity: Book : []
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples D/Querier: ----> Query Start: SQLStatement [sql=SELECT * FROM student, bindArgs=null, mStatement=null]
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples I/SqliteDatabaseCpp: sqlite returned: error code = 1, msg = no such table: student, db=/mnt/sdcard/lite/orm/cascade.db
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples W/System.err: android.database.sqlite.SQLiteException: no such table: student: , while compiling: SELECT * FROM student
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
01-13 13:36:16.929 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:53)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.assit.Querier.doQuery(Querier.java:23)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.checkTableAndQuery(CascadeSQLiteImpl.java:348)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.query(CascadeSQLiteImpl.java:304)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.queryAndPrintAll(CascadeTestActivity.java:297)
01-13 13:36:16.937 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.testQueryAll(CascadeTestActivity.java:208)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.makeOrmTest(CascadeTestActivity.java:94)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.access$0(CascadeTestActivity.java:78)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity$1.run(CascadeTestActivity.java:379)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at java.lang.Thread.run(Thread.java:856)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples I/CascadeTestActivity: Student : []
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples D/Querier: ----> Query Start: SQLStatement [sql=SELECT * FROM teacher, bindArgs=null, mStatement=null]
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples I/SqliteDatabaseCpp: sqlite returned: error code = 1, msg = no such table: teacher, db=/mnt/sdcard/lite/orm/cascade.db
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: android.database.sqlite.SQLiteException: no such table: teacher: , while compiling: SELECT * FROM teacher
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:53)
01-13 13:36:16.945 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.assit.Querier.doQuery(Querier.java:23)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.checkTableAndQuery(CascadeSQLiteImpl.java:348)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.query(CascadeSQLiteImpl.java:304)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.queryAndPrintAll(CascadeTestActivity.java:297)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.testQueryAll(CascadeTestActivity.java:209)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.makeOrmTest(CascadeTestActivity.java:94)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.access$0(CascadeTestActivity.java:78)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity$1.run(CascadeTestActivity.java:379)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: at java.lang.Thread.run(Thread.java:856)
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples I/CascadeTestActivity: Teacher : []
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples D/Querier: ----> Query Start: SQLStatement [sql=SELECT * FROM class, bindArgs=null, mStatement=null]
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples I/SqliteDatabaseCpp: sqlite returned: error code = 1, msg = no such table: class, db=/mnt/sdcard/lite/orm/cascade.db
01-13 13:36:16.953 20740-21066/com.litesuits.orm.samples W/System.err: android.database.sqlite.SQLiteException: no such table: class: , while compiling: SELECT * FROM class
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:53)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.assit.Querier.doQuery(Querier.java:23)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.checkTableAndQuery(CascadeSQLiteImpl.java:348)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.query(CascadeSQLiteImpl.java:304)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.queryAndPrintAll(CascadeTestActivity.java:297)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.testQueryAll(CascadeTestActivity.java:210)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.makeOrmTest(CascadeTestActivity.java:94)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.access$0(CascadeTestActivity.java:78)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity$1.run(CascadeTestActivity.java:379)
01-13 13:36:16.960 20740-21066/com.litesuits.orm.samples W/System.err: at java.lang.Thread.run(Thread.java:856)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples I/CascadeTestActivity: Classes : []
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples D/Querier: ----> Query Start: SQLStatement [sql=SELECT * FROM school, bindArgs=null, mStatement=null]
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples I/SqliteDatabaseCpp: sqlite returned: error code = 1, msg = no such table: school, db=/mnt/sdcard/lite/orm/cascade.db
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: android.database.sqlite.SQLiteException: no such table: school: , while compiling: SELECT * FROM school
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:68)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:127)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:94)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:53)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1564)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1538)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.assit.Querier.doQuery(Querier.java:23)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.checkTableAndQuery(CascadeSQLiteImpl.java:348)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.db.impl.CascadeSQLiteImpl.query(CascadeSQLiteImpl.java:304)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.queryAndPrintAll(CascadeTestActivity.java:297)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.testQueryAll(CascadeTestActivity.java:211)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.makeOrmTest(CascadeTestActivity.java:94)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity.access$0(CascadeTestActivity.java:78)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at com.litesuits.orm.samples.CascadeTestActivity$1.run(CascadeTestActivity.java:379)
01-13 13:36:16.968 20740-21066/com.litesuits.orm.samples W/System.err: at java.lang.Thread.run(Thread.java:856)

触发器

请问支持创建触发器么 该怎么创建

我遇到一个问题,不知道是个人原因还是框架的原因,希望能够帮我解答!

有两个Activity:FirstActivity,SecondActivity
1、我在FirstActivity获取服务器上的数据,并保存数据表为test
2、FirstActivity执行finish(),打开SecondActivity
3、SecondActivity查询test表,查不出数据,而且输出的表名为空
4、SecondActivity执行finish(),回到FirstActivity,FirstActivity可以查出数据
重复第2项的操作,结果与第3的一样
注:导出的db文件可以看到已保存的数据。

Android 6.0 不支持,直接报错结束。

在6.0上报错。5.1和4.4上面正常。
输出日志

03-05 08:12:55.621 8980-8980/? E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1]
03-05 08:12:55.621 8980-8980/? E/SQLiteLog: (14) os_unix.c:31278: (2) open(/storage/emulated/0/xxxx/database/xxxx.db) - 
03-05 08:12:55.622 8980-8980/? E/SQLiteDatabase: Failed to open database '/storage/emulated/0/xxxx/database/xxxx.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

LiteOrm.newSingleInstance(Context context, String dbName) 初始化后紧接着调用查询会查询不到内容

版本:1.6.0、1.6.3
使用 LiteOrm.newSingleInstance(Context context, String dbName) 初始化数据库之后,紧接着调用query 查询会查询不到内容,即使数据库中其实有结果数据。除非在查询之前随便 liteOrm.save(...) 一下,QAQ 被坑了一整个晚上!最后的这个解决方法的发现也是突发奇想...

作者看看是什么原因,修正一下吧😂

实体类中有集合,存不进去

代码如下,我发现集合类型的字段存不进去,这块应该怎么处理呢?
`@Table("OutlineTreeTest2")
public class OutlineTreeVo implements Serializable {

@PrimaryKey(AssignType.BY_MYSELF)
private int outlineId;

private String outlineName;
private int sequence;
private int hierarchyId;
private int parentId;
private int initialId;//大纲初始ID
private String status;
private int examCount;
@Mapping(Relation.OneToMany)
private List<Long> examIds;
private int examFilterCount;
@Ignore
private List<Long> examFilterIds;
private int doneExamCount;
@Ignore
private List<Long> doneExamIds;
private int correctExamCount;
@Ignore
private List<Long> correctExamIds;
private String rightRate;
//统计信息
@Mapping(Relation.OneToOne)
private OutlineStatisticVo outlineStatisticVo;
@Mapping(Relation.OneToMany)
private List<OutlineTreeVo> children;`

我在魅族m2 note上面发现一个很严重的问题

只有在此机型的最新系统上面有,flyme 5.1.6,其它机型没有问题,报错如下:
android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS address(id INTEGER PRIMARY KEY AUTOINCREMENT ,city TEXT NOT NULL DEFAULT ,isDefault TEXT NOT NULL DEFAULT false ,locationInfo TEXT NOT NULL ,mobile TEXT NOT NULL ,name TEXT NOT NULL )
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
06-16 18:08:11.192 20224-21214/? W/System.err: at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1024)
06-16 18:08:11.192 20224-21214/? W/System.err: at com
.....
android.database.sqlite.SQLiteException: no such table: address (code 1): , while compiling: REPLACE INTO address(id,city,isDefault,locationInfo,mobile,name)VALUES(?,?,?,?,?,?)
06-16 18:08:11.194 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-16 18:08:11.194 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898)
06-16 18:08:11.195 20224-21214/? W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509)
06-16 18:08:11.195 20224-21214/? W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-16 18:08:11.195 20224-21214/? W/System.err: at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
06-16 18:08:11.195 20224-21214/? W/System.err: at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
06-16 18:08:11.195 20224-21214/? W/System.err: at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1024)
06-16 18:08:11.195 20224-21214/? W/System.err: at com.litesuits.orm.db.assit.SQLStatement.execInsertWithMapping(SQLStatement.java:102)
06-16 18:08:11.195 20224-21214/? W/System.err: at com.litesuits.orm.db.assit.SQLStatement.execInsert(SQLStatement.java:93)
06-16 18:08:11.195 20224-21214/? W/System.err: at com.litesuits.orm.db.impl.SingleSQLiteImpl.save(SingleSQLiteImpl.java:58)
06-16 18:08:11.195 20224-21214/? W/System.err: at me.liutaw.data.repository.UserRepostitoryImpl$3.call(UserRepostitoryImpl.java:105)
06-16 18:08:11.195 20224-21214/? W/System.err: at me.liutaw.data.repository.UserRepostitoryImpl$3.call(UserRepostitoryImpl.java:93)
06-16 18:08:11.195 20224-21214/? W/System.err: at rx.Observable.unsafeSubscribe(Observable.java:8098)
06-16 18:08:11.195 20224-21214/? W/System.err: at rx.internal.operators.OperatorSubscribeOn$1$1.call(OperatorSubscribeOn.java:62)
06-16 18:08:11.195 20224-21214/? W/System.err: at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
06-16 18:08:11.195 20224-21214/? W/System.err: at rx.schedulers.ExecutorScheduler$ExecutorSchedulerWorker.run(ExecutorScheduler.java:98)
06-16 18:08:11.195 20224-21214/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-16 18:08:11.195 20224-21214/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-16 18:08:11.195 20224-21214/? W/System.err: at java.lang.Thread.run(Thread.java:818)

无法插入级联数据

@table("product")
public class ProductMdl implements Serializable {

@Unique
@PrimaryKey(AssignType.AUTO_INCREMENT)
private int id;

@Column("proName")
private String proName;

@Column("proPrice")
private String proPrice;


@Column("proNum")
private String proNum;

@Column("proPhotoUrl")
private String proPhotoUrl;

}

@table("tablePro")
public class TableProMdl implements Serializable {
/**
*
*/
@unique
@PrimaryKey(AssignType.AUTO_INCREMENT)
private int id;

private static final long serialVersionUID = -5204190870608983058L;
@Column("tableTitle")
private String mTableTitle;

@Column("proTotal")
private String mProTotal;

@Mapping(Relation.OneToMany)
private List<ProductMdl> mProList;

}

tablePro这个表中 插入数据其他字段都可以插入,mProList 插入不了!

save与insert的区别是什么?

我理解的是前者会判断主键是否存在,若存在进行数据更新,不存在则进行数据插入;后者判断主键存在,则不作处理,返回错误。

是否支持成员变量为其他对象

插入如下对象时报空指针异常:

public class Province extends Area implements Parcelable {

    @JSONField(name = "cities")
    public ArrayList<City> cities;
    //...
}

其中City也继承自Area:

public class City extends Area implements Parcelable {

    @JSONField(name = "areas")
    public ArrayList<Area> areas;
    //...
}

Area的结构如下:

public class Area implements Parcelable {
    @JSONField(name = "name")
    public String name;
    @JSONField(name = "code")
    public int code;
    @JSONField(name = "level")
    public final int level;
    //...
}

异常信息如下:

 java.lang.NullPointerException
     at com.litesuits.orm.db.assit.SQLBuilder.buildInsertSql(SQLBuilder.java:270)
     at com.litesuits.orm.db.assit.SQLBuilder.buildReplaceAllSql(SQLBuilder.java:236)
     at com.litesuits.orm.db.impl.SingleSQLiteImpl.save(SingleSQLiteImpl.java:74)
     at com.parkingwang.app.support.CacheHelper.saveToDbCache_aroundBody6(CacheHelper.java:97)
     at com.parkingwang.app.support.CacheHelper$AjcClosure7.run(CacheHelper.java:1)
     at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149)
     at hugo.weaving.internal.Hugo.logAndExecute(Hugo.java:30)
     at com.parkingwang.app.support.CacheHelper.saveToDbCache(CacheHelper.java:97)
     at com.parkingwang.app.account.vehicle.VehicleCallback.onUISuccess(VehicleCallback.java:37)
     at com.parkingwang.api.NotifyCallback.onUIResponse(NotifyCallback.java:79)
     at com.parkingwang.api.NotifyCallback.onUIResponse(NotifyCallback.java:35)
     at com.github.yoojia.fast.http.ParsableHttpCallback$1.handleMessage(ParsableHttpCallback.java:29)
     at android.os.Handler.dispatchMessage(Handler.java:106)
     at android.os.Looper.loop(Looper.java:193)
     at android.app.ActivityThread.main(ActivityThread.java:5551)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:515)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:914)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:730)
     at dalvik.system.NativeStart.main(Native Method)

查询id对不上结果对不上

保存数据id为1-8;使用
QueryBuilder queryBuilder = new QueryBuilder(ProblemDetailBean.class);
queryBuilder.whereEquals("id", "5");
或queryById(5, MyClass.class) 均没有返回值(确定query(MyClass.class)返回了所有值, debug断点查了20分钟确定)。设置whereLessThan(“5”)时返回了所有值。

无法插入级联数据

@table("tb_user")
public class UserModel extends BaseModel {
private static final long serialVersionUID = 1L;

public static final String COL_MOBILE = "mobile";

@NotNull
@Column(COL_MOBILE)
private String mobile;

@mapping(Relation.OneToMany)
private ArrayList roles;
}

@table("tb_role")
public class RoleModel extends BaseModel {

@Unique
@NotNull
private int roleId;

private String role;

}

public void insert(T t) {
getLiteOrm().cascade().insert(t, ConflictAlgorithm.Abort);
}
插入数据userMode,UserModel中其他字段都可以插入,唯独roles是空

statement aborts at 31: [REPLACE INTO Object

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1802)
W/System.err(17618): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
W/System.err(17618): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:972)
W/System.err(17618): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
W/System.err(17618): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
W/System.err(17618): at com.litesuits.orm.db.assit.SQLStatement.execInsertWithMapping(SQLStatement.java:111)

无法更新数据失败

mUserInfo.setIsCurrUser("0");
Log.i("主键",mUserInfo.getId() + "");
ColumnsValue cv = new ColumnsValue(new String[]{"is_curr"});
mLiteOrm.update(mUserInfo, cv, ConflictAlgorithm.None);

这里mUserInfo所有数据正常,主键也存在
image

where条件的主键一直是空

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.