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

衔接sqlite数据库的四步

第一步,导入sqlite数据库

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

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

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

创立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();
    }
}

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

public void openDatabase(){
        MyDatabaseHelper myHelper = new MyDatabaseHelper(LoginOrRegisterActivity.this);
        try {
            myHelper.CopyDBFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

MyDatabaseHelper myHelper = new MyDatabaseHelper(LoginOrRegisterActivity.this);

成功之后能够在右侧的Device File Explorer中的data —> data找到自己的项目,能够看到数据库现已被写入模拟器中了。

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

第三步,衔接数据库

创立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) {
    }
}

第四步,运用数据库进行增修改查

在这一步中,如果你调用数据库的代码是写在一个专门的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;
    }

重点是这两行代码:

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);

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)
        }