首页
登录 | 注册

通过Java JDBC 访问SAP IQ数据库的基本方法

   在编写Java应用时,我们使用jdbc访问数据库。对于SAP IQ数据库来说可以使用两种jdbc驱动访问它,一种是通过SAP Sybase jConnect Driver,另一种是iAnywhere (sqlanywhere) JDBC Drvier。前者是JDBC类型4驱动,即纯java实现,只需要jar包即可;而后者除了java包之外还需要安装IQ客户端软件。在这篇文章中结合java示例程序向大家介绍这两种驱动的基本使用方法。
一、jConnect Driver
    jConnect Driver可以访问SAP ASE和SAP IQ两种数据库,使用的driver class和driver url对于两种数据库是相同的。支持jdbc 3.0的java jar包名为jconn3.jar,支持jdbc 4.0的java jar包为jconn4.jar。
   Driver Class (jdbc 3.0):  com.sybase.jdbc3.jdbc.SybDriver   
   Driver Class (jdbc 4.0):  com.sybase.jdbc4.jdbc.SybDriver
   JDBC URL: jdbc:sybase:Tds:192.168.0.199:2638/iqdemo     #iqdemo是只数据库名

二、iAnywhere (sqlanywhere) JDBC Drvier
    iAnywhere (sqlanywhere) JDBC Drvier 在不同的IQ版本下驱动类和jdbc url会有不同,下面将详细说明:
1. IQ 16
   Driver Class (jdbc 4.0):  sybase.jdbc4.sqlanywhere.IDriver  
   JDBC URL: jdbc:sqlanywhere:eng=HAIQ-DB-01_iqdemo;links=tcpip(host=192.168.0.199;port=2638)
  
java jar包:$IQDIR16/java/sajdbc4.jar
 
  注意: IQ 16客户端只包含jdbc 4.0驱动,不再包含jdbc 3.0驱动。如果希望使用jdbc 3.0驱动的话,可以使用IQ 15.4客户端。
2. IQ 15.4
    Driver Class (jdbc 3.0):  sybase.jdbc.sqlanywhere.IDriver   
   
Driver Class (jdbc 4.0):  sybase.jdbc4.sqlanywhere.IDriver       #与IQ 16相同
 
   JDBC URL: jdbc:sqlanywhere:eng=HAIQ-DB-01_iqdemo;links=tcpip(host=192.168.0.199;port=2638)
   
java jar包(jdbc 3.0):$IQDIR15/java/sajdbc.jar
    
java jar包(jdbc 4.0)$IQDIR15/java/sajdbc4.jar
3. IQ 15.2
    Driver Class (jdbc 3.0):  
ianywhere.ml.jdbcodbc.jdbc3.IDriver
   
Driver Class (jdbc 4.0):  ianywhere.ml.jdbcodbc.jdbc4.IDriver      
 
   JDBC URL: jdbc:ianywhere:driver=SQL Anywhere 11;eng=HAIQ-DB-01_iqdemo;links=tcpip(host=192.168.0.199;port=2638)
    
java jar包(jdbc 3.0):$IQDIR15/java/jodbc.jar
   
java jar包(jdbc 4.0)$IQDIR15/java/jodbc4.jar

三、一个java程序示例
 

package net.db.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

/**
 * JDBC Sample.
 *
 * @author tigeriq123@163.com"> wangbing
 * @version CVS $Revision$ $Date$
 */
public class JDBCDemoIQ {

 // jConnect Driver
 //private static final String DRIVER = "com.sybase.jdbc3.jdbc.SybDriver";   //jdbc 3.0
 //private static final String DRIVER = "com.sybase.jdbc4.jdbc.SybDriver";   //jdbc 4.0
 //private static final String URL = "jdbc:sybase:Tds:192.168.0.199:2638/iqdemo";

 
 // iAnywhere Driver for sqlanywhere 12.0.1(IQ 15.4 Client) and sqlanywhere 16(IQ 16 Client)
 //private static final String DRIVER = "sybase.jdbc.sqlanywhere.IDriver";    //jdbc 3.0
 private static final String DRIVER = "sybase.jdbc4.sqlanywhere.IDriver";  //jdbc 4.0
 private static final String URL = "jdbc:sqlanywhere:eng=HAIQ-DB-01_iqdemo;links=tcpip(host=192.168.0.199;port=2638)";

