Android通过jsp连接Oracle数据库 -- 实例

 

//首先写一个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数据库。

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值