一、jdbc的简介
java是通过JDBC技术实现对各种数据库访问的,JDBC是java数据库连接(Java DataBase Connectivity)技术的简称,它充当了Java应用程序与各种不同数据库之间进行对话的媒介。
二、JDBC驱动
JDBC驱动由各个数据库厂商或第三方中间厂商提供,负责连接各种不同的数据库。
三、JDBC API介绍
JDBC API主要做三件事:与数据库建立连接,发送sql语句,处理结果
1.DriverManager类:装载驱动程序,并为创建新的数据库连接提供支持。
2.Connection接口:负责连接数据库并担任传送数据的任务。
3.Statement接口:由Connection产生,负责执行SQL语句。
4.ResultSet接口:负责保存和处理Staterment执行后所产生的查询结果
5.PreparedStatement接口:Statemet的子接口,也由Connection产生,同样负责执行SQL语句,与Statement接口相比,PreparedStatement接口具有高安全性、高性能、高可读性和高维护性的优点
四、JDBC的先后顺序与理解
1.驱动管理器根据连接的数据库是哪种类型选择合适的驱动进行安装
2.连接对象负责在数据库和Java程序之间建立桥梁,方便沟通
3.命令对象发送sql语句到数据库进行执行
4.如果执行的是查询语句,则由结果集将数据带回到Java程序中
如果执行的是增删改语句,返回一个int数字,代表受影响的行数
五、简述JDBC总体技术的步骤
1.加载驱动
2.建立连接
3.发送命令
4.处理结果
5.关闭资源
JDBC访问数据库的详细代码
测试类的代码如下图:
//查询学生的姓名、性别、出生日期
//1.创建对象
PreparedStatement st=null;
ResultSet res=null;
try {
//2.创建sql
String sql="select studentname,sex,borndate from student";
//3.获取连接对象再根据连接对象获取命令对象
st=BaseDao.getConn().prepareStatement(sql);
//4.执行sql
/*
* executeQuery:执行查询语句
* executeUpdate:执行增删改语句
*/
res=st.executeQuery();
//5.处理结果
System.out.println("姓名\t性别\t出生日期");
//next:判断结果集是否还有未访问展示的数据
while(res.next()){
System.out.println(res.getString("studentname")+"\t"+res.getString("sex")+"\t"+res.getString("borndate"));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
BaseDao.close(st, res);
}
使用一个BaseDao类作为写重复代码:
BaseDao类就是把重复的代码写进去,然后用的时候直接调用!这样更加方便,可以节省不少代码量
//定义数据库连接需要的各种参数
private static String driver="com.mysql.jdbc.Driver";//驱动
private static String url="jdbc:mysql://localhost:3306/myschool";//数据库连接字符串
private static String name="root";//数据库登录用户名
private static String pwd="1234";//数据库登录密码
//定义连接对象
static Connection conn=null;
//定义获取数据库连接的方法
public static Connection getConn(){
//判断连接是否存在
if (conn==null) {
try {
//加载驱动
Class.forName(driver);
//建立连接
conn=DriverManager.getConnection(url,name,pwd);
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return conn;
}
//释放资源的方法
public static void close(PreparedStatement ps,ResultSet res){
try {
if (res!=null) {
res.close();
}
if (ps!=null) {
ps.close();
}
if (conn!=null) {
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}