 // iAnywhere Driver for sqlanywhere 11.0.1(IQ 15.2 Client)
 //private static final String DRIVER = "ianywhere.ml.jdbcodbc.jdbc3.IDriver";   //jdbc 3.0
 //private static final String DRIVER = "ianywhere.ml.jdbcodbc.jdbc4.IDriver";   //jdbc 3.0
 //private static final String URL = "jdbc:ianywhere:driver=SQL Anywhere 11;eng=HAIQ-DB-01_iqdemo;links=tcpip(host=192.168.0.199;port=2638)";

 public JDBCDemoIQ() {

 }

 
 public static void main(String[] args) {
  JDBCDemoIQ demo = new JDBCDemoIQ();
  try {
   demo.select();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void select() throws Exception {
  Connection con = this.getConnection(DRIVER, URL, "DBA", "sql");
  PreparedStatement pstmt = con
    .prepareStatement("select id, GivenName || Surname as name from Customers where Surname like 'A%'");
  ResultSet rs = pstmt.executeQuery();
  this.processResult(rs);
  this.closeConnection(con, pstmt);

 }

 private void processResult(ResultSet rs) throws Exception {
  if (rs.next()) {
   ResultSetMetaData rsmd = rs.getMetaData();
   int colNum = rsmd.getColumnCount();
   for (int i = 1; i <= colNum; i++) {
    if (i == 1) {
     System.out.print(rsmd.getColumnName(i));
    } else {
     System.out.print("\t" + rsmd.getColumnName(i));
    }

   }
   System.out.print("\n");
   System.out.println("-----------------------");
   do {
    for (int i = 1; i <= colNum; i++) {
     if (i == 1) {
      System.out.print(rs.getString(i));
     } else {
      System.out.print("\t"
        + (rs.getString(i) == null ? "null" : rs
          .getString(i).trim()));
     }

    }
    System.out.print("\n");
   } while (rs.next());
  } else {
   System.out.println("query not result.");
  }

 }

 private Connection getConnection(String driver, String url, String user,
   String password) throws Exception {
  Class.forName(driver);
  return DriverManager.getConnection(url, user, password);

 }

 private void closeConnection(Connection con, Statement stmt)
   throws Exception {
  if (stmt != null) {
   stmt.close();
  }
  if (con != null) {
   con.close();
  }
 }

}


相关文章

  •     在编写Java应用时,我们使用jdbc访问数据库.SAP HANA数据库也支持jdbc访问.HANA提供了标准的JDBC类型4驱动,即纯java实现的驱动.因此,只需要在client端部署jar包即可.这篇文章中将结合java示例程 ...
  • 使用ABAP(ADBC)和Java(JDBC)连接SAP HANA数据库
    Java实现类似: console打印结果:数据能够成功通过JDBC从HANA数据库读取出来. 要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
  • 在先前的博文中介绍了IQ中使用java语言编写标量udf和表udf例子.在这篇文章中将向大家介绍一个例子,通过这个例子说明IQ使用java udf访问hadoop的方法. 例子程序的功能说明:   * 在java udf函数中调用org.a ...
  • 在先前的博文中介绍了IQ中使用java语言编写标量udf的例子.本文将向大家介绍"表udf"的编写示例.表udf能够返回多条记录(结果集)或多个值.下面结合一个示例加以介绍. 1. 环境说明    * SAP IQ 16 ...
  •    SAP Sybase IQ支持如下基本账号登录安全控制机制:        * 用账户登录尝试次数        * 口令有效期        * 强制账户在下一次登录时修改密码        * 通过自定义函数灵活控制口令检查规则 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
苏ICP备12049786号-20