您的位置:首页 > 数据库 > Oracle

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代码:
<?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数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: