JDBC的操作步骤

什么是JDBC?

    JDBC全称是Java Database Connectivity(Java数据库连接),是Java连接数据库的标准和规范。

JDBC的操作步骤

        1.导入驱动包

                mysql-connector-java-8.0.22.jar

        2.加载驱动             

Class.forName("com.mysql.cj.jdbc.Driver");

        3.打开连接               

Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbc?serverTimezone=UTC", "root", "root");

        4.获取预处理器

PreparedStatement preparedStatement = connection.prepareStatement("select * from t_user where name = ?");

        5.设置参数

preparedStatement.setString(1, name);

        6.执行SQL    

ResultSet resultSet = preparedStatement.executeQuery();

        7.解析结果

 if(resultSet.next()){
                    //已存在
                               System.out.println("用户已存在,请重新注册");
                }else{
                    //不存在,插入数据
                    PreparedStatement preparedStatement1 = connection.prepareStatement("insert into t_user(name, pwd) values(?,?)");
                    preparedStatement1.setString(1,"name");
                    preparedStatement1.setString(2,"pwd");
                    preparedStatement1.executeUpdate();//executeUpdate执行更新
                    System.out.println("注册成功");
                }

        8.关闭连接

public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn) {
                try {
                    if (rs != null) {
                            rs.close();
                    }
                    if (pstmt != null) {
                            pstmt.close();
                    }
                    if (conn != null) {
                            conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

JDBC的操作步骤解析

        导入驱动包        

                mysql-connector-java-8.0.22.jar

        加载驱动                      

Class.forName("com.mysql.cj.jdbc.Driver");

        在这儿会碰到连接数据库的报错:
                JDBC中com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
                com.mysql.jdbc.Driver 是 mysql-connector-java 5及5之前的, 
                com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6及6之后的

 

Connection connection = DriverManager.getConnection("jdbc:mysql:///jdbc?serverTimezone=UTC", "root", "root");
        在这儿可能会碰到jdbc?serverTimezone=UTC带来的时区差问题,UTC代表的是全球标准时间 ,但是我们使用的时间是北京时区也就是东八区,领先UTC八个小时。
            //北京时间==东八区时间!=北京当地时间
            serverTimezone=GMT%2B8
            //或者使用上海时间
            serverTimezone=Asia/Shanghai

    获取预处理器   PreparedStatement preparedStatement = connection.prepareStatement("select * from t_user where name = ?");
              在这儿我们使用Statement对象来防止SQL注入,SQL注入问题之所以出现,是因为用户填写sql语句参与了编译
              目前我所认知中的处理方法是采用预编译的方式来做,将执行sql语句时封装起来,预防SQL注入
    
    设置参数   preparedStatement.setString(1, name);
        在这儿的1,表示上面的第几个?,
        name,则是?所表示的值
    
    执行SQL
        ResultSet resultSet = preparedStatement.executeQuery();
        在这儿我们使用的是executeQuery()方法,
        executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用,
        所以ResultSet resultSet = preparedStatement.executeQuery();
        executeQuery返回的是ResultSet结果集,通常是执行了select操作。
        此外还有:
            execute执行增删改查操作
                execute返回的结果是个boolean型,当返回的是true的时候,表明有ResultSet结果集,通常是执行了select操作,当返回的是false时,
                通常是执行了insert、update、delete等操作。execute通常用于执行不明确的sql语句。
            executeUpdate执行增删改操作
                executeUpdate返回的是int型,表明受影响的行数,通常是执行了insert、update、delete等操作。
        而我们这儿使用的executeQuery执行查询操作
            executeQuery返回的是ResultSet结果集,通常是执行了select操作。
    解析结果
        if(resultSet.next()){
                    //已存在
                               System.out.println("用户已存在,请重新注册");
                }else{
                    //不存在,插入数据
                    PreparedStatement preparedStatement1 = connection.prepareStatement("insert into t_user(name, pwd) values(?,?)");
                    preparedStatement1.setString(1,"name");
                    preparedStatement1.setString(2,"pwd");
                    preparedStatement1.executeUpdate();
                    System.out.println("注册成功");
                }
        在这儿的resultSet指针的初始位置位于第一行之前;第一次调用next()方法将会把第一行设置为当前行;第二次调用next()方法指针移动到第二行,以此类推。
        来判断我们执行的SQL是否查询到数据,
        如果没有查询到数据,我们就可以注册一个用户进去
    8.关闭连接
        public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn) {
                try {
                    if (rs != null) {
                            rs.close();
                    }
                    if (pstmt != null) {
                            pstmt.close();
                    }
                    if (conn != null) {
                            conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        如果存在ResultSet连接对象,则首先关闭
        如果存在PreparedStatement / Statement连接对象,关闭
        最后关闭Connection连接对象
        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值