JDBC:IDEA连接MYSQL详解与优化

准备工作

首先去maven中央仓库中下载需要的jar包
在这里插入图片描述

然后把下载好的jar包放到我们项目中的lib文件夹下
在这里插入图片描述
然后添加依赖
v
在这里插入图片描述

核心代码

案例

Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://localhost:3306/mydb01";
        String userName="root"; //用户名
        String password="123456";  //密码
        Connection connection = DriverManager.getConnection(url, userName, password);//获取connect对象
        Statement statement = connection.createStatement();
        String sql1="select * from emp" ; //sql语句
        ResultSet resultSet = statement.executeQuery(sql1);//查询数据
        while (resultSet.next()){
            int eno = resultSet.getInt(1);
            String ename = resultSet.getString(2);
            System.out.println("eno:"+eno+" ename"+ename);
        }
        String sql3="update emp set comm=10 where comm is null" ;
        int raw = statement.executeUpdate(sql3);//删除、添加、修改数据
        System.out.println(raw);
        resultSet.close();
        statement.close();
        connection.close();

开发套路

(1)注册数据库驱动
(2)和数据库建立连接
(3)获取执行SQL语句的对象
(4)获取数据库返回的结果
(5)处理数据集(逻辑代码)
(6)释放资源,关闭连接

需要熟悉的几个类

Connection

通过配置文件可以创建一个connect对象、

Statement

通过connect对象获取操作数据库的Statement对象,
通过它来实现对数据库增删改查操作。
executeQuery():查,返回数据集
executeUpdate():增删改,返回int的数据,影响的行数

ResultSet

数据集,可以理解就是一个集合。
取出数据:
通过下标:从1开始
通过字段名:SQL语句中select后面跟的字段,有可能和数据库一样,也可能不一样(别名

企业优化

平时开发和项目上线之后使用的数据库是不一样的,不是同一个,这也就是我们说的,开发环境不一样
项目:开发环境 -》 测试环境 -》生产(正式)环境
数据库的三项要素是不是需要变化的?????
但是我们目前将这个“三要素”放.java,只要修改了,一定的编译。
也就是意味着 项目要上线:
测试环境-》修改配置 –》重新编译 –》生产环境

基于上面的问题????我们怎么解决????
测试环境-》修改配置 –》重新编译 –》生产环境
修改了XXX,不要编译呗,不放在.java文件就可以了。
我们将这些配置放到一个单独的文件中:配置文件(_ .xml/.properties_)

A(测试)
/opt/mysql/jdbc.properties
B(生产)
/opt/mysql/ jdbc.properties
往往创建一个properties文件,JAVA也有Properties类(Map),
作业:配置信息同配置文件中读取。

分层DAO
Data Access Object数据访问对象是一个面向对象的数据库接口
会建立一个包:dao,里面的类都是用来操作数据库的。

通常情况下,有几张表,就有一个DAO
命名上也有猫腻,自己体会、
分层Entity、bean、pojo
实体,也就是一个一个类,该类里面只有属性,和对应set.get方法
往往一个表一个实体,实体的属性和表的字段有没有关系,名字一般一样,类型相对应
使用逆向工程,通过表导出实体。
SQL注入的攻击
现象
SQL语句中拼接参数,但是你永远都不知道 精神有问题的用户到底会输入啥???
“select * from emp where empno=”+id
精神正常:123
变态:234567 or 1=1
死变态:234567 or 1=1;drop table user/t_user/t_account/account/t_number/number

        Properties properties =new Properties();//Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。
        BufferedInputStream bufferedInputStream =null;
        try {
            bufferedInputStream =
                    new BufferedInputStream(new FileInputStream("D:\\IDEAProject\\javaBase\\src\\jdbc\\jdbc.properties"));//输入输出流只能读绝对路径
            properties.load(bufferedInputStream);

            // 获取key对应的value值
            URL=properties.getProperty("jdbc.url");
            USERNAME=properties.getProperty("jdbc.userName");
            PASSWORD=properties.getProperty("jdbc.password");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                bufferedInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值