首页 > 开发 > JAVA > 正文

关于JDBC的连接深入了解

2016-04-19 12:13:19  来源:慕课网

问题1:
答:这个jar包的作用 :顾名思义 mysql连接器java 5.1.35本
问题2:为什么将mysql驱动包 添加到 classpath
编译器不是按照classpath指定的路径进行类查找的,那个参数是jvm虚拟机查找的路径 你需要在编译的时候指定类路径或者将这些包加入你的工程的lib目录中
问3:DriverManager类的作用
答: DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。 它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。 DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。

问题4 :连接数据库时为什么要
Class.forName("com.mysql.jdbc.Driver");
答: Class.forName(“”);的作用是要求JVM查找并加载指定的类,首先要明白,java里面任何class都要装载在虚拟机上才能运行,而静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了,而且以后不会再走这段静态代码了。
也就是说这句话的意思将Dirver这个装载到虚拟机上.(更详细的含义请搜java反射)
PS:在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}
既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
问5:Dirver 是属于mysql连接器jar包里面的还是java本身自带的
答: 本身自带的
PS:通过上例的Class.forName(String str)我们知道str这是一个路径。
问6: conn=DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/sql110",
"root","root");这句话的解释
答: 通过DriverManager的管理层来连接mysql数据库本地的(127.0.0.1)3306端口中的sql110t数据库,用户名为root 密码为root。
总结:引用csdn中onlymuxia的一段话
这样说吧,大明统治全国,成祖(你)要向广西下道圣旨,首先广西要归附大明(注册了,朝廷就有专门管地方政权的部门 DriverManager ,广西就成为了一个可用的服务器);其次大明要与广西取得联系,有关部门于是修了驿站(connection);当时没无线电这种方便快捷的载体,只能用马(Statement)传递圣旨,这马不是路边的,是驿站的;于是永乐帝(你)就可以下圣旨了
最后附一份简单的mysql数据库连接
import java.beans.Statement;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import com.mysql.jdbc.Driver;
import java.sql.ResultSet;
import java.sql.*;

public class jdbcDemo {
public static void main(String[] args) {

 Class  demo=null; java.sql.Statement st=null; ResultSet rs=null; Connection conn=null;try {    //加载驱动    demo=Class.forName("com.mysql.jdbc.Driver");

System.out.println("加载驱动成功");
//获取连接
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/student",
"root","root");
System.out.println("连接成功");
st=conn.createStatement();
rs=st.executeQuery("SELECT name,age FROM t_major "); 发送SQL语句到数据库中
System.out.println("发送成功");
while(rs.next()){
System.out.println(rs.getObject("name")
+"----");
System.out.println("读取成功2");
}

}catch(ClassNotFoundException ec){    System.out.println("ClassNotFoundException异常"            + "加载驱动失败");    ec.printStackTrace();}catch(SQLException esql){    System.out.println("SQLException异常"            + "连接失败");    esql.printStackTrace();}

catch (Exception e) {
System.out.println("未知的异常");
e.printStackTrace();
}

 finally{

//
try {
if(st!=null){
st.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
try {
if(conn!=null){
conn.close();
}
} catch (Exception e2) {
// TODO: handle exception
}
}
}
}