在Android开发时,对SQLite的用法实在不懂,看了不少资料决定写下这篇博客,目前还是学生,知识点掌握不好,有错误请大佬指出。参考《第一行代码》第二版这本书!!!采用的是书上的例子。
LitePal 是一款Android数据库框架,将我们平时开发最常用的一些数据库功能进行封装。
1、首先编辑app/build.gradle文件,添加依赖:
dependencies {
//添加依赖
implementation 'org.litepal.android:core:1.3.2'
}
添加的声明中,1.3.2是版本的意思,我查了很多资料和书,大部分是用下面这种,可能Android studio 版本不同吧。
dependencies {
compile 'org.litepal.android:core:1.3.2'
}
2、这样我们就把LitePal成功引入到了项目中了,接下来需要配置litepal.xml文件了。右击app/src/main目录->New->Directory,创建一个assets目录,然后建litepal.xml文件,内容如下:
这里< dbname >标签用于指定数据库的名字,< version >标签用来指定数据库的版本号,< list >用来指定所有映射模型。什么是映射模型呢,我是这么认为的,用一个特殊的类来当做数据库中的数据类型。
3、最后还需要配置一下LitePalApplication,修改AnndroidManifest.xml中的代码,内容如下:
1、因为之前有说过,采用的是对象关系映射模式,它可以让我们用面向对象的思维来操作数据库。接下来我们定义一个Book类,代码如下:
public class Book extends DataSupport {
private int id;
private String author;
private double price;
private int pages;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这就是一个典型的javabean,我们定义id,author,price,pages,name这几个字段,然后生成相应的getter和setter方法
2、然后我们要把Book类放到映射模型中,代码如下:
3、然后用Connector.getDatabase()方法就创建完成了
代码如下:
Connector.getDatabase();
1、由于这里我们要用增删改查操作了,而之前的模型类是没有继承结构的,我们需要把继承结构加上:
public class Book extends DataSupport {
...
}
接下来开始向Book表中添加数据,使用save()方法,代码如下:
Button insert = (Button)findViewById(R.id.insert_book);
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
//添加数据
book.save();
}
});
这里我按照书中,做了一个添加数据的按钮,首先创建出Book的实例,然后用set方法进行设置,最后用save() 方法完成添加操作。
比如我们要把某一本书的价格改为10.99,那么我们可以写如下代码:
Button update = (Button)findViewById(R.id.update_book);
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Book book = new Book();
book.setPrice(10.99);
book.updateAll("name=? and author=?","The Da Vinci Code" ,"Dan Brown");
}
});
同样我做了一个修改数据的按钮。我们先创建Book的实例,然后调用setPrice()方法设置更新的数据,然后用updateAll()方法去执行。前面的参数是一个SQL语句,约束条件用?代替,后面的参数来填充前面的“?”。
PS:在javaweb开发时也有类似操作,在连接数据库时:
@Override
public void addUser(User user) {
Connection conn=null;
PreparedStatement ps = null;
String sql="insert k_user(`name`,`password`) value (?,?)";
try {
conn=DBUtil.getConnection();
ps=conn.prepareStatement(sql);
ps.setString(1, user.getName());
ps.setString(2, user.getPassword());
ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这里向k_user添加数据时的sql语句也是类似的方法。
用一样的方法创建一张表,一个javabean,然后添加到映射模型中去,最后把版本号加1,就可以了、
//添加第二张表
调用DataSupport.deleteAll()方法来删除数据。代码你一看就知道了,跟之前修改的方法差不多,代码:
Button delete = (Button)findViewById(R.id.delete_book);
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataSupport.deleteAll(Book.class,"price","15");
}
});
这是删除数据的一个按钮。
LitePal的查询功能非常强大,只需要用DataSupport.findAll(Book.class)方法就可以查询所有数据了,返回的是一个List。
但是我个人习惯使用原生的SQL语句来查询,所以这里用的是SQL语句来进行查询。
Button look = (Button) findViewById(R.id.look_book);
look.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Cursor c = DataSupport.findBySQL("select * from Book where pages > ? and price < ?","400","20");
if(c.moveToFirst()){
do{
//遍历Cursor对象
String name = c.getString(c.getColumnIndex("name"));
String author = c.getString(c.getColumnIndex("author"));
int pages = c.getInt(c.getColumnIndex("pages"));
double price = c.getDouble(c.getColumnIndex("price"));
Log.d("MyText","name is ="+name);
Log.d("MyText","author is ="+author);
Log.d("MyText","pages is="+pages);
Log.d("MyText","price is ="+price);
}while(c.moveToNext());
}
c.close();
}
});
代码看起来挺多的,因为这里用的是DataSupport.findBuSQL()方法进行原生查询,返回的是一个Cursor对象,
需要一一把数据取出才行。