JDBC:数据库与java链接;知识回顾;笔记分享

一,JDBC概述

          JDBC(Java DataBase Connectivity,  Java数据库连接) ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成   

Sun公司、数据库厂商、程序员三方关系:

                SUN公司是规范制定者,制定了规范JDBC(连接数据库规范)

                DriverManager类   作用:管理各种不同的JDBC驱动

                Connection接口  

                Statement接口和PreparedStatement接口    

                ResultSet接口

                数据库厂商微软、甲骨文等分别提供实现JDBC接口的驱动jar包,程序员学习JDBC规范来应用这些jar包里的类。

二,JDBC访问数据库编码步骤

1:加载一个Driver驱动

2:创建数据库连接(Connection)

3:创建SQL命令发送器Statement

4:通过Statement发送SQL命令并得到结果

5:处理结果(select语句)

6:处理返回值

7:关闭数据库资源ResultSet  Statement  Connection

创建模块/项目 导入jar包

例:

 public Book SelectBookByid(String id) {
        Book book=new Book();
        Connection con=null;
        PreparedStatement ps=null;
        ResultSet resultSet=null;
        try{

        //1手动加载数据库驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.获得链接对象//jdbc表示链接数据库的技术。//mysal选择表示数据库语言
        String url="jdbc:mysql://127.0.0.1:3306/bookmanager?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
        String username="root";
        String password="root";
        con= DriverManager.getConnection(url,username,password);
        System.out.println(con);//con是null;
        //3编写sql命令:
        String sql="select * from book14 where bid=?";
        //4获得执行对象
        ps=con.prepareStatement(sql);
        ps.setString(1,id);
        //5执行命令,返回执行结果
         resultSet=ps.executeQuery();//executeQuery:用来执行查询语句
        //6处理返回值
        while (resultSet.next()){
            book.setbId(resultSet.getString(1));
            book.setbName(resultSet.getString(2));
            book.setStatus(resultSet.getInt(3));
            book.setLendDate(resultSet.getString(4));
            book.setLendCount(resultSet.getInt(5));
        }} catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try{
                if (resultSet != null) {
                    resultSet.close();
                }
                //7关闭链接资源
                if (ps!=null){
                    ps.close();
                }
                if (ps!=null){
                    con.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return book;

        }

三,总结及常见错误

1总结:

MySQL8中数据库连接的四个参数有两个发生了变化:

String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/mydb?
useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
或者String url = ".......serverTimezone=GMT%2B8";

错误1:

        Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc2.Driver

原因:没有添加jar包或者com.mysql.jdbc2.Driver路径错误

错误2:

        Exception in thread "main" java.sql.SQLException:

No suitable driver found for jbdc:mysql://127.0.0.1:3306/stumgr

原因:url错误

错误3:

        Exception in thread "main" java.sql.SQLException:

Access denied for user 'root'@'localhost' (using password: YES)

原因:用户名或者密码错误

错误4:

        Exception in thread "main" com.mysql.jdbc.exceptions

.jdbc4.MySQLIntegrityConstraintViolationException:Duplicate entry '90' for key 'PRIMARY'

原因:主键冲突

错误5:

               Public Key Retrieval is not allowed

原因:   如果用户使用 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥;可以在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥;但是需要注意的是 AllowPublicKeyRetrieval=True可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启
在jdbc连接添加上参数allowPublicKeyRetrieval=true即可,注意参数间用&

你可能感兴趣的:(数据库,MySql,Java笔记,数据库,java,开发语言)