gpt4 book ai didi

android - 在android中创建数据库文件

转载 作者:搜寻专家 更新时间:2023-11-01 08:54:02 25 4
gpt4 key购买 nike

默认情况下,应用程序的数据库文件是在应用程序数据中创建的。是否可以在我们自己的路径中创建数据库文件,如“/mnt/sdcard/test.db”?

我正在通过扩展 SQLiteOpenhelper 创建数据库文件,但它是在应用数据位置创建的。我想在 sdcard 位置创建。我尝试使用“db.OpenorCreateDatabase(Path)”。它在该位置创建了一个 db 文件,当我试图读取该文件时它崩溃了。如何做到这一点?

最佳答案

如果您提供自定义 ContextClass 并且您在目标目录中具有写入权限,则可以将 SQLiteOpenHelper 与自定义路径一起使用(至少对于 android 2.2)。

public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 3;
.....

DatabaseHelper(final Context context, String databaseName)
{
super(new DatabaseContext(context), databaseName, null, DATABASE_VERSION);
}
}

这里是完成所有魔法的自定义 DatabaseContext 类

class DatabaseContext extends ContextWrapper {

private static final String DEBUG_CONTEXT = "DatabaseContext";

public DatabaseContext(Context base) {
super(base);
}

@Override
public File getDatabasePath(String name)
{
File sdcard = Environment.getExternalStorageDirectory();
String dbfile = sdcard.getAbsolutePath() + File.separator+ "databases" + File.separator + name;
if (!dbfile.endsWith(".db"))
{
dbfile += ".db" ;
}

File result = new File(dbfile);

if (!result.getParentFile().exists())
{
result.getParentFile().mkdirs();
}

if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN))
{
Log.w(DEBUG_CONTEXT,
"getDatabasePath(" + name + ") = " + result.getAbsolutePath());
}

return result;
}

@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory)
{
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
// SQLiteDatabase result = super.openOrCreateDatabase(name, mode, factory);
if (Log.isLoggable(DEBUG_CONTEXT, Log.WARN))
{
Log.w(DEBUG_CONTEXT,
"openOrCreateDatabase(" + name + ",,) = " + result.getPath());
}
return result;
}
}

关于android - 在android中创建数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520552/

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