gpt4 book ai didi

android - 如何从 Android 设备下载 SQLite 数据库?

转载 作者:IT王子 更新时间:2023-10-29 06:21:40 25 4
gpt4 key购买 nike

在花几个小时试图解决这个问题之前,也许我可以利用某人的专业知识;是否可以在(网络)服务器上生成 SQLite 数据库并将其下载到 Android 设备然后使用它?

我需要同步数据,但完全创建数据库并将其作为二进制文件发送可能会快得多。

最佳答案

这是我的实现:

     private static boolean downloadDatabase(Context context) {
try {
// Log.d(TAG, "downloading database");
URL url = new URL("http://some-url.com/db/" + "db_name.s3db");
/* Open a connection to that URL. */
URLConnection ucon = url.openConnection();
/*
* Define InputStreams to read from the URLConnection.
*/
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
/*
* Read bytes to the Buffer until there is nothing more to read(-1).
*/
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}

/* Convert the Bytes read to a String. */
FileOutputStream fos = null;
// Select storage location
fos = context.openFileOutput("db_name.s3db", Context.MODE_PRIVATE);

fos.write(baf.toByteArray());
fos.close();
// Log.d(TAG, "downloaded");
} catch (IOException e) {
Log.e(TAG, "downloadDatabase Error: " , e);
return false;
} catch (NullPointerException e) {
Log.e(TAG, "downloadDatabase Error: " , e);
return false;
} catch (Exception e){
Log.e(TAG, "downloadDatabase Error: " , e);
return false;
}
return true;
}

这会将数据库下载到您的应用程序私有(private)存储中 see here

不要忘记您需要 list 中的互联网许可。

然后要从此文件中获取实际数据库,您可以这样做:

   /**
* Copies your database from your local downloaded database that is copied from the server
* into the just created empty database in the
* system folder, from where it can be accessed and handled.
* This is done by transfering bytestream.
* */
private void copyServerDatabase() {
// by calling this line an empty database will be created into the default system path
// of this app - we will then overwrite this with the database from the server
SQLiteDatabase db = getReadableDatabase();
db.close();


OutputStream os = null;
InputStream is = null;
try {
// Log.d(TAG, "Copying DB from server version into app");
is = mContext.openFileInput("db_name.s3db");
os = new FileOutputStream("/data/data/your.package.name/databases/"); // XXX change this

copyFile(os, is);
} catch (Exception e) {
Log.e(TAG, "Server Database was not found - did it download correctly?", e);
} finally {
try {
//Close the streams
if(os != null){
os.close();
}
if(is != null){
is.close();
}
} catch (IOException e) {
Log.e(TAG, "failed to close databases");
}
}
// Log.d(TAG, "Done Copying DB from server");
}




private void copyFile(OutputStream os, InputStream is) throws IOException {
byte[] buffer = new byte[1024];
int length;
while((length = is.read(buffer))>0){
os.write(buffer, 0, length);
}
os.flush();
}

关于android - 如何从 Android 设备下载 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162194/

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