如何将SQLite从PC同步到Android
我的电脑上有一个简单的SQLite数据库,其中包含一个表。我的Android应用程序中有相同的SQLite数据库。数据库PC版本上的数据会不时更改。如何将PC上的SQLite数据库的数据同步到Android设备上的SQLite数据库?提前感谢您提供的任何链接或示例 这需要相当多的工作才能让它顺利运行。以下是我的想法:如何将SQLite从PC同步到Android,android,sqlite,sync,pc,Android,Sqlite,Sync,Pc,我的电脑上有一个简单的SQLite数据库,其中包含一个表。我的Android应用程序中有相同的SQLite数据库。数据库PC版本上的数据会不时更改。如何将PC上的SQLite数据库的数据同步到Android设备上的SQLite数据库?提前感谢您提供的任何链接或示例 这需要相当多的工作才能让它顺利运行。以下是我的想法: 使用Android上的接收器检测USB何时插入。当检测到这种情况时,将数据库文件复制到您选择的文件夹(比如/data/com.example.package/sync/db.sq
- 使用Android上的接收器检测USB何时插入。当检测到这种情况时,将数据库文件复制到您选择的文件夹(比如/data/com.example.package/sync/db.sqlite)中的SD卡上
- 从PC检测大容量存储设备。扫描SD卡,检查是否在上面的路径中找到该文件。如果没有,则没有要同步的内容。如果是,那么您需要执行一些数据库比较(谷歌搜索算法,根据您的数据,您在这里有不同的可能性)
- 现在你应该有第三个数据库文件(PC和Android数据库同步的结果)。此文件可以复制到大容量存储器(SD卡)中,复制位置与文件拍摄位置相同
- 使用Android上的接收器检测SD卡何时安装。当检测到这种情况时,只需将数据库文件从/data/com.example.package/sync/db.sqlite复制到应用程序包目录
我们这样做是为了一个音乐应用程序。这不是一项简单的任务,但我们成功地让它工作得非常好。这是一个使用套接字的简单解决方案:
ServerSocket servsock = new ServerSocket(2004);
while (true) {
System.out.println("Waiting...");
Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
BufferedReader input = new BufferedReader(
new InputStreamReader(sock.getInputStream()));
String serverResponse = input.readLine();
// sendfile
File myFile = new File("C://XXXX/XXXX/XXXXX.db");
byte [] mybytearray = new byte [(int)myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
sock.close();
}
private String serverIpAddress = "xxx.xxx.xxx.xxx";
private static final int REDIRECTED_SERVERPORT = 2004;
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);
int filesize = 6022386;
int bytesRead;
int current = 0;
byte[] mybytearray = new byte[filesize];
InputStream is = socket.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(is));
FileOutputStream fos = new FileOutputStream(
"/data/data/XXXXX/databases/XXXXX.db");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray, 0, mybytearray.length);
current = bytesRead;
do {
bytesRead = is.read(mybytearray, current,
(mybytearray.length - current));
if (bytesRead >= 0)
current += bytesRead;
} while (bytesRead > -1);
bos.write(mybytearray, 0, current);
bos.flush();
bos.close();
socket.close();
我希望不用连接usb就能完成。另外,如果我将其复制到包目录,这不会在android设备上放置数据库的未压缩版本吗?谢谢你的回复!您还可以选择在应用程序中创建一个小型http服务器,该服务器将提供DB文件以下载到PC软件。你可以对DB文件做任何你想做的事情,如果你愿意,你可以在复制之前对它进行压缩和加密(只需再多几个Java代码行),所以经过大量研究后,我认为最好的处理方法是在android应用程序中使用Java套接字,在本地网络的PC上使用Java服务器套接字应用程序。每个字段中的两个数据库都将包含一个DB版本ID。然后,我可以使用Java套接字从我的android设备连接到电脑上的Java app ServerSocket。然后,从电脑上,我根据android SQLite DB中的DB版本ID查询电脑SQLite数据库中的较新数据,并将任何较新的结果发送回电脑。从那里,我只需将这些结果插入android端SQLite数据库。一个端口将需要转发到PC。嘿,伙计,我正在做同样的事情,并卡住了。如果您有解决方案,请也在manishshrm330@gmail.com.