Search code examples
androidsqlitesynchronization

How To Sync SQLite From PC to Android


I have a simple SQLite database on my PC containing one table. I have the same SQLite database in my Android app. The data changes on the PC version of the database from time to time. How do I go about syncing the data from the SQLite database on the PC to the SQLite database on the Android device?


Solution

  • This is a simple solution with sockets:

    1. Server side :

      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();
        }
      
    2. Client side :

          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();