期末作品要求使用数据库,我自己折腾了一会,又看了很多博主发的文章,终于成功了,特此记录:使用SQLiteDatabase和SQLiteOpenHelper连接已有sqlite数据库。
连接sqlite数据库的四步
第一步,导入sqlite数据库
因为我已经创建好了一个sqlite数据库,所以第一步得将我的数据库导入项目中
在app —> src —> main下创建assect文件夹,将自己的数据库粘贴进去,我的文件路径如下图所示:
第二步,将数据库写入到项目模拟手机中
创建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找到自己的项目,可以看到数据库已经被写入模拟器中了
第三步,连接数据库
创建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语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应,第二个参数可写可不写。文章来源:https://www.toymoban.com/news/detail-771451.html
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。文章来源地址https://www.toymoban.com/news/detail-771451.html
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)
}
到了这里,关于【Android Studio】安卓APP期末作品记录之连接sqlite数据库以及简单的sqlite增删改查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!