如何将SQLite从PC同步到Android
我的电脑上有一个简单的SQLite数据库,其中包含一个表。我的Android应用程序中有相同的SQLite数据库。数据在个人电脑版本中随时会变化。我怎样才能将数据从PC上的SQLite数据库同步到Android设备上的SQLite数据库?预先感谢任何链接或示例。如何将SQLite从PC同步到Android
这是插座一个简单的解决方案:
-
服务器端:
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();
这将需要相当多的工作才能让它毫无问题地运行。下面是我该怎么走:
- 使用Android上的接收器来检测何时USB插入。当检测到这种情况时,将数据库文件复制到您选择的文件夹中的SD卡(比如/data/com.example.package/sync/db.sqlite)。
- 从您的PC上检测海量存储设备。扫描SD卡以检查是否在上面的路径中找到该文件。如果不是,则不需要同步。如果是的话,那么你需要执行一些数据库比较(谷歌的算法和取决于你的数据,你有不同的可能性在这里)
- 现在你应该有第三个数据库文件(PC和Android之间的同步结果数据库)。这个文件可以被复制到大容量存储器(你的SD卡)在与它相同的地方。
- 在Android上使用接收器来检测SDCard何时安装。当检测到这种情况时,只需将数据库文件从/data/com.example.package/sync/db.sqlite复制到您的应用程序包目录。
我们为音乐应用程序做了这个。这不是一项简单的任务,但我们设法使它工作得非常好。
我希望它可以完成,而无需与USB连接。另外,如果我将它复制到软件包目录中,并不是在android设备上放置数据库的未压缩版本?谢谢回复! – user1302684 2012-03-30 07:57:11
您也可以选择在您的应用程序中创建一个小型http服务器,该服务器将提供DB文件供下载到PC软件。你可以在数据库文件中做任何你想做的事情,如果你喜欢它之前你可以压缩和加密它(只需要更多的Java代码行) – 2012-03-30 10:08:53
因此经过大量的研究,我认为处理这个问题的最好方法是使用Android应用程序中的Java Socket和本地网络上PC上的Java Server Socket应用程序。每个字段中的两个数据库都将包含数据库版本ID。然后,我可以使用Java Socket将我的Android设备连接到PC上的Java应用程序ServerSocket。然后在PC上查询PC SQLite数据库以获取基于来自android SQLite数据库的数据库版本ID的新数据,并发送任何更新的结果。从那里我只是将这些结果插入到android端SQLite数据库。一个端口需要被转发到PC。 – user1302684 2012-03-31 07:57:22
嘿,伙计,我做的同样的事情,并卡住。如果您有解决方案,请在[email protected]提供我的解决方案。 – 2013-12-12 13:17:11