gpt4 book ai didi

Android:SQLite 数据库不在内存中

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:14 26 4
gpt4 key购买 nike

我正在编写一个在运行时创建和填充 SQLite 数据库的 Android 应用程序。在类似的应用程序中,数据库会自动创建在“/data/data//databases/”目录中。然而,这一次并没有发生。我已经通过 adb shell 进入“/data/data/”,但是没有/databases/目录,更不用说里面的数据库了。但是,我知道我的数据库正在创建和填充,因为我打印了前十个条目以进行检查。它还能存放在哪里?我有 WRITE_EXTERNAL_STORAGE 权限,我的代码没有给出任何错误。

如果有帮助,这是我的数据库助手类(相关部分):

public class DatabaseHelper extends SQLiteOpenHelper {

private static final int VERSION = 1;

private static int colNum;
private static String dbName, tableName, filePath;
private static String[] cols;
private final Context myContext;

public DatabaseHelper(Context context) {
super(context, dbName, null, VERSION);
this.myContext = context;
}


// Creating Tables
@Override
public void onCreate(SQLiteDatabase db) {

FileReader fr = null;
try {
File dbFile = new File(filePath);
fr = new FileReader(dbFile);
} catch (IOException e) {
e.printStackTrace();
}

BufferedReader buffer;
buffer = new BufferedReader(fr);
String line = "";
String firstLine;

try {
firstLine = buffer.readLine();
cols = firstLine.split(","); // get name of columns from header (first row of .csv)
colNum = cols.length; // number of columns in each row of the file
} catch (IOException e) {
e.printStackTrace();
}

String table_col = getTableCols(colNum, cols);

db.execSQL("DROP TABLE IF EXISTS " + tableName + ";");
String create = "CREATE TABLE " + tableName + table_col;
db.execSQL(create);

populateDB(db, buffer, line);
}

public void populateDB(SQLiteDatabase db, BufferedReader buffer, String line) {

db.beginTransaction();
try {
while ((line = buffer.readLine()) != null) {
String[] row = line.split(",");
ContentValues cv = new ContentValues();
for (int i = 0; i < colNum; i++) {
cv.put(cols[i], row[i].trim());
}
db.insert(tableName, null, cv);
}
} catch (IOException e) {
e.printStackTrace();
}
db.setTransactionSuccessful();
db.endTransaction();
}

public String getTableCols(Integer num, String[] cols) {
String table_col = "(";
for (int i = 0; i < (num - 1); i++) {
table_col += (cols[i] + " text, ");
}
table_col += cols[num - 1] + " text)";
return table_col;
}

// Upgrading database
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//Drop older table if existed
db.execSQL("DROP TABLE IF EXISTS " + tableName + ";");
//Create tables again
onCreate(db);
}


}

最佳答案

数据库是在应用程序特定数据目录下的 databases 中创建的。在许多但不是所有固件上,数据目录是 /data/data/your.package.name 所以数据库位置是 /data/data/your.package.name/databases/.

应用程序数据目录受文件系统权限保护。你不能访问它,除非你有 root 或者你正在使用你的包的 uid 运行。

关于Android:SQLite 数据库不在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com