# android studio sqlite 实例

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 。这时候 用着急,可以新建一个新的虚拟机。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值