JDBC
2019-05-20 本文已影响0人
烦死这个昵称了
通过 JDBC , Java 程序可以非常方便的操作各种主流数据库,这是 Java 的魅力所在
JDBC 介绍
JDBC 全称:Java Database Connectivity,即实现 Java 和数据库的连接,是一种可以执行 SQL 的 Java API
需要知道,JDBC 之所以能相同的 API 操作不同的数据库,是因为 API 只提供了接口,没有实现类,实现类由各个数据库厂商提供(即驱动程序),这样程序员使用 JDBC 时只要面向标准的 JDBC API 编程即可,不必担心不同的数据库会写不同的程序。
当需要切换数据库时,更换不同的实现类(即数据库驱动)即可,这是面向接口编程的典型应用
JDBC 的基本工作
- 与数据库建立连接
- 执行 SQL
- 获得 SQL 语句的执行结果
JDBC API
DriverManager 管理不同的驱动
Connection 连接数据库
Statement(PreparedStatement) 增删改查
CallableStatement 调用数据库中的存储过程/存储函数
ResultSet 返回结果集
步骤
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.blog.dao.IUserDao;
import com.blog.entity.User;
public class UserDaoImpl implements IUserDao{
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/blog?useSSL=false&serverTimezone=UTC";
String name = "root";
String pass = "root";
public User login(User user) {
Connection con = null;
PreparedStatement pst = null;
ResultSet resultSet = null;
User re = new User();
try {
//加载数据库驱动
Class.forName(driver);
//获取数据库连接
con = DriverManager.getConnection(url,name,pass);
//SQL预编译
String sql = "select uname,unname from user where uname = ? and upass = ?";
pst = con.prepareStatement(sql);
pst.setString(1, user.getUname());
pst.setString(2, user.getUpass());
resultSet = pst.executeQuery();
while (resultSet.next()) {
String name = resultSet.getString("uname");
String nname = resultSet.getString("unname");
re.setUname(name);
re.setUnname(nname);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("加载数据库驱动失败");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("数据库连接失败");
}finally {
try {
if (resultSet != null) resultSet.close();
if (pst != null) pst.close();
if (con != null) con.close();
} catch (Exception e2) {
// TODO: handle exception
System.out.println("resultSet关闭失败");
}
}
return re;
}
}
注意 :Java7 改写了 Connection 、PreparedStatement 、ResultSet 接口,它们的关闭会由AutoCloseable 接口实现,因此可以交由 try 语句来关闭