JDBC

pretent 2012-12-25 10:24:55

直接贴代码了,估计大家看了都熟悉,可是..可是....还是看本帖最后一句话吧
public class DatabaseConnection {
/**
* 数据库连接驱动
*/
private static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
/**
* 数据库连接地址/数据库名称
*/
private static final String DBURL = "jdbc:mysql://localhost:3306/CarInWorld";
private static final String DBUSER = "root";
private static final String DBPASS = "mysqladmin";
/**
* 数据库连接
*/
private Connection conn = null;
public DatabaseConnection() {
try {
/**
* 加载数据库驱动程序
*/
Class.forName(DBDRIVER);
/**
* 取得数据库连接
*/
this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
} catch (SQLException e) {
e.printStackTrace();
}catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
从开始学JAVA到现在也有几年了,从写这代码到现在估计也有1.2年了,今个才知道原来
Class.forName(DRIVERNAME);这句话可以不写,也是可以取得数据库连接的,不知道有没有人和我一样的,现在才知道
...全文
269 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPF1024 2012-12-28
  • 打赏
  • 举报
回复
引用 1 楼 kiritor 的回复:
Class.forName在这里的作用是将驱动类加载到JVM中,实际上就是执行这个驱动类中的一段static静态块。 因为Class.forName后该类的静态块会被执行,所以这么写。 而实际上你直接将这个驱动类new对象实例化也可以达到这个效果。但这样不利于动态读取配置文件创建连接,因此一般都使用Class.forName的形式。 你这里不写这个也能执行可能是由于已经将这个类的……
有道理,既然存在就肯定有其存在的道理。
JPF1024 2012-12-28
  • 打赏
  • 举报
回复
引用 7 楼 xtfgy2012 的回复:
我想说,兄弟,你还太年轻了 哥告诉你一句话:在编程的时间里,存在就有其道理,千万不要以为代码少就是优化!!! 递归代码够简单明了,为什么有的人还要费劲巴拉的用迭代去实现,而且代码又长又难理解。
+1.
枫林语 2012-12-28
  • 打赏
  • 举报
回复
这个驱动在高版本的eclipse是会自动加载啊!!!
fx_xf 2012-12-28
  • 打赏
  • 举报
回复
Class.forName("com.mysql.jdbc.Driver")这个语句时,com.mysql.jdbc.Driver这个类被初始化了,那一定是在初始化中做了什么动作。
static {  
   try {  
        java.sql.DriverManager.registerDriver(new Driver());  
    } catch (SQLException E) {  
        throw new RuntimeException("Can't register driver!");  
   }  
}
执行的就是这个驱动类com.mysql.jdbc.Driver中的静态块.透过java.sql.DriverManager这个类的静态方法registerDriver这个方法注册JDBC驱动。使用new关键字时你得保证import了这个驱动类才行,而使用class.forName时你只要保证引用了驱动的jar包就行了。如果用new的话,当工程改变了数据库,你得修改.java文件和引入相应的驱动包。建议还是写上比较好。
mrliu0905 2012-12-28
  • 打赏
  • 举报
回复
我也是刚自学jdbc一点点。。注册个驱动不是有三种方法吗。。不一定用Class.forName();
xtfgy2012 2012-12-27
  • 打赏
  • 举报
回复
我想说,兄弟,你还太年轻了 哥告诉你一句话:在编程的时间里,存在就有其道理,千万不要以为代码少就是优化!!! 递归代码够简单明了,为什么有的人还要费劲巴拉的用迭代去实现,而且代码又长又难理解。
dxqrr 2012-12-27
  • 打赏
  • 举报
回复
LZ用的mysql么
forgetsam 2012-12-26
  • 打赏
  • 举报
回复
我只知道你现在还不知道这句话是干什么的。
安特矮油 2012-12-26
  • 打赏
  • 举报
回复
不管怎么说系统都需要加载驱动才能行,不管你以什么方式......
rockets311 2012-12-26
  • 打赏
  • 举报
回复
JDBC4.0新特性。。。
isbn888 2012-12-26
  • 打赏
  • 举报
回复
嗯,最好还是写上,较早版本的一些数据库可能就不支持自动给你加载驱动了
LCore 2012-12-25
  • 打赏
  • 举报
回复
Class.forName在这里的作用是将驱动类加载到JVM中,实际上就是执行这个驱动类中的一段static静态块。 因为Class.forName后该类的静态块会被执行,所以这么写。 而实际上你直接将这个驱动类new对象实例化也可以达到这个效果。但这样不利于动态读取配置文件创建连接,因此一般都使用Class.forName的形式。 你这里不写这个也能执行可能是由于已经将这个类的支持包加入到了系统的一个环境变量中,一般开发中还是建议写上这行代码,防止程序出错。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