直接贴代码了,估计大家看了都熟悉,可是..可是....还是看本帖最后一句话吧
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);这句话可以不写,也是可以取得数据库连接的,不知道有没有人和我一样的,现在才知道
Class.forName在这里的作用是将驱动类加载到JVM中,实际上就是执行这个驱动类中的一段static静态块。
因为Class.forName后该类的静态块会被执行,所以这么写。而实际上你直接将这个驱动类new对象实例化也可以达到这个效果。但这样不利于动态读取配置文件创建连接,因此一般都使用Class.forName的形式。你这里不写这个也能执行可能是由于已经将这个类的支持包加入到了系统的一个环境变量中,一般开发中还是建议写上这行代码,防止程序出错。
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文件和引入相应的驱动包。建议还是写上比较好。