JDBC

作者: 烦死这个昵称了 | 来源:发表于2019-05-20 20:27 被阅读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 语句来关闭

    相关文章

      网友评论

          本文标题:JDBC

          本文链接:https://www.haomeiwen.com/subject/lmhlzqtx.html