如何从Android应用程序访问Oracle数据库。

Android应用程序将在数据库服务器中显示来自外部数据库(Oracle)的数据。只能使用Web服务(RESTful) ,因此我决定使用Java / Java EE本身开发Web服务。 我不想使用PHP或其他一些技术。请建议我继续这个。

取决于Web服务。 它只是RESTful XML吗? JAX-WS? JSON? 等等。它应该像使用HTTP套接字调用并解析响应一样简单。

要创建Web服务,请单击以下链接

RESTful Web服务

使用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示例

CouchDB现在非常流行,它适用于Android。 看这个video。

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

CouchDB提供的RESTful JSON API可以从允许HTTP请求的任何环境访问。 有无数的第三方客户端库可以使您选择的编程语言变得更加容易。

 public class RestClient { private ArrayList  params; private ArrayList  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(); headers = new ArrayList(); } 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(); } }