JDBC(二)—JDBC的基本使用(参考动力节点杜老师jdbc视频)

背景

前一阵子,项目里的一些对目标数据库的操作都是用JDBC写的,这阵子想总结下,跟着B站上杜老师的视频看了一遍,觉得很多不曾想清楚的东西都都豁然开朗,写此博客的目的一方面是为了记录下来,毕竟很多东西过一阵就忘了,另一方面也算是给杜老师打个广告,毕竟也算是收到了他的教导,但是我还是建议新手先大概看一遍就可以了,笔记做好就可以了,后面遇到了可以回头再看,不要看的太细,因为东西太多,刚开始会用就可以了,毕竟很多东西都必须是你能在项目里的某个场景用到,你才会有深刻的印象,而我也是现在项目是踩了一些坑,知道很多痛点,才有返回来看看。

步骤

第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
第二步:获取连接(表示jvm的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行sql语句(DQL DML. . …)
第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)
第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,)

实际操作

第一步:导入jar包,我在这里用的是springboot,所以直接导入就可以了,具体的导入需要根据你是用的环境来决定
第二步:配置数据库的连接信息,这一步有很多种选择,视频里的两种,第一种直接在代码里写死

Class.forName("com.mysql.jdbc.Driver");//注册驱动新方法(常用):参数为字符串,
connection =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/yhsql","root","root");

第二种是写在配置文件里
在这里插入图片描述
但是我在项目里是很少用这两种的,目前的项目如果在dao层,大部分都用的是orm类型的框架,如mybatis之类的,如果是用到jdbc,那么就说明这个数据库的连接信息是未知的,或者说是动态的,所以我本人遇到的基本都是在数据库建张表来存储这些连接信息,或者是第三方的接口传递过来的连接信息,所以取决于你是学习还是需要在项目中使用。
假如说你使用了.properties后缀的配置文件,那么也有很多种方法获取

     Properties properties = new Properties();
        //可以
       // properties.load(new FileReader("src/main/resources/JDBC.properties"));
        //可以
        properties.load(new FileReader("src/main/resources/JDBC.properties"));
        String driver1 = properties.getProperty("driver");
        String user1 = properties.getProperty("user");
        String password1 = properties.getProperty("password");
        String url1 = properties.getProperty("url");

        /**
         * 可以直接获取resource目录下后缀为 .properties文件的内容,直接通过名字就可以,不用加后缀
         */
        ResourceBundle bundle = ResourceBundle.getBundle("JDBC");
        String driver = bundle.getString("driver");
        String user = bundle.getString("user");
        String password = bundle.getString("password") ;
        String url = bundle.getString("url");

第三四步:获取到sql的执行对象
第一种


 Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbc","root","root");
            statement = connection.createStatement();
            String sql2 = ("select * from t_user where LoginName = '"+loginName+"' and LoginPasswd = '"+loginPasswd+"' ");
            resultSet = statement.executeQuery(sql2);

第二种

    Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbc","root","root");
            String sql2 = ("select * from t_user where LoginName = ? and LoginPasswd = ? ");
            prepareStatement = connection.prepareStatement(sql2);//此处(sql2)已经(不经过DBMS)预
            prepareStatement.setString(1,loginName);//第一个占位符下标1,放昵称
            prepareStatement.setString(2,loginPasswd);//第二个占位符下标2,放密码
            resultSet = prepareStatement.executeQuery();

日常情况下基本都是使用第二种,第一种会带有sql注入的风险,具体的原因会在下一节讲,新手的话,暂时没什么必要关注。
第五步:处理查询结果集
首先只有是是查询的方法才能返回结果集ResultSet,如果你是用的executeUpdate获取execute,那么要么不返回,要么返回的是int类型的数据,代表的是影响的行数。

在这里插入图片描述
这张图老师画的原图,光标最开始的时候指向第一条数据的前一个位置,resultSet.next()代表光标向后走了一位,如果这行有数据就返回true,没有数据就返回false,如果是true,这里进入while循环,进行获取数据,这里可以通过列名来获取,也可以通过下标来获取,在JDBC里面无论是传参数还是获取返回结果,下标都是从1开始。

  while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String user = resultSet.getString("LoginName");
                String passwd = resultSet.getString("LoginPasswd");
                String RealName = resultSet.getString("RealName");
            }

第六步:关闭连接
基本准则:最后连接的,最先关闭,关闭的时候各自处理各自的异常,避免前面的出现异常,导致后面的连接无法关闭,并且整体写在finally里

finally{
            try{
                if(resultSet != null)
                    resultSet.close();
            }catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try{
                if(prepareStatement != null)
                    prepareStatement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try{
                if(connection != null)
                    connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

想法

新手首先要会用,然后再去思考背后的问题,切勿想的太深。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值