我用以下语句访问数据库,会报错误。我想是驱动没弄好,但不知道怎么弄,各位大哥帮帮忙。谢了。顺便帮忙看看url="jdbc:db2://GDB-TS/50000:edspdata"这句话有没有错误,我是访问远程的数据库。
import java.io.*;
import java.lang.*;
import java.util.*;
import java.sql.*;public class Testdb { public Testdb() {
}


public static void main(String[] args) {
   String url="jdbc:db2://GDB-TS/50000:edspdata";
   try {
   System.out.println("11");
   Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance(); (这句就出错了)
   System.out.println("22");
   Connection con = DriverManager.getConnection(url, "etlrunner", "gdb123"); 
   System.out.println("33");
   Statement stmt = con.createStatement(); 
ResultSet rs = stmt.executeQuery("SELECT distinct etbl FROM ctrl_time"); 
System.out.println("dning");
String s = rs.getString("etbl");
System.out.println(s);
   } catch(Exception e){
System.out.println("tt");
}

}

 }错误代码如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: SQLAllocEnv
        at COM.ibm.db2.jdbc.app.DB2Driver.SQLAllocEnv(Native Method)
        at COM.ibm.db2.jdbc.app.DB2Driver.<init>(Unknown Source)
        at COM.ibm.db2.jdbc.app.DB2Driver.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:140)
        at Testdb.main(Testdb.java:16)

解决方案 »

  1.   

    你使用的是DB2的app驱动,这个驱动实际上是一个jdbc类到本地DB2的客户端的桥梁。
    因此,如果你用这种方法连接DB2必须安装客户端程序。
    解决方法:
    1、使用app驱动,安装客户端
    2、使用net驱动,COM.ibm.db2.jdbc.net.DB2Driver
    当然,还要注意使用与服务器版本一致的jdbc驱动
      

  2.   

    相同的问题,在连接Oracle上也有,
    如果使用oci驱动,则需要安装ora客户端,
    如果使用纯java的jdbc就不用安装了。
    一般来说,使用jni方式通过客户端程序连接数据库速度要快一些。但不方便。
      

  3.   

    Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();是返回一个实例,需要有实例变量得到,如:
    Driver d = (Driver)Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();取得一个驱动。
    如果只是往JVM中加载驱动直接Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");就行了
    -----------
    String url="jdbc:db2://GDB-TS/50000:edspdata";
    URL有问题,正确的是String url="jdbc:db2://GDB-TS:50000/edspdata";