一、介绍
1.定义
JDBC全称为java database connectovity,是sun公司制定的一个接口。在java.sql.*包下,该包中定义了一系列访问数据库和接口的类。JDBC有一套执行SQL语句的API,应用程序可以通过这套API关联到关系型数据库,并执行SQL语句。
二、JDBC的使用
1.安装使用
我使用的是IDEA,然后运行程序,还需要数据库的驱动包,我这里使用的mysql数据库,所以我下载的mysql的驱动包,下载官网链接在这 mysql官网
然后下载进行解压,添加mysql数据驱动,鼠标点右击src->Open Module Setting, libraries-> +
--->Java, 找到刚才解压的数据库驱动,进行添加(一般数据库的驱动时放在自己创的lib文件夹中,进行分类)
添加完成以后
三、代码实现与结果
数据库结构为:
创建表单,你就可以加如些数据,然后进行连接,进行实现
重点在这:
conn= DriverManager.getConnection(url,username,password); stmt=conn.createStatement(); rs=stmt.executeQuery(sql);
package ATraining.day1_JDBC;
import java.sql.*;
public class test1 {
public static void main(String[] args) throws SQLException {
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 通过DriverMananger获取数据库连接
String url="jdbc:mysql://127.0.0.1:3306/test";
String username="root";
String password="3491342";
conn= DriverManager.getConnection(url,username,password);
// 通过Connection对象获取Statement对象
stmt=conn.createStatement();
// 使用Statement执行SQL语句
String sql="select *from tel";
rs=stmt.executeQuery(sql);
// 操作ResultSet结果集
System.out.println(" id | name | contact ");
while (rs.next()){
// 通过列名获取指定指定字段的值
int id=rs.getInt("id");
// String id=rs.getString("id");
String name=rs.getString("name");
String contact=rs.getString("contact");
System.out.println(id+" "+name+" "+contact);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn!=null) conn.close();
}
}
}
四、总结
1.面试要点
HR:jdbc的执行步骤?
JDBC执行的六个步骤
注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
获取连接
Connection com =
DriverManager.getConnection("jdbc:mysql://10.16.158.90:3306/db1", "root", "123456");
获取连接的执行者
Statement stat = com.createStatement();
执行sql语句,并接收结果集
Statement stat = com.createStatement(); ResultSet rs = stat.executeQuery(sql);
处理结果
rs.getString("name")
释放资源
com.close() statement Connection
2.对JDBC进行封装
哪些可以封装?
1.先把公共的部门进行封装 - 减少重复代码 -提高代码的重用性
2.把可变部分作为动态参数传递 -提高代码的灵活性
封装类 JDBCUtil.java
public class JDBCUtil {
public static Connection connection = null;
public static PreparedStatement preparedStatement = null;
public static ResultSet resultSet = null;
public static boolean flag = false; //判定是查询方法还是更新操作,方便进行关闭ResultSet(update是不需要使用Result的)
//获取连接
public static Connection getConnection() throws SQLException, ClassNotFoundException {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// TODO 数据库url,用户名,用户密码
String url = "jdbc:mysql://localhost:3306/javaweb?serverTimezone=Asia/Shanghai&useSSL=false";
String user = "root";
String password = "349134207";
//2.获取数据库连接对象
connection = DriverManager.getConnection(url, user, password);
return connection;
}
//关闭资源
public static void close() {
try {
if (flag) {
resultSet.close();
}
preparedStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// TODO 修改,增加,删除
public static Integer update(String sql,Object[] params) throws SQLException, ClassNotFoundException {
connection = getConnection();
try {
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i + 1, params[i]);
}
//返回操作成功条数
int i = preparedStatement.executeUpdate();
return i;
}catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// TODO 查询
public static ResultSet select(String sql, Object[] params) throws SQLException, ClassNotFoundException {
flag = true;
connection = getConnection();
try {
preparedStatement = connection.prepareStatement(sql);
//预编译处理
for (int i = 0; i < params.length; i++) {
preparedStatement.setObject(i + 1, params[i]);
}
//返回结果集
resultSet = preparedStatement.executeQuery();
return resultSet;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// TODO 查询
public static ResultSet select(String sql) throws SQLException, ClassNotFoundException {
flag = true;
connection = getConnection();
try {
preparedStatement = connection.prepareStatement(sql);
//返回结果集
resultSet = preparedStatement.executeQuery();
return resultSet;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}