JDBC

2019-05-20  本文已影响0人  烦死这个昵称了

通过 JDBC , Java 程序可以非常方便的操作各种主流数据库,这是 Java 的魅力所在

JDBC 介绍

JDBC 全称:Java Database Connectivity,即实现 Java 和数据库的连接,是一种可以执行 SQL 的 Java API
需要知道,JDBC 之所以能相同的 API 操作不同的数据库,是因为 API 只提供了接口,没有实现类,实现类由各个数据库厂商提供(即驱动程序),这样程序员使用 JDBC 时只要面向标准的 JDBC API 编程即可,不必担心不同的数据库会写不同的程序。
当需要切换数据库时,更换不同的实现类(即数据库驱动)即可,这是面向接口编程的典型应用

JDBC 的基本工作

  1. 与数据库建立连接
  2. 执行 SQL
  3. 获得 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 语句来关闭

上一篇下一篇

猜你喜欢

热点阅读