Android通过jsp连接Oracle数据库 -- 实例
2011-11-17 20:39
537 查看
//首先写一个jsp后台服务连接到Oracle数据库的实例myOra1(此处只是测试,所以用system身份连接到该实例)
//然后再通过jsp把数据返回给Android手机客户端
//运行jsp代码之前必须导入Oracle数据库的jdbc驱动包(jar包),名字为:classes12.jar.这个包在Oracle的安装目录下可已
//找到,在浏览器中打开jsp网页前必须保证Tomcat已经正确启动。
//jsp取到的数据以xml格式展现在web页面中
//Oracle数据库中的表如下:
//jsp代码:
下图为jsp后台取出数据的结果:
//当jsp后台从Oracle数据库取到数据后就应该返回给Android,这样就实现了Android客户端间接获得Oracle中的数据
Android客户端代码:
1. main.xml(布局文件):
2. main.java(Activity):
3 . ContentHandler.java:
//最后在Manifest文件中还必须声明访问英特网的权限(如下图所示):
//下图为Android取到jsp后台xml格式的数据后返回给Android客户端
ok,我们在Android手机上可以看到远程数据库的数据。这个Demo就是Android通过jsp连接远程Oracle数据库。
//然后再通过jsp把数据返回给Android手机客户端
//运行jsp代码之前必须导入Oracle数据库的jdbc驱动包(jar包),名字为:classes12.jar.这个包在Oracle的安装目录下可已
//找到,在浏览器中打开jsp网页前必须保证Tomcat已经正确启动。
//jsp取到的数据以xml格式展现在web页面中
//Oracle数据库中的表如下:
//jsp代码:
<?xml version="1.0" encoding="utf-8"?> <%@ page import="java.util.*"%> <%@ page import="java.sql.*"%> <%@page contentType="text/html;charset=gb2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <% try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@10.88.5.117:1521:myOra1"; String user="system"; String password="manager"; Connection conn= DriverManager.getConnection(url,user,password); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from system.SAZHAOXUN"; ResultSet rs=stmt.executeQuery(sql); String strID; String strNAME; String strAGE; String strSEX; %> <INFO> <% while(rs.next()) { strID=rs.getString("ID"); strNAME=rs.getString("NAME"); strAGE=rs.getString("AGE"); strSEX=rs.getString("SEX"); %> <TONGXIN081> <ID><%=strID%></ID> <NAME><%=strNAME%></NAME> <AGE><%=strAGE%></AGE> <SEX><%=strSEX%></SEX> </TONGXIN081> <% } %> </INFO> <% if(rs!=null) { rs.close(); } if(stmt!=null) { stmt.close(); } if(conn!=null) { conn.close(); } } catch(Exception e) { e.printStackTrace(); } %>
下图为jsp后台取出数据的结果:
//当jsp后台从Oracle数据库取到数据后就应该返回给Android,这样就实现了Android客户端间接获得Oracle中的数据
Android客户端代码:
1. main.xml(布局文件):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取Oracle数据 " /> <TextView android:id="@+id/myText" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
2. main.java(Activity):
package com.AndroidLinkToJsp; import java.io.IOException; import java.io.StringReader; import javax.xml.parsers.SAXParserFactory; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import com.sazhaoxun.AndroidLinkToJsp.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class main extends Activity { private TextView myText; private Button myButton; //命名空间 // private static final String urlStr="http://10.88.5.225:8080/test/MyJsp.jsp"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myText = (TextView)findViewById(R.id.myText); myButton = (Button)findViewById(R.id.myButton); myButton.setOnClickListener(new showButton()); } class showButton implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("开始获得数据"); String uriAPI ="http://10.88.5.225:8080/test/MyJsp.jsp"; /*建立HTTP Get联机*/ HttpGet httpRequest = new HttpGet(uriAPI); try { /*发到HTTP request*/ HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest); /*若状态码为200 ok*/ if(httpResponse.getStatusLine().getStatusCode() == 200) { /*取叨并应?串*/ String strResult = EntityUtils.toString(httpResponse.getEntity()); /*?除?余?元*/ //strResult = eregi_replace("(\r\n|\r|\n|\n\r)","",strResult); try{ SAXParserFactory factory=SAXParserFactory.newInstance(); XMLReader reader=factory.newSAXParser().getXMLReader(); reader.setContentHandler(new ContentHandler()); reader.parse(new InputSource(new StringReader(strResult))); } catch (Exception e) { e.printStackTrace(); } System.out.println("成功获得数据"); myText.setText(strResult.toString()); } else { myText.setText("Error Response: "+httpResponse.getStatusLine().toString()); } } catch (ClientProtocolException e) { // mTextView1.setText(e.getMessage().toString()); e.printStackTrace(); } catch (IOException e) { // mTextView1.setText(e.getMessage().toString()); e.printStackTrace(); } catch (Exception e) { //mTextView1.setText(e.getMessage().toString()); e.printStackTrace(); } /** * 创建一个SAXParserFactory,再用这个工厂来创建一个XMLReader,以此来读取XML */ // SAXParserFactory factory = SAXParserFactory.newInstance(); // XMLReader reader = factory.newSAXParser().getXMLReader(); // // //为XMLReader设置内容处理器,MyContentHandler()为具体处理的类 // reader.setContentHandler(new ContentHandler()); // //开始解析文件 // reader.parse(new InputSource(new StringReader(strResult))); // } } }
3 . ContentHandler.java:
package com.AndroidLinkToJsp; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ContentHandler extends DefaultHandler{ String ID,NAME,AGE,SEX; String tagName; /** * 开始解析xml * @throws SAXException */ public void startDocument() throws SAXException{ System.out.println("--------begin--------"); } /** * 结束解析xml * @throws SAXException */ public void endDocument() throws SAXException{ System.out.println("--------end-----------"); } /** * 开始解析元素属性 * * @param namespaceURI 命名空间,防止命名重复 * @param localName 不带前缀的名字 * @param qName 带前缀的名字 * @param attr 代表标签里所有的属性 * @throws SAXException */ public void startElement(String namespaceURI, String localName, String qName, Attributes attr) throws SAXException{ //System.out.println("qName-------->"+qName);//调试用 tagName = localName;//把当前正在解析的无前缀的名字传给tagName if(localName.equals("TONGXIN081")){ for (int i = 0; i < attr.getLength(); i++) { System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));//得到第i个属性的名字和值 } } } /** * 结束元素解析 * * @param namespaceURI * @param localName * @param qName * @throws SAXException */ public void endElement(String namespaceURI, String localName, String qName) throws SAXException{ //在worker标签解析完之后,会打印出所有得到的数据 //tagName = ""; if(localName.equals("TONGXIN081")); this.printout(); } /** * 具体解析标签里的内容 * * @param ch 所有读取到的内容,都会放到char[]类型的数组里 * @param start 读取的内容是从char[]数组的哪一位开始 * @param length 从start开始,一共有多长的内容 * @throws SAXException */ public void characters(char[] ch, int start, int length) throws SAXException { if (tagName.equals("ID")) ID = new String(ch, start, length); else if (tagName.equals("NAME")) NAME = new String(ch, start, length); else if (tagName.equals("AGE")) AGE = new String(ch, start, length); else if (tagName.equals("SEX")) SEX = new String(ch, start, length); } private void printout() { System.out.print("ID: "); System.out.println(ID); System.out.print("NAME: "); System.out.println(NAME); System.out.print("AGE: "); System.out.println(AGE); System.out.print("SEX: "); System.out.println(SEX); System.out.println(); } }
//最后在Manifest文件中还必须声明访问英特网的权限(如下图所示):
//下图为Android取到jsp后台xml格式的数据后返回给Android客户端
ok,我们在Android手机上可以看到远程数据库的数据。这个Demo就是Android通过jsp连接远程Oracle数据库。
相关文章推荐
- 关于Android通过jsp连接Oracle数据库
- Android手机通过蓝牙连接佳博打印机的实例代码
- Netbean 中jsp连接oracle数据库JDBC实例
- 通过ASP.NET连接Oracle数据库实例教程
- 通过ASP.NET连接Oracle数据库实例教程
- JSP通过JDBC连接ORACLE数据库
- 通过JDBC操作ORACLE数据库实例详解(最常用操作)
- JSP通过JavaBean连接Sql Server数据库
- 修改SCAN IP后不能通过SCAN IP连接实例
- 通过JDBC连接Oracle数据库中的十大技巧
- windows通过ssh Client连接android手机
- java通过jdbc驱动连接hive操作实例
- 【转】Android通过JNI调用驱动程序(完全解析实例)
- C++ 通过ADO连接Oracle数据库
- java通过JDBC驱动连接操作hive实例
- Android通过JNI调用驱动程序(完全解析实例)
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- java连接oracle数据库简单实例
- Windows 7下通过Excel2007连接Oracle数据库并对表查询
- C#连接Oracle数据库的实例方法