簡體   English   中英

在我的SQLite數據庫中插入大量XML數據

[英]Inserting a large amount of XML data in my SQLite database

我正在用Android開發一個與.NET Web服務通信以獲取數據的應用程序。
我已經獲得了XML格式的數據並進行了解析,但是無法將其插入到SQLite數據庫中。
數據量非常大,我對如何通過循環插入這么多數據感到困惑。
XML數據采用以下格式。

     <NewData>
              <Table>
              <First Name>Sangeeta</ First  Name>
              <Second Name>Rawat</Second Name>
              <Designation>Tester</Designation>
               .
               .
               .

              </Table>
    </New Data>

我的代碼是

       public static  void invokeHelloWorldWS(String webMethName,Context context) {
    String resTxt = null;
    mDbHelper = new TestAdapter(context);
    // Create request
    SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, webMethName);

    // Property which holds input parameters
    //PropertyInfo celsiusPI = new PropertyInfo();
    // Set Name
    ////celsiusPI.setName("name");
    // Set Value
    //celsiusPI.setValue(name);
    // Set dataType
    //celsiusPI.setType(String.class);
    // Add the property to request object
    //request.addProperty(celsiusPI);
    //request.addProperty("Content-Type", "text/xml; charset=utf-8");
    // Create envelope
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);

    envelope.dotNet = true;
    // Set output SOAP object
    envelope.setOutputSoapObject(request);
    // Create HTTP call object
    HttpTransportSE  androidHttpTransport = new HttpTransportSE (SOAP_ADDRESS);
    androidHttpTransport.debug = true;

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
    String xml = androidHttpTransport.responseDump;
     XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();

         xpp.setInput( new StringReader ( xml ) );
         Log.e("xml", "loaded");
         int eventType = xpp.getEventType();
         xpp.require(XmlPullParser.START_DOCUMENT, null, null);

         while (xpp.next() != XmlPullParser.END_TAG) {
             if (eventType == XmlPullParser.START_TAG) {
                Log.e(eventType+"", XmlPullParser.START_TAG+"");
                 continue;

             }
             String name = xpp.getName();
             Log.e("out", name);
             if (name.equals("CONS_REF")) {
                CONS_REF = readTitle(xpp);
                Log.e("CONS_REF", "i m here");
                Log.e("CONS_REF", CONS_REF);
             } else if (name.equals("BILL_MTH")) {
                BILL_MTH = readSummary(xpp);
                Log.e("BILL_MTH", "im here");
                Log.e("BILL_MTH", BILL_MTH);
             } else if (name.equals("NAME")) {

             } else {
                 Log.e("skip", "i m in skip");
                 skip(xpp);
             }


         }


    } catch (Exception e) {
        e.printStackTrace();
        //resTxt = "Error occured";
    } 


}


private static  String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, null, "CONS_REF");
    String title = readText(parser);
    parser.require(XmlPullParser.END_TAG, null, "CONS_REF");
    return title;
    }

       private static String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
    String result = "";
    if (parser.next() == XmlPullParser.TEXT) {
        result = parser.getText();
        parser.nextTag();
    }
    return result;

      }

      private static void skip(XmlPullParser parser) throws XmlPullParserException,   IOException {
    if (parser.getEventType() != XmlPullParser.START_TAG) {
       // throw new IllegalStateException();
        Log.e(parser.getEventType()+"",XmlPullParser.START_TAG+"          inside    skip" );
    }
    int depth = 1;
    while (depth != 0) {
        switch (parser.next()) {
        case XmlPullParser.END_TAG:
                depth--;
                break;
        case XmlPullParser.START_TAG:
                depth++;
                break;
         }
       }
    }


    private static String readSummary(XmlPullParser parser) throws IOException, XmlPullParserException {
    parser.require(XmlPullParser.START_TAG, null, "BILL_MTH");
    String summary = readText(parser);
    parser.require(XmlPullParser.END_TAG, null, "BILL_MTH");
    return summary;
}

}

你可以用兩種方式做到

  1. 與數據庫

    1. 壓縮二進制數據項。
    2. 作為Blob存儲在數據庫中。
    3. 檢索為blob,解壓縮(完全疼痛)並使用它
  2. 與文件(我建議更好的方法)

    1. 作為文本文件存儲,將其引用保存在數據庫中。

    2. 在訪問時讀取其參考,然后讀取文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM