如何在Android手机上将SQLite数据库传输到Web服务器(android)

时间:2011-01-13 10:59:27

标签: android mysql sqlite

我在SQLiteDatabase中有“BackUpContacts.db”数据库,它有一个名为“ContactInfo”的表,列名为ContactId,ContactName,MobilePhone1,MobilePhone2,OfficePhone1,OfficePhone2,OfficePhone3,HomePhone1,HomePhone2和TokenId。

我想要的是将“ContactInfo”表的所有数据传输到某个服务器上的mysql数据库系统(意味着服务器还有一个类似于“ContactInfo”的表,其中将复制“ContactInfo”的所有数据)。

我想要的最后一件重要的事情是,每当我想获得(指定TokenId的)联系人时,我都可以将所有这些从服务器备份到xml文件中的移动设备。

简而言之,有人可以帮助我如何将sqlite数据库传输到Web服务器吗?

3 个答案:

答案 0 :(得分:2)

一种方法是使用GET或POST方法将数据提交到您网站的php页面,该方法会将其添加到远程应用程序服务器上的MySql,例如

    HttpGet request = new HttpGet(url); 
    ResponseHandler<String> responseHandler = new BasicResponseHandler();
    HttpClient client = new DefaultHttpClient();
    String response = client.execute(request, responseHandler);

网址可以是:www.mysite.com?id = 5&amp; name = john ... 这也必须是AsyncTask doInBackground请求... 问题是一次可以上传多少条记录......

很容易让远程应用程序服务器根据请求生成一个XML文件,由android下载,类似于上面的请求。

答案 1 :(得分:0)

这是一个如何从http://w3mentor.com/learn/java/android-development/android-http-services/example-of-multipart-post-using-android/上传XML文件的示例 其中data.xml文件和另外两个字段(“一”和“两”)上传到服务器。请注意,这将需要额外的jar库,您需要将其下载并放在与文件中“res”和“src”文件夹相同级别的“lib”文件夹中。 以下是您需要的三个jar文件:httpmime-4.0.jar,apache-mime4j-0.6.jar,commons-io-1.4.jar:

http://james.apache.org/download.cgi#Apache_Mime4J

https://repository.apache.org/content/repositories/releases/org/apache/httpcomponents/httpmime/4.0.1/httpmime-4.0.1.jar

http://code.google.com/p/mapmap/downloads/detail?name=commons-io-1.4.jar&can=2&q=

通过在Exclipse中选择项目并单击文件&gt;属性&gt; Java构建路径&gt;库,然后单击[添加罐子]

,将其添加到项目中
    import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Activity;
public class TestMultipartPost extends Activity
{
    public void executeMultipartPost()throws Exception
    {
        try {
            InputStream is = this.getAssets().open("data.xml");
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost("http://w3mentor.com/Upload.aspx");
            byte[] data = IOUtils.toByteArray(is);
            InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(data),"uploadedFile");
            StringBody sb1 = new StringBody("someTextGoesHere");
            StringBody sb2 = new StringBody("someTextGoesHere too");
            MultipartEntity multipartContent = new MultipartEntity();
            multipartContent.addPart("uploadedFile", isb);
            multipartContent.addPart("one", sb1);
            multipartContent.addPart("two", sb2);
            postRequest.setEntity(multipartContent);
            HttpResponse res = httpClient.execute(postRequest);
            res.getEntity().getContent().close();
        } catch (Throwable e)
        {
            // handle exception here
        }
    }
}

还有一件事,你需要在“后台”中运行它作为这样的异步任务:

    private class XmlUploadTask extends AsyncTask<Object, String, Boolean> {
    private static final String DEBUG_TAG = "XmlUploadTask";
    ProgressDialog pleaseWaitDialog;

    @Override
    protected void onCancelled() {
        Log.i(DEBUG_TAG, "onCancelled");
        pleaseWaitDialog.dismiss();
    }

    @Override
    protected void onPostExecute(Boolean result) {
        Log.i(DEBUG_TAG, "onPostExecute");
        pleaseWaitDialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
        pleaseWaitDialog = ProgressDialog.show(myActivity.this, "My Application", "Uploading data...", true, true);
        pleaseWaitDialog.setOnCancelListener(new OnCancelListener() {

            public void onCancel(DialogInterface dialog) {
                XmlUploadTask.this.cancel(true);
            }
        });
    }

    @Override
    protected Boolean doInBackground(Object... params) {
//here you enter the xml upload code above
         return null;
    }

}

答案 2 :(得分:0)

我在网上找到的另一种方法是如何将xml文件发送到Web服务器: 为此,您需要在项目中添加一个jar文件“commons-httpclient.jar”。 (ChristianB在上/下文中明确提到了如何添加jar文件)

您可以从http://www.java2s.com/Code/Jar/ABC/Downloadcommonshttpclientjar.htm下载此jar文件 2.code会......

    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
    import org.apache.commons.httpclient.methods.PostMethod;

    import java.io.File;
    import java.io.FileInputStream;

    class ClassName extends Activity
    {
         public void Sync(View v) // on button click
         {
            File xmlFile = new File("sdcard/contacts.xml");
            FileInputStream fis = new FileInputStream(xmlFile);
            InputStreamRequestEntity isre = new InputStreamRequestEntity(fis);

                /*now pass url of server in constructor of PostMethod*/
            PostMethod post = new PostMethod("http://w3mentor.com/Upload.aspx");
            post.setRequestEntity(isre);
            post.setRequestHeader("Content-Type", "text/xml");

            HttpClient httpclient = new HttpClient();
            int response = httpclient.executeMethod(post);
            String res = post.getResponseBodyAsString();
            Toast.makeText(GetContacts.this, new Integer(response).toString()+" "+res, Toast.LENGTH_LONG).show();
             post.releaseConnection();
         }
     }