Я создал базу данных SQLite с помощью phpLiteAdmin и переместил ее в папку ресурсов моего проекта Android Studio и использовал приведенный ниже код для перемещения базы данных на Android Виртуальную машину
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class DatabaseHelper extends SQLiteOpenHelper {
private static String DB_NAME = "myDb.db";
private static String DB_PATH = "";
private static final int DB_VERSION = 1;
private SQLiteDatabase myDatabase;
private final Context myContext;
private boolean needUpdate = false;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
if (android.os.Build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
this.myContext = context;
copyDataBase();
this.getReadableDatabase();
}
public void updateDataBase() throws IOException {
if (needUpdate) {
File dbFile = new File(DB_PATH + DB_NAME);
if (dbFile.exists())
dbFile.delete();
copyDataBase();
needUpdate = false;
}
}
private boolean checkDataBase() {
File dbFile = new File(DB_PATH + DB_NAME);
return dbFile.exists();
}
private void copyDataBase() {
if (!checkDataBase()) {
this.getReadableDatabase();
this.close();
try {
copyDBFile();
} catch (IOException mIOException) {
throw new Error("ErrorCopyingDataBase");
}
}
}
private void copyDBFile() throws IOException {
InputStream mInput = myContext.getAssets().open(DB_NAME);
OutputStream mOutput = new FileOutputStream(DB_PATH + DB_NAME);
byte[] mBuffer = new byte[1024];
int mLength;
while ((mLength = mInput.read(mBuffer)) > 0)
mOutput.write(mBuffer, 0, mLength);
mOutput.flush();
mOutput.close();
mInput.close();
}
public boolean openDataBase() throws SQLException {
myDatabase = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.CREATE_IF_NECESSARY);
return myDatabase != null;
}
@Override
public synchronized void close() {
if (myDatabase != null)
myDatabase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion)
needUpdate = true;
}
}
, поэтому когда я вставил несколько строк в одну из таблиц (я знаю, что они успешно вставлены, потому что я пробовал их с регистрацией и входом в систему), но когда я экспортировал базу данных из виртуальной машины android обратно в windows (который находится в /data/data/com.example.myProject/databases/myDb.db) и проверил с помощью phpLiteAdmin, ничего не изменилось, строки не были добавлены. Что мне не хватает? Где находится обновленная база данных?
Редактировать: Вот мой код вставки
public void createAccount(View view) {
try {
ContentValues values = new ContentValues();
values.put("username", txtUsername.getText().toString());
values.put("password", txtPassword.getText().toString());
values.put("phone", txtPhone.getText().toString());
values.put("role", "user");
if (myDb.insert("Users", null, values) > 0) {
Toast.makeText(this, "Registered successfully!\nNow you can login with your username and password", Toast.LENGTH_LONG).show();
}
// myDb.execSQL("INSERT INTO Users(username, password, phone, role) VALUES('" + txtUsername.getText().toString() + "','" + txtPassword.getText().toString() + "','" + txtPhone.getText().toString() + "','user')");
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}
}