打印本文 打印本文  关闭窗口 关闭窗口  
用JDBC编写查询Access和FoxPro数据库
作者:佚名  文章来源:不详  点击数  更新时间:2008/5/9 19:02:06  文章录入:杜斌  责任编辑:杜斌

  用JDBC编写查询Access和FoxPro数据库

  ----JDBC(Java数据库连接:JavaDatabaseConnectivity)是用于执行SQL语句的Java应用程序接口(JavaApplicationProgrammingInterface:JavaAPI),它由一组用Java语言写的类与接口组成。JDBC是一种规范,其宗旨是让各数据库开发商为Java程序员提供标准的数据库访问类和接口。JDBC与Java结合,使用户可以很容易地把SQL语句传送到任何关系数据库中,程序员用它编写的数据库应用软件,可在各种数据库系统上运行。本文通过一个实例讨论用JDBC编写在中文Win95下访问Access(包括Access2.0,Access7.0)和FoxPro(包括FoxPro2.6,FoxBase2.1,dBase3.0,dBase4.0等)数据库的Java应用程序,从中体会JDBC在数据库应用上实现"一次编程,处处运行"的功能,

  安装JDBC

  ----JDBC类库已放入JDK1.1,若使用JDK1.1,则无须安装JDBC及下面的JDBC-ODBC;因目前JDK1.1暂不支持中文,固本文主要介绍使用JDK1.02时的JDBC访问数据库编程,此时需要安装JDBC,可通过访问下列地址获得JDBC软件包(目前已有JDBC1.2版,本文使用JDBC1.1):
  ----http://splash.javasoft.com/jdbc/

  ----得到JDBC软件(Windows的zip文件)包,用WinZip解压,生成目录JDBC,JDBC的所有内容都在这个目录中。

  ----为在编译Java程序时调用JDBC得SQL类库,应在autoexec.bat批处理文件中环境变量的:\jdbc\classes。

  建立数据库和设置数据源

  ----Access具备完善的数据库功能,可以作为独立的DBMS使用,是PC微机上开发客户/服务器型数据库应用的优秀工具;FoxPro(FoxBase、dBase)是国内PC微机用户常用的数据库软件,已用它建立了大量数据库挡案资料;讨论用JavaSQLAPI编写访问Access和FoxPro数据库的Java应用程序是十分有意义的。
  ----现在对概念已作了根本的修改:传统的(例如:dBase3.0、FoxBase、FoxPro2.6等)用于存贮数据的*.dbf文件不再被称为数据库而被称为表(table)。Access将若干个相关联的表(Table)组成一个数据库(.mdb),每一个表相当于通常(Foxbase,Foxpro,dBase)定义的一个数据库(.dbf);而对FoxPro(FoxBase、dBase),则将放在某个目录里的所有相关联的*.dbf文件看作一个相当于Access的*.mdb的数据库。在下面的例子里,我们要使用的数据库有两个表:table1与table2;

  table1
  编号软件名姓名通信地址电话
  1Access7.0赵一北京(01)623-2731
  2Access7.0钱二上海(21)443-6998
  3Access7.0孙三天津(22)578-8535
  4Access7.0李四长春(431)885-9854

  table2如下:SupplierIDSoftwareSupplierNameAddressPhoneNumber
  1Access7.0PiterFrance(33)687-9354
  2Access7.0JohnAmerica(1)675-4398
  3Access7.0TanakaJapen(81)854-3952
  4Access7.0HesaiMexico(52)257-5793

  ----如下建立数据库与数据源:

  ----1用Access7.0建立名为acs70db.mdb的数据库文件,其中建有上面两个表;将文件acs70db.mdb存盘到目录c:\datas\acs70中;数据源名为acs70db.mdb;

  ----2用Access2.0建立名为acs20db.mdb的数据库文件,其中建有上面两个表;将文件acs20db.mdb存盘到目录c:\datas\acs20中;注意此时表table1的字段名要改用英文;数据源名为acs20db.mdb;

  ----3用FoxPro2.6将上面两个表分别建为文件table.dbf与table2.dbf,并将这两个文件存盘到目录c:\datas\foxp26中;

  ----4用FoxBase2.1将上面两个表分别建为文件table.dbf与table2.dbf,并将这两个文件存盘到目录c:\datas\foxb21中;

  ----5用dBase3.0将上面两个表分别建为文件table.dbf与table2.dbf,并将这两个文件存盘到目录c:\datas\dbs3中;

  ----上列数据库制好后,打开Win95的"设置"菜单中的"控制面板?*从中启动微软的ODBC设置相应的ODBC驱动器和数据源(下面分别用axs70、acs20、foxp26、foxb21和dbs3作数据源名)。

  配置JDBC-ODBC驱动器

  ----ODBC(开放式数据库互连:OpenDatabaseConnectivity)是用C语言写的在多种不同的DBMS(数据库管理系统)中存取数据的标准应用程序接口;目前应用最广的是微软的ODBC,它几乎可将所有平台的所有数据库连接起来。ODBC在应用程序与特定数据库之间插入一个驱动程序管理器,每种数据库引擎都需要向驱动程序管理器注册它自己的ODBC驱动程序,驱动程序管理器将与ODBC兼容的SQL请求从应用程序传给ODBC驱动程序并由ODBC驱动程序把SQL请求翻译为对数据库的固有调用,从而达到应用程序访问操作数据库的目的。
  ----JDBC采用JDBC-ODBC桥接方式使Java应用程序使用ODBC。JDBC-ODBCBridge软件包可通过下列地址得到:

  ----http://splash.javasoft.com/jdbc/

  ----用WinZip解压后形成jdbc-odbc目录,目录中包括了所需内容,同时在autoexec.bat批处理文件中将?:\jdbc-odbc\classes"加进?etCLASSPATH?"中;将?:\jdbc-odbc\classes\sun\jdbc\odbc"加进?etPATH?"中**

  使用SQL
  ----SQL(结构化查询语言:)提供了一个查询不同数据源数据的标准方式,在1986年被采纳为工业标准,在1992年经全面调整后称为SQL92(或SQL2),目前SQL3正处于研制中。下面简要介绍SQL的主要命令及其意义:
  ----COMMIT:大多数关系数据库系统RDBMS以事务为处理单位,一个事务可包含多个动作。COMMIT命令指示数据库记录到当前点时执行的所有动作和重置事务;
  ----INSERT:指示数据库在表中插入行;
  ----DELETE:指示数据库在表中删除行;
  ----SELECT:指示数据库从表中返回行;
  ----UPDATA:指示数据库修改表中的行。

  编写访问数据源的Java应用程序
  ----很容易用JDBC编写访问、操作数据库的Java应用程序;应用程序一般作下面三件事:
  ----(1)加载JDBC-ODBCbridge驱动程序;

  ----(2)建立与数据库的连接、发送访问、操作数据库的SQL语句;

  ----(3)处理(2)对数据库访问、操作的结果。

  ----对此,可如下使用Class.forName方法显式加载驱动程序来完成(1):

  ----Class.forName("sun.jdbc.odbc.JdbsOdbcDriver");

  ----为使程序通用,编写一个方法(函数)来完成(2):

  ----staticResultSetcreatResultSet(Strings1,Strings2)

  ----该方法中的两个参数是字符串s1(数据源名)与s2(SQL语句),返回对数据源s1进行s2访问操作的结果;因此调用该方法即实现"与数据源s1连接并向其中进行s2的SQL查询并返回查询结果?*为完成**3),设计方法:

  ----staticvoidshowResultSet(ResultSetrs)

  ----该方法将查询结果rs在屏幕上显示出来。

  ----综上,我们在下面的源程序中调用方法creatResultSet(Strings1,Strings2)两次:一次查询FoxPro2.6数据库的表二,另一次查询Access7.0数据库的表一;并调用方法showResultSet(ResultSetrs)将结果显示:

  classtest{
  publicstaticvoidmain(Stringargs[]){
  try{
  //数据源与查询语句:
  Stringsjy1="acs70",sjy2="acs20",sjy3="foxp26",
  sjy4="foxb21",sjy5="dbs3";
  Stringsql1="SELECT*FROMtable1WHERE编号<5";
  Stringsql2="SELECT*FROMtable2WHERESupplierID<5";
  //加载(sun公司的)JDBC-ODBCbridge驱动程序:
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  //与数据源sjy*连接进行sql*查询,返回查询结果rs1:
  ResultSetrs1=creatResultSet(sjy3,sql2);
  ResultSetrs2=creatResultSet(sjy1,sql1);
  //显示查询结果:
  System.out.println("\n下面是您查询FoxPro2.6
  数据库的结果:");
  System.out.println("===================");
  showResultSet(rs1);
  System.out.println("====================");
  System.out.println("\n下面是您查询Access7.0数据库的结果:");
  System.out.println("===================");
  showResultSet(rs2);
  System.out.println("====================");

  //关闭对象:
  rs1.close();rs2.close();
  }
  catch(SQLExceptionex){
  System.out.println("\n***SQL异常!***\n");
  }
  catch(java.lang.Exceptionex){
  ex.printStackTrace();
  }
  }
  //与数据源s1连接并向其中进行s2的SQL
  查询并返回查询结果的方法:
  privatestaticResultSetcreatResultSet(Strings1,Strings2)
  throwsSQLException{
  //指定数据源:
  Stringdatasr=s1;//数据源名
  //建立与数据的连接:
  //与数据源datasr连接
  (因方法getConnection为静态的,故以类名调用):
  Connectioncon1=DriverManager.getConnection
  ("jdbc:odbc:"+datasr);
  System.out.println("\nOK!连接成功!");
  //发送SQL语句,对数据源进行操作:
  //要执行SQL查询语句,首先需创建Statement对象:
  Statementstmt1=con1.createStatement();
  //对数据源中的数据表tables在Statement对象上
  使用方法executeQuery执行一个查询语句:
  //该语句将在rs1中返回表中的所有行(记录):
  returnstmt1.executeQuery(s2);
  }

  privatestaticvoidshowResultSet(ResultSetrs)
  throwsSQLException{
  inti;
  Stringtmpstr;
  ResultSetMetaDatarsmd=rs.getMetaData();
  intnumCols=rsmd.getColumnCount();
  //
  for(i=1;i<=numCols;i++){
  if(i>1)System.out.print(",");
  System.out.print(rsmd.getColumnLabel(i));
  }
  System.out.println("");
  System.out.println("-------------------");
  //
  while(rs.next()){
  for(i=1;i<=numCols;i++){
  if(i>1)System.out.print(",");
  tmpstr=rs.getString(i);
  if(rs.wasNull())System.out.print("NULL");
  elseSystem.out.print(tmpstr);
  }
  System.out.println("");
  }
  }
  }

打印本文 打印本文  关闭窗口 关闭窗口