日期:2014-05-20  浏览次数:20807 次

关于JDBC驱动的简单问题
本人做练习的时候写了一个数据库连接类DBcon.java    
 
-----------------DBcon.java------------------    
为什么要将以下两步:    
 
  1.Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");    
  2.conn     =     DriverManager.getConnection( "jdbc:odbc:*** ", "sa ", "123 ");    
写到一个方法当中才能获得Connection的conn对象,    
如果写成    
public     void     A{    
          Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");    
}    
public     Connection     B{  
          conn     =     DriverManager.getConnection;
          return   conn;  
 
}
返回的conn为null    
 
---------------------end-----------------------    
对这段话也不是太理解:    
Class     类的实例表示正在运行的     Java     应用程序中的类和接口.    
forName(String     className):返回与带有给定字符串名的类或接口相关联的     Class     对象.其newInstance(),创建此     Class     对象所表示的类的一个新实例.    


------解决方案--------------------
如果像lz这么写,如果你先调用A方法,再调用B方法的话,反正应该不是null吧?如果你只调用B方法,这样sun.jdbc.odbc.JdbcOdbcDriver驱动根本没装载进来,自然会出错。
------解决方案--------------------
你的conn没有指向数据库地址和数据库,怎么能get到一个connection?
------解决方案--------------------
推荐这样写
public class DBConnection {
Connection conn=null;
//构造方法
public DBConnection() {
//调用创建连接方法
createconnection();
}
private void createconnection() {
try {
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
conn=DriverManager.getConnection( "jdbc:odbc:*** ");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
return conn;
}
}
------解决方案--------------------
是的上面的写法会比较好哦。
------解决方案--------------------
mark
------解决方案--------------------
1.Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver ");
2.conn=DriverManager.getConnection( "jdbc:odbc:*** ");
分开写应该没有问题,不过要保证你的程序先执行一下1,再执行一下2
------解决方案--------------------
写在一起和分开写,唯一可能的不同就是写在2个方法里的时候你没先执行forName装载驱动