0

Android应用程序将在数据库服务器中显示外部数据库(Oracle)的数据。它只能与Web服务(RESTful)一起使用,因此我决定在Java/Java EE本身中开发Web服务。 我不想用PHP或其他一些technologies.Pls建议我继续这一点。如何从Android应用程序访问Oracle数据库。

+0

你看看SOAP? – Kris

+0

我对它进行了搜索。我发现只有RESTful支持Android,但SOAP纯粹是基于XML .Android无法获得XML格式的响应。 – Mukthi

回答

0

CouchDB现在非常流行,它与Android很好。 Watch this video.

Apache CouchDB是一个面向文档的数据库,可以使用JavaScript以MapReduce方式进行查询和索引。 CouchDB还提供双向冲突检测和解决的增量复制。

CouchDB提供了一个RESTful JSON API,它可以从任何允许HTTP请求的环境访问。有无数的第三方客户端库可以使您的编程语言更加轻松。

0
public class RestClient { 

    private ArrayList <NameValuePair> params; 
    private ArrayList <NameValuePair> headers; 

    private String url; 

    private int responseCode; 
    private String message; 

    private String response; 

    public String getResponse() { 
     return response; 
    } 

    public String getErrorMessage() { 
     return message; 
    } 

    public int getResponseCode() { 
     return responseCode; 
    } 

    public RestClient(String url) 
    { 
     this.url = url; 
     params = new ArrayList<NameValuePair>(); 
     headers = new ArrayList<NameValuePair>(); 
    } 

    public void AddParam(String name, String value) 
    { 
     params.add(new BasicNameValuePair(name, value)); 
    } 

    public void AddHeader(String name, String value) 
    { 
     headers.add(new BasicNameValuePair(name, value)); 
    } 

    public void Execute(RequestMethod method) throws Exception 
    { 
     switch(method) { 
      case GET: 
      { 
       //add parameters 
       String combinedParams = ""; 
       if(!params.isEmpty()){ 
        combinedParams += "?"; 
        for(NameValuePair p : params) 
        { 
         String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),”UTF-8″); 
         if(combinedParams.length() > 1) 
         { 
          combinedParams += "&" + paramString; 
         } 
         else 
         { 
          combinedParams += paramString; 
         } 
        } 
       } 

       HttpGet request = new HttpGet(url + combinedParams); 

       //add headers 
       for(NameValuePair h : headers) 
       { 
        request.addHeader(h.getName(), h.getValue()); 
       } 

       executeRequest(request, url); 
       break; 
      } 
      case POST: 
      { 
       HttpPost request = new HttpPost(url); 

       //add headers 
       for(NameValuePair h : headers) 
       { 
        request.addHeader(h.getName(), h.getValue()); 
       } 

       if(!params.isEmpty()){ 
        request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
       } 

       executeRequest(request, url); 
       break; 
      } 
     } 
    } 

    private void executeRequest(HttpUriRequest request, String url) 
    { 
     HttpClient client = new DefaultHttpClient(); 

     HttpResponse httpResponse; 

     try { 
      httpResponse = client.execute(request); 
      responseCode = httpResponse.getStatusLine().getStatusCode(); 
      message = httpResponse.getStatusLine().getReasonPhrase(); 

      HttpEntity entity = httpResponse.getEntity(); 

      if (entity != null) { 

       InputStream instream = entity.getContent(); 
       response = convertStreamToString(instream); 

       // Closing the input stream will trigger connection release 
       instream.close(); 
      } 

     } catch (ClientProtocolException e) { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      client.getConnectionManager().shutdown(); 
      e.printStackTrace(); 
     } 
    } 

    private static String convertStreamToString(InputStream is) { 

     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
     StringBuilder sb = new StringBuilder(); 

     String line = null; 
     try { 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return sb.toString(); 
    } 
} 
1

依赖于Web服务。它只是RESTful XML吗? JAX-WS? JSON?不管怎样,它应该像使用HTTP套接字调出并解析响应一样简单。

创建Web服务按照下面的链接

RESTful Web Services

使用使用了HTTPClient

public static String hitService(String host, int port, String path, String postBody) throws IOException { 
     HttpHost target = new HttpHost(host, port); 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet get = new HttpGet(path); 
     HttpEntity results = null; 
     try { 
      HttpResponse response=client.execute(target, get); 
      results = response.getEntity(); 
      return EntityUtils.toString(results); 
     } catch (Exception e) { 
      throw new RuntimeException("Web Service Failure"); 
     } finally { 
      if (results!=null) 
       try { 
        results.consumeContent(); 
       } catch (IOException e) { 
        // empty, Checked exception but don't care 
       } 
     } 
    } 

Android Cookbook example

+0

感谢您的回复。实际上,我在JSP,Servlet和Struts中有知识。现在我想设计一个Web服务,以便从Android应用程序访问数据库服务器中的Oracle数据库。我想知道如何开发Web服务。 – Mukthi

相关问题