数据库处理

来源:互联网 发布:淘宝旅行机票网 编辑:程序博客网 时间:2024/05/22 12:13

1数据库_ormlite

  • 数据库增删改查:
  • insert
  • select * from address where id = 100
  • update address set addressDetail=’金融港四路’ where id=100
  • delete from address where id = 100

联合查询:
select * from address inner join user on address.userId = user.userid where user.username=’test’ and address.isDefault=1

  • 主页: http://ormlite.com/
  • 配置: 添加以下依赖

    <code data-origin="" 
      compile 'com.j256.ormlite:ormlite-android:4.48'" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  compile 'com.j256.ormlite:ormlite-android:4.48'  compile 'com.j256.ormlite:ormlite-core:4.48'

<code data-origin=""

ORM: object relational mapping
Dao: data access object(访问数据的对象)

  • <code data-origin=""
    用途: 操作数据库
  • <code data-origin=""

    使用步骤

    1. <code data-origin=""

      创建数据库表结构的实体类.示例代码:

      <code data-origin="" 
      <code data-origin="" 
       @DatabaseTable(tableName = "user")" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> @DatabaseTable(tableName = "user") public class User {     @DatabaseField(generatedId = true)     private int id;     @DatabaseField(columnName = "name")     private String name;     @DatabaseField(columnName = "age")     private int age;     @DatabaseField(columnName = "tel")     private String tel;     // 需要一个空的构造器,否则报错     public User() {     }     public User(String name, int age, String tel) {         this.name = name;         this.age = age;         this.tel = tel;     } }
    2. <code data-origin=""

      <code data-origin="" 
      创建OrmLiteSqliteOpenHelper的实现类.示例代码:

      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
       public class UserDBOpenHelper extends OrmLiteSqliteOpenHelper {" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> public class UserDBOpenHelper extends OrmLiteSqliteOpenHelper {     public UserDBOpenHelper(Context context) {         super(context, "user.db", null, 1);     }     @Override     public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {         try {             // 创建表             TableUtils.createTable(connectionSource, User.class);         } catch (SQLException e) {             e.printStackTrace();         }     }     @Override     public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {         try {             // 更新表             TableUtils.dropTable(connectionSource, User.class, true);             onCreate(database, connectionSource);         } catch (SQLException e) {             e.printStackTrace();         }     }     private static UserDBOpenHelper instance;     public static synchronized UserDBOpenHelper getInstance(Context context) {         if (instance == null) {             synchronized (UserDBOpenHelper.class) {                 if (instance == null) {                     instance = new UserDBOpenHelper(context);                 }             }         }         return instance;     }     private Dao<User, Integer> dao;     // 获取操作数据库的DAO     public Dao<User, Integer> getUserDao() throws SQLException {         if (dao == null) {             dao = getDao(User.class);         }         return dao;     }     @Override     public void close() {         super.close();         dao = null;     } }
    3. <code data-origin=""

      <code data-origin="" 
      <code data-origin="" 
      获取数据库的DAO对象, 即可进行增删改查的操作.示例代码:

      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
       UserDBOpenHelper helper = new UserDBOpenHelper(this);" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> UserDBOpenHelper helper = new UserDBOpenHelper(this); Dao<User, Integer> dao =  helper.getUserDao(); User user = new User("zhangsan", 12, "13212345678"); // 增 dao.create(user); // 改 dao.updateRaw("update user set tel = '18882348888' where name = ?", new String[]{"王武"}); // 查 List<User> query = dao.queryForEq("name", "王武"); // 删 dao.deleteById(2); 注意事项: 问题:Can't find a no-arg constructor for class cn.itcast.demoormlite.User

<code data-origin=""
<code data-origin="" 
<code data-origin="" 
2. GreenDao

  • <code data-origin=""
    <code data-origin="" 
    <code data-origin="" 
    导入依赖关系:
    <code data-origin="" 
      compile 'de.greenrobot:greendao:2.1.0'" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  compile 'de.greenrobot:greendao:2.1.0'  compile 'de.greenrobot:greendao-generator:2.1.0'

<code data-origin=""
<code data-origin="" 
<code data-origin="" 
- 预生成代码以及创建数据库:

<code data-origin="" 
<code data-origin="" 
<code data-origin="" 
<code data-origin="" 
    Schema schema = new Schema(1, "cn.itcast.demogreendao.db");" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">    Schema schema = new Schema(1, "cn.itcast.demogreendao.db");    // 用户表    Entity userEntity = schema.addEntity("User");    userEntity.addStringProperty("name");    userEntity.addStringProperty("password");    new DaoGenerator().generateAll(schema, "E:\\workspace\\demogreendao\\app\\src\\main\\java");
  • <code data-origin=""
    <code data-origin="" 
    <code data-origin="" 
    保留自己增加的代码:
    <code data-origin="" 
       schema.enableKeepSectionsByDefault();" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">   schema.enableKeepSectionsByDefault();

<code data-origin=""

<code data-origin="" 
<code data-origin="" 
greenDao desc

  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    session有缓存。比如根据ID去查User,如果两次查询的ID是一样的,那么GreenDao会直接从内存中读取上一次查询的结果,而不会再去查数据库。

  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    创建数据模型

  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    增删改查
    User表

    idnamepassword1zhangsan1234
  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    联合查询:
    初始化DaoMaster,DaoSession,一般在Application.onCreate, Acitity.onCreat()里面初始化

    <code data-origin="" 
    <code data-origin="" 
    <code data-origin="" 
    <code data-origin="" 
          DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendao.db", null););" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">      DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greendao.db", null););  DaoMaster daomater = new DaoMaster(helper.getWritableDatabase());          DaoSession session = daoMaster.newSession();  mUserDao = session.getUserDao();

    <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    Address表

    idaddressuserIdisDefault1金融港四路6false2大学园路6true3大学园路1true
    • <code data-origin=""

      <code data-origin="" 
      <code data-origin="" 
      场景一: 查询用户“张三”的所有地址

      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
        QueryBuilder&lt;Address&gt; builder = addressDao.queryBuilder();" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  QueryBuilder<Address> builder = addressDao.queryBuilder();  builder.join(AddressDao.Properties.UserId, User.class)      .where(UserDao.Properties.Name.eq("张三"));  List<Address> addressList = builder.list();
    • <code data-origin=""

      <code data-origin="" 
      <code data-origin="" 
      场景二:查询用户“张三”的默认收货地址

      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
       QueryBuilder&lt;Address&gt; builder = addressDao.queryBuilder();" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;"> QueryBuilder<Address> builder = addressDao.queryBuilder(); builder.where(AddressDao.Properties.IsDefault.eq(true)); builder.join(AddressDao.Properties.UserId, User.class)     .where(UserDao.Properties.Name.eq("张三")); List<Address> addressList = builder.list();
    • <code data-origin=""

      <code data-origin="" 
      <code data-origin="" 
      场景三:查询收货地址含”金融港”字符的用户

      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
      <code data-origin="" 
        QueryBuilder&lt;User&gt; userQueryBuilder = userDao.queryBuilder();" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  QueryBuilder<User> userQueryBuilder = userDao.queryBuilder();  userQueryBuilder.join(Address.class, AddressDao.Properties.UserId)      .where(AddressDao.Properties.Address.like("%金融港%"));  List<User> list = userQueryBuilder.list();    
  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    关联关系:一对一,一对多的数据库表查询
    订单详情表(Order):

    idstatususerId10 (未发货)121 (已发货)1

    <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    商品详情表(Product):

    idnameprice1“iPhone6”58882“adidas x5”700

    <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    订单-商品表(OrderProduct):

    orderIdproductId111221
    • <code data-origin=""
      <code data-origin="" 
      <code data-origin="" 
      场景一:查询商品名称 (一对一关系的查询)
      <code data-origin="" 
        orderProduct.addToOne(product, productProperty); " style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  orderProduct.addToOne(product, productProperty); 
    • <code data-origin=""
      <code data-origin="" 
      <code data-origin="" 
      场景二:查询订单对应的商品列表(一对多关系的查询)
      <code data-origin="" 
        order.addToMany(orderProduct, orderIdProperty);" style="border-radius: 3px; word-wrap: break-word; border: 0px; padding: 0px 5px; margin: 0px; display: block; font-family: Consolas, Inconsolata, Courier, monospace; font-weight: 700; font-size: 1em; letter-spacing: -1px;">  order.addToMany(orderProduct, orderIdProperty);
  • <code data-origin=""

    <code data-origin="" 
    <code data-origin="" 
    注意事项:

    • <code data-origin=""
      <code data-origin="" 
      <code data-origin="" 
      query.list()在实际项目中,要放到异步线程里面去。
    • <code data-origin=""
      <code data-origin="" 
      <code data-origin="" 
      修改DbGenerator之后,重新生成代码时,要把数据库的version增加,或者把之前安装的apk卸载掉。否则数据库不会重建。
<code data-origin=""
<code data-origin="" 
<code data-origin="" 
0 0
原创粉丝点击