期末作品要求使用數(shù)據(jù)庫,我自己折騰了一會,又看了很多博主發(fā)的文章,終于成功了,特此記錄:使用SQLiteDatabase和SQLiteOpenHelper連接已有sqlite數(shù)據(jù)庫。
連接sqlite數(shù)據(jù)庫的四步
第一步,導(dǎo)入sqlite數(shù)據(jù)庫
因?yàn)槲乙呀?jīng)創(chuàng)建好了一個sqlite數(shù)據(jù)庫,所以第一步得將我的數(shù)據(jù)庫導(dǎo)入項(xiàng)目中
在app —> src —> main下創(chuàng)建assect文件夾,將自己的數(shù)據(jù)庫粘貼進(jìn)去,我的文件路徑如下圖所示:
第二步,將數(shù)據(jù)庫寫入到項(xiàng)目模擬手機(jī)中
創(chuàng)建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 {
//導(dǎo)入的sqlite數(shù)據(jù)庫文件名
private final String DB_NAME = "AsianGames.db";
private Context context;
//定義類的方法
public MyDatabaseHelper(Context context) {
this.context = context;
}
// 復(fù)制和加載區(qū)域數(shù)據(jù)庫中的數(shù)據(jù)
public String CopyDBFile() throws IOException {
// 在第一次運(yùn)行應(yīng)用程序時,加載數(shù)據(jù)庫到data/data/當(dāng)前包的名稱/database/數(shù)據(jù)庫名字
//獲取準(zhǔn)確的路徑,context.getPackageName()得到包名
File dir = new File("data/data/" + context.getPackageName() + "/databases");
//如果文件夾不存在,則創(chuàng)建指定的文件
if (!dir.exists() || !dir.isDirectory()) {
dir.mkdir();
}
//文件聲明
File file = new File(dir, DB_NAME);
//輸入流
InputStream inputStream = null;
//輸出流
OutputStream outputStream = null;
//若不存在,通過IO流的方式,將assets目錄下的數(shù)據(jù)庫文件,寫入到項(xiàng)目模擬手機(jī)中,當(dāng)開啟模擬器時,會將數(shù)據(jù)庫文件寫入到模擬手機(jī)的內(nèi)存中
if (!file.exists()) {
try {
//創(chuàng)建文件
file.createNewFile();
//加載文件
inputStream = context.getClass().getClassLoader().getResourceAsStream("assets/" + DB_NAME);
//輸出到文件
outputStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int len;
//按字節(jié)寫入
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//關(guān)閉資源
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
}
}
return file.getPath();
}
}
然后在需要用到數(shù)據(jù)庫之前,寫入以下代碼,我這里寫了個函數(shù),直接調(diào)用即可:
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);
成功之后可以在右側(cè)的Device File Explorer中的data —> data找到自己的項(xiàng)目,可以看到數(shù)據(jù)庫已經(jīng)被寫入模擬器中了
第三步,連接數(shù)據(jù)庫
創(chuàng)建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) {
}
}
第四步,使用數(shù)據(jù)庫進(jìn)行增刪改查
在這一步中,如果你調(diào)用數(shù)據(jù)庫的代碼是寫在一個專門的java文件中的話(比如我就寫在GetSQLite.java中),需要注意調(diào)用數(shù)據(jù)庫時是在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;
}
重點(diǎn)是這兩行代碼:
OpenHelper openHelper=new OpenHelper(context);
SQLiteDatabase db=openHelper.getReadableDatabase();
到這里sqlite數(shù)據(jù)庫的連接就已經(jīng)結(jié)束了
簡單的sqlite增刪改查
1、增、刪、改
我比較習(xí)慣自己寫sql語句,所以就沒有用它的增、刪、改函數(shù),我用的是:execSQL(String sql, Object[] bindArgs)
第一個參數(shù)是sql語句。
第二個參數(shù)是sql語句中占位符參數(shù)的值,參數(shù)值在數(shù)組中的順序要和占位符的位置對應(yīng),第二個參數(shù)可寫可不寫。文章來源:http://www.zghlxwxcb.cn/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不能執(zhí)行查詢語句,所以我們需要用到Cursor以及rawQuery
rawQuery(String sql, String[] selectionArgs)
第一個參數(shù)是sql語句。
第二個參數(shù)是sql語句中占位符參數(shù)的值,參數(shù)值在數(shù)組中的順序要和占位符的位置對應(yīng),第二個不需要的話可以寫null。文章來源地址http://www.zghlxwxcb.cn/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)
}
到了這里,關(guān)于【Android Studio】安卓APP期末作品記錄之連接sqlite數(shù)據(jù)庫以及簡單的sqlite增刪改查的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!