android studio sqlite 实例
文章目录
0、课前准备
安装包下载地址:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ipNuHtTu-1584681412096)(C:\Users\Administrator\Desktop\error\sqlite\1584596750461.png)]
链接:https://pan.baidu.com/s/1R33uv7mqfCo35m2AqP7mAQ
提取码:bgzi
下载清单:
android studio 3.6 开发环境;因为安装出现bug这里提供解决方案
修复bughttps://blog.csdn.net/shi860715/article/details/104490479
1、修复DirectX 下载DirectX_Repair-V3_9.7z进行修复。
2、修复dll包,安装vc++运行环境,安装vc_redist.x64。
navicat 数据库管理工具,支持 oracle、mysql 、sqlite、sql server等;
pathnavicat 用于破解 Navicat;
1 、逍遥模拟器
XYAZ-Setup-7.0.1-ha06ed7dcf.exe 一直下一步安装即可。傻瓜式
2、数据库管理工具 navicat
第一步:双击 navicat111_premium_cs_x64 ,一直下一步安装
第二部: 将pathnavicat .exe ,放置到 navicat安装根目录,然后双击完成破解
3 、android studio 3.6
一直下一部完成安装。如果出现bug,参照我的上一篇博客;修复bughttps://blog.csdn.net/shi860715/article/details/104490479
4、干货:
4.1 创建数据库
package com.liu.dbtest.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class PersonSqlLiteOpenHelper extends SQLiteOpenHelper {
/**
* 首先定义数据库,当然version 必须大于或者等于1 ,要不然会报错
* @param context
*/
public PersonSqlLiteOpenHelper(@Nullable Context context) {
super(context, "person.db", null, 1);
}
/**
* 当数据库创建的时候,来出发生成表结构
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person ( name TEXT(20),id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,age INTEGER,account TEXT(20));");
}
/**
* 当数据库版本发生改变的时候,才会出发该方法
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
4.2 测试方法
package com.liu.dbtest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import com.liu.dbtest.db.PersonSqlLiteOpenHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class SqliteDBTest {
/**
* 测试数据库的创建,表结构创建
*/
@Test
public void createDb (){
PersonSqlLiteOpenHelper db = new PersonSqlLiteOpenHelper(InstrumentationRegistry.getInstrumentation().getTargetContext());
db.getWritableDatabase();
}
}
4.2.1 sqlite的位置
/data/data/APP包名/database/表名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxHDPoNp-1584681412098)(C:\Users\Administrator\Desktop\error\sqlite\1584597754535.png)]
4.2.2 Navicat使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAOhiJvG-1584681412099)(C:\Users\Administrator\Desktop\error\sqlite\1584597948328.png)]
将文件保存到砸电脑桌面,然后直接选中,丢到Navicat中,我们就可以很方便的操作该数据库 了;
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6gDsxPmI-1584681412100)(C:\Users\Administrator\Desktop\error\sqlite\1584598033226.png)]
5 完成CRUD操作
5.1 创建模型:
package com.liu.dbtest.demo;
public class Person {
private int id;
private String name;
private int age ;
private int account;
public Person(int id, String name, int age, int account) {
this.id = id;
this.name = name;
this.age = age;
this.account = account;
}
public Person() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getAccount() {
return account;
}
public void setAccount(int account) {
this.account = account;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", account=" + account +
'}';
}
}
5.2 创建dao
package com.liu.dbtest.dao;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.liu.dbtest.db.PersonSqlLiteOpenHelper;
import com.liu.dbtest.demo.Person;
public class PersonDao {
private PersonSqlLiteOpenHelper helper;
public PersonDao(Context context){
helper = new PersonSqlLiteOpenHelper(context);
}
/**
* 添加用户
* @param name
* @param age
* @param account
*/
public void add (String name, int age ,int account){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into person (name ,age,account ) values (?,?,?)",new Object[]{name,age,account});
db.close();
}
/**
* 通过 id 查询用户
* @param id
* @return
*/
public Person findbyId(String id){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from person where id =?",new String[]{id});
if(cursor.moveToNext()){
Person person = new Person();
person.setName(cursor.getColumnName(cursor.getColumnIndex("name")));
db.close();
return person;
}
db.close();
return null;
}
}
5.3 shell 进行验证:
#查询设备
D:\android_wrok\dbtest>adb devices
List of devices attached
emulator-5554 device
#连接指定设备
D:\android_wrok\dbtest>adb -s emulator-5554 shell
root@generic_x86_64:/ #
#切换到数据库目录
root@generic_x86_64:/ # cd /data/data/com.liu.dbtest/databases/
#查看数据文件
root@generic_x86_64:/data/data/com.liu.dbtest/databases # ls
person.db
person.db-journal
#在线操作数据库
root@generic_x86_64:/data/data/com.liu.dbtest/databases # qlite3 person.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> select * from person;
zhangsan|1|11|5000
zhangsan|2|11|5000
sqlite>
# 将远程的文件拉去到本地
D:\android_wrok\dbtest>adb -s emulator-5554 pull /data/data/com.liu.dbtest/databases/person.db
/data/data/com.liu.dbtest/databases/person.db: 1 file pulled, 0 skipped. 0.3 MB/s (20480 bytes in 0.070s)
5.4 更新操作
/**
* 通过主键来更新数据
* @param name
* @param age
* @param account
*/
public void update(String name,int age, int account,int id){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update person set name=? ,age =? ,account=? where id =? ",new Object[]{name,age,account,id});
db.close();
}
5.5 删除操作
/**
* 通过主键来删除数据
* @param id
*/
public void delete (int id){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from person where id = ? " ,new Object[]{id});
db.close();
}
5.6 查询所有
public List<Person> findAll(){
List<Person> personList = new ArrayList<>();
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor =db.rawQuery("select * from person",new String[]{});
while (cursor.moveToNext()){
Person person = new Person();
person.setId(cursor.getInt(cursor.getColumnIndex("id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
person.setAccount(cursor.getInt(cursor.getColumnIndex("account")));
personList.add(person);
}
cursor.close();
db.close();
return personList;
}
5.7 单元测试类
package com.liu.dbtest;
import android.content.Context;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import com.liu.dbtest.dao.PersonDao;
import com.liu.dbtest.db.PersonSqlLiteOpenHelper;
import com.liu.dbtest.demo.Person;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
@RunWith(AndroidJUnit4.class)
public class SqliteDBTest {
private Context context;
@Before
public void init(){
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
}
/**
* 测试数据库的创建,表结构创建
*/
@Test
public void createDb (){
PersonSqlLiteOpenHelper db = new PersonSqlLiteOpenHelper(context);
db.getWritableDatabase();
}
@Test
public void addPerson(){
PersonDao dao = new PersonDao(context);
dao.add("wangwu",12,6000);
}
@Test
public void updatePerson(){
PersonDao dao = new PersonDao(context);
dao.update("lisi",20,5000,1);
}
@Test
public void delPerson(){
PersonDao dao = new PersonDao(context);
dao.delete(1);
}
@Test
public void findAllPerson(){
PersonDao dao = new PersonDao(context);
List<Person> personList = dao.findAll();
for (Person p :personList){
System.out.println(p.toString());
}
}
}
5.4 备注:
在测试的时候,发现虚拟机有的版本并没有sqlite3 。这时候 用着急,可以新建一个新的虚拟机。