技术开发 频道

Java-Jdbc结合构架网络数据库

  【IT168 技术】通过在JDBC中的论述,可以很容易地构架一个分布环境下的数据库应用模型。针对客户端远程调用对数据库操作的远程方法,具体实现途径可以采取多种策略。较好区别的两种手段分别是 "治标"或"治本"的。所谓"治标",是采取已有的JDBC的数据库的操作方法,将SQL语句的方法连接到该服务端的实现上,客户端发送SQL语句到服务进程,由服务进程进行查询,将结果包装为可以传递的远程对象返回给客户;而"治本"是指将JDBC API由本地方法重新定义为远程接口,然后给出所定义的JDBC API接口的所有实现,使之继承远程类,连接该类到服务程序指定的端口,客户端就可以仿照编写本地JDBC程序一样调用远程类的方法。处理数据查询的指令大多在客户端,这样的实现可以更活,相对也更简单(程序员可以不必要考虑数据的网络传输格式)。下面仅就第一种方式做一个简单的实例。

  1)定义一个远程接口:

import java.rmi.Remote;
import java.rmi.*;
/*
Jdbc结合构架网络数据库
*/
public interface request extends Remote {
String getresult(String sql)
throws RemoteException;
}

  在该接口中,将返回的客户可操作的数据确定为String类对象,这其实是在服务端将记录对象经过转换成网络可以传输的格式,因为记录集是一逻辑视图,不可以被序列化,若想在客户端直接使用记录集对象,则就需要重新定义所有的JDBC API接口为远程方法接口,其中所有的方法都南需要重新定义。

  2)实现上述远程接口的程序:

import java.rmi.server.UnicastRemoteObject;
import java.rmi.*;
import java.sql.*;
import java.net.*;
/*
实现远程接口的程序
*/
public class requestImpl extends UnicastRemoteObject
{
private String name;
private String queryresults;
public requestImpl(String s)throws RemoteException
{
super();
name
=s;
queryresults
="";
}
public String getresult(String sql)throws RemoteException
{
try{
Class.forName(
"sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
}
catch(Exception ex){
System.out.println(
"Can't find Databae driver class:"+ex);
return(null);
}
try{
String s
="";
Connection con
=DriverManager.getConnection("jdbc:odbc:example");
Statement stmt
=con.createStatement();
ResultSet rs
=stmt.executeQuery(sql);
int strlen=0;
while(rs.next()){
String sb
="";
int i=rs.getInt("number");
String s1
=rs.getString("name");
String s2
=rs.getString("nation");
boolean b=rs.getBoolean("sex");
if(b==true)
sb
="";
else
sb
="";
Date d
=rs.getDate("year");
String s3
=rs.getString("address");
String s4
=rs.getString("phone");
String text
=i+" "s1" "s2""sb""d""s3""+s4;
s
=s+text+"|";
}
queryresults
=s;
stmt.close();
con.close();
}
catch(SQLException ex){

System.out.println(
"SQLException:"+ex);
}
return(queryresults);
}
}
0