当前位置:   article > 正文

【Android Studio】安卓APP期末作品记录之连接sqlite数据库以及简单的sqlite增删改查_android连接数据库sqlite并进行查询

android连接数据库sqlite并进行查询

期末作品要求使用数据库,我自己折腾了一会,又看了很多博主发的文章,终于成功了,特此记录:使用SQLiteDatabase和SQLiteOpenHelper连接已有sqlite数据库

连接sqlite数据库的四步

第一步,导入sqlite数据库

因为我已经创建好了一个sqlite数据库,所以第一步得将我的数据库导入项目中
在app —> src —> main下创建assect文件夹,将自己的数据库粘贴进去,我的文件路径如下图所示:assets

第二步,将数据库写入到项目模拟手机中

创建MyDatabaseHelper.java文件

import android.content.Context;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class MyDatabaseHelper {
    //导入的sqlite数据库文件名
    private final String DB_NAME = "AsianGames.db";
    private Context context;

    //定义类的方法
    public MyDatabaseHelper(Context context) {
        this.context = context;
    }

    // 复制和加载区域数据库中的数据
    public String CopyDBFile() throws IOException {

        // 在第一次运行应用程序时,加载数据库到data/data/当前包的名称/database/数据库名字
        //获取准确的路径,context.getPackageName()得到包名
        File dir = new File("data/data/" + context.getPackageName() + "/databases");
        //如果文件夹不存在,则创建指定的文件
        if (!dir.exists() || !dir.isDirectory()) {
            dir.mkdir();
        }
        //文件声明
        File file = new File(dir, DB_NAME);
        //输入流
        InputStream inputStream = null;
        //输出流
        OutputStream outputStream = null;
        //若不存在,通过IO流的方式,将assets目录下的数据库文件,写入到项目模拟手机中,当开启模拟器时,会将数据库文件写入到模拟手机的内存中
        if (!file.exists()) {
            try {
                //创建文件
                file.createNewFile();
                //加载文件
                inputStream = context.getClass().getClassLoader().getResourceAsStream("assets/" + DB_NAME);
                //输出到文件
                outputStream = new FileOutputStream(file);

                byte[] buffer = new byte[1024];
                int len;
                //按字节写入
                while ((len = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭资源
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
                if (inputStream != null) {
                    inputStream.close();
                }
            }
        }
        return file.getPath();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

然后在需要用到数据库之前,写入以下代码,我这里写了个函数,直接调用即可:

public void openDatabase(){
        MyDatabaseHelper myHelper = new MyDatabaseHelper(LoginOrRegisterActivity.this);
        try {
            myHelper.CopyDBFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注:在这一行代码中,“LoginOrRegisterActivity.this”需要替换成你自己的activity文件名

MyDatabaseHelper myHelper = new MyDatabaseHelper(LoginOrRegisterActivity.this);

成功之后可以在右侧的Device File Explorer中的data —> data找到自己的项目,可以看到数据库已经被写入模拟器中了在这里插入图片描述

第三步,连接数据库

创建OpenHelper.java文件

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;

public class OpenHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "AsianGames.db";
    public OpenHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

第四步,使用数据库进行增删改查

在这一步中,如果你调用数据库的代码是写在一个专门的java文件中的话(比如我就写在GetSQLite.java中),需要注意调用数据库时是在activity中还是在fragment

// GetSQLite.java
  // 在activity中
  public Cursor getData(FragmentActivity activity, String sql){
        OpenHelper openHelper=new OpenHelper(activity);
        SQLiteDatabase db=openHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery(sql,null);
        return cursor;
    }

  // 在fragment中
  public Cursor getData1(Context context, String sql, String[] o){
        OpenHelper openHelper=new OpenHelper(context);
        SQLiteDatabase db=openHelper.getReadableDatabase();
        Cursor cursor = db.rawQuery(sql,o);
        return cursor;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

重点是这两行代码:

OpenHelper openHelper=new OpenHelper(context);
SQLiteDatabase db=openHelper.getReadableDatabase();

到这里sqlite数据库的连接就已经结束了

简单的sqlite增删改查

1、增、删、改
我比较习惯自己写sql语句,所以就没有用它的增、删、改函数,我用的是:execSQL(String sql, Object[] bindArgs)
第一个参数是sql语句。
第二个参数是sql语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应,第二个参数可写可不写。

String sql = "update users set username=?,sex=? where user_account=?";
Object[] o = new Object[]{name,sex,user_account};
db.execSQL(sql,o);
  • 1
  • 2
  • 3

2、查
execSQL不能执行查询语句,所以我们需要用到Cursor以及rawQuery
rawQuery(String sql, String[] selectionArgs)
第一个参数是sql语句。
第二个参数是sql语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应,第二个不需要的话可以写null。

String sql = "select * from users where username=? and password=?";
String[] s = new String[]{name,password};
Cursor cursor = db.rawQuery(sql,s);
if(cursor.moveToFirst() == true){
            String id;
            String name;
            String psw;
            String sex;

            id = cursor.getString(0);
            name = cursor.getString(1);
            sex = cursor.getString(2);
            psw = cursor.getString(3);
			System.out.println(id+","+name+","+psw+","+sex)
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/570584
推荐阅读
相关标签
  

闽ICP备14008679号