数据库处理
来源:互联网 发布:淘宝旅行机票网 编辑:程序博客网 时间: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=""
使用步骤
<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; } }
<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; } }
<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=""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=""<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=""
<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表id name password 1zhangsan1234<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表
id address userId isDefault 1金融港四路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<Address> 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<Address> 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<User> 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):id status userId 10 (未发货)121 (已发货)1<code data-origin=""
<code data-origin=""
<code data-origin=""
商品详情表(Product):
id name price 1“iPhone6”58882“adidas x5”700<code data-origin=""
<code data-origin=""
<code data-origin=""
订单-商品表(OrderProduct):
orderId productId 111221- <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=""
<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
- 数据库处理
- java数据库事物处理
- 置疑数据库的处理
- Delphi数据库处理
- 简单的数据库处理
- 简单的数据库处理
- Oracle数据库处理多媒体信息
- 数据库8155错误处理
- SQL:数据库日期处理
- Delphi数据库处理
- JAVA 处理数据库时间
- VB的数据库处理
- 数据库时间处理
- 数据库乱码处理
- 数据库大数据量处理
- 数据库并发处理
- 数据库质疑处理方法
- informix数据库中锁表处理
- 每日一个js实例7--通过面向对象实现选项卡
- 网络处理
- C++类成员变量初始化顺序问题
- oracle的日期函数
- 【OkHttp】封装帮助类
- 数据库处理
- UDP 调用 connect的作用--4A--个人总结
- 解决Could not find method android() for arguments问题
- Android studio 启动错误——Gradle
- 机器学习_统计学习_深度学习的一些公式
- wamp,MySQL,perl的联谊之路
- log4j将日志输出到数据库
- 高度不定 垂直居中
- 嵌套动画如何使用