Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,
这个API的常用方法:
DriverManager.registerDriver(new Driver());
DriverManager.getConnection(url,user,password);
注意:在实际开发中并不推荐采用registerDriver方法注册驱动,原因有二:
1.查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
2.程序依赖Mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
推荐方式:Class.forName("com.mysql.jdbc.Driver");
采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅需要一个字符串峭需要依赖具体的驱动,使程序的灵活性更高。
URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为: jdbc:mysql:// localhost:3306/test ?key=value
常用数据库URL地址的写法: Oracle写法:
mysql url: jdbc:mysql://localhost:3306/数据库名
oracle url: jdbc:oracle:thin:@localhost:1521:sid
jdbc:oracle:thin:@localhost:1521:sid
MySql—jdbc:mysql://localhost:3306/sid
Mysql的url地址的简写形式: jdbc:mysql:///sid
常用属性:useUnicode=true&characterEncoding=UTF-8
// 注册驱动
第一种:DriverManager.registerDriver(new Driver());
第二种 :Class.forName("com.mysql.jdbc.Driver");
使用第一种时,在com.mysql.jdbc.Driver类中有一段静态代码块:
sttic {
try {
java.sql.DriverManager.registerDriver(new Driver());
}
catch(SQLException ex){
throw new RuntimeException("Can't register driver");
}
}
上述代码的问题:
1,在驱动管理器中会装入两个mysql驱动。解决方案:使用反射
Class.forName("com.mysql.jdbc.Driver");
分析:使用反射的方式来加载驱动有什么好处?
a.只加载一次,装入一个驱动对象,
b.降低耦合,不依赖于驱动。
importjava.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.gjt.mm.mysql.Driver;
// 注册驱动
DriverManager.registerDriver(new Driver());
// 连接测试
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb1", "root", "root");
// 通过连接对象 创建操作sql语句对象 Statement
Statement st = conn.createStatement();
// 操作的sql语句
String t_sql = "select * from employee";
// 执行sql 返回 查询结果集 ResultSet;
java.sql.ResultSet rs = st.executeQuery(t_sql);
// 遍历结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println("流水编号:" + id + ", 姓名:" + name + " ,职位:" + gender
+ ";");
}
// 释放资源
rs.close();
st.close();
conn.close();