一、今日学习内容
SQLite:
SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。
SQLite数据库,它广泛用于包括浏览器、IOS,Android以及一些便携需求的小型web应用系统。
SQLite数据库的常用操作:
包含建表、删除表、增、删、改、查,SQL语法如下:
建表:
create table if not exists 表名(字段1 类型(长度),字段2 类型(长度),...)
删除表:
drop table if exists 表名
增:
insert into 表名 (字段1,字段2,字段3 ...) values (值1,值2,值3 ...); insert into 目标数据表 select * from 源数据表;
删:
delete from 表名 where 条件表达式
改:
update 表名 set 字段1=值1,字段2=值2... where 条件表达式
查:
select * from 表名 where 条件表达式
实例:
1、首先先创建一个DBHelper类(DBOpenHelper.java)
在这里会执行建库、建表的操作
package com.hyl.dao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; /** * @programName: DBOpenHelper.java * @programFunction: database helper class * @createDate: 2018/09/29 * @author: AnneHan * @version: * xx. yyyy/mm/dd ver author comments * 01. 2018/09/29 1.00 AnneHan New Create */ public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(Context context,String name, CursorFactory factory, int version){ super(context, name, factory, version); } @Override //首次创建数据库的时候调用,一般可以执行建库,建表的操作 //Sqlite没有单独的布尔存储类型,它使用INTEGER作为存储类型,0为false,1为true public void onCreate(SQLiteDatabase db){ //user table db.execSQL("create table if not exists user_tb(_id integer primary key autoincrement," + "userID text not null," + "pwd text not null)"); } @Override//当数据库的版本发生变化时,会自动执行 public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ } }
LitePal:
1.配置Litepal:在build.gradle文件的dependencies闭包中添加依赖:compile ‘org.litepal.android:core:1.4.1’
2.在src/main目录下创建一个assets目录,在该目录下新建一个litepal.xml文件,编辑里面内容:
用于指定数据库名
用于指定数据库版本号
3.在AndroidManifect.xml中的标签中写如下代码
android:name=“org.litepal.LitePalApplication”
4.可以创建和升级数据库了
如:创建一个Book类
public class Book extends DataSupport{
private int id;
private String author;
private double price;
private int pages;
private String name;
private String press;
//生成get和set方法的快捷键是Alt+Inser
public int getId() {
return id;
}
5.创建数据库,在MainActivity中添加如下代码:
Button createDatabase=findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LitePal.getDatabase();
}
});
6.升级同样的方式创建一张表,需要在litepal.xml添加mapping标签,同时版本号加1
7.添加数据:
Button addData=findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book=new Book();
book.setName(“The Da Vinci Code”);
book.setAuthor(“Dan Browm”);
book.setPages(454);
book.setPrice(16.94);
book.setPress(“Unknow”);
book.save();
}
8.更新数据:
Button updataData=findViewById(R.id.updata_data);
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book=new Book();
//方法一只能对已存储的对象进行操作,限制性比较大
// book.setName(“The Lost Symbol”);
// book.setAuthor(“Dan Brown”);
// book.setPages(510);
// book.setPrice(19.95);
// book.setPress(“Unknow”);
// book.save();
// book.setPrice(10.99);
// book.save();
//方法二
book.setPrice(15.00);
book.setPress(“Anchor”);
book.updateAll(“name=? and author=?”,“The Lost Symbol”,“Dan Brown”);
//LitePal提供了一个setToDefault()方法,然后传入相应的列名就可实现
book.setToDefault(“pages”);
book.updateAll();
}
});
9.删除数据:
Button deleteData=findViewById(R.id.Delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class,“price<?”,“15.01”);
}
});
10.查询数据
Button queryData=findViewById(R.id.Query_data);
queryData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List books=DataSupport.findAll(Book.class);
for (Book book:books){
Log.d(“MainActivity”, "book name is "+book.getName());
Log.d(“MainActivity”, "book author is "+book.getAuthor());
Log.d(“MainActivity”, "book pages is "+book.getPages());
Log.d(“MainActivity”, "book price is "+book.getPrice());
Log.d(“MainActivity”, "book press is "+book.getPress());
});
二、遇到的问题
对于SQLite的用法不是很理解
三、明日计划
明天继续学习相关知识