JDBC详解

JDBC

1、什么是JDBC?

JDBC 全称是 java DataBase Connectivity,是java连接数据库的规范和 API。该规范中定义了一系列的接口,由数据库厂商根据自身数据库的特点提供实现类。开发者根据接口调用方法,就可以屏蔽不同数据库的差异。这样,无论连接和操作哪种数据库,都是一套API 。

2、什么是数据库驱动包?

驱动包是数据库厂商针对 JDBC 规范所写的实现类。连接不同数据库时,应该使用不同数据库厂商提供的驱动包。

3、JDBC开发流程:

1、建立连接

2、执行 SQL 语句,操作数据库数据

3、关闭连接

JDBC操作

1、建立连接

        //加载驱动
        Class.forName("com.mysql.jdbc.Driver");

        //建立连接 localhost表示连接数据库所在服务器的IP地址 12345为连接端口
        //mydb表示连接mysql 数据库的库名 characterEncoding=utf-8 设置编码号
        //root表示登录mysql 的用户名 1234表示登录mysql 的密码
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:12345
/mydb?characterEncoding=utf-8","root","1234");

2、执行 SQL 语句,操作数据库数据

        //执行SQL 语句
        PreparedStatement ps = con.prepareStatement("insert into t_link
(l_name,l_birthday,l_gender,l_phone)"+"values (?,?,?,?)");
            
        //填充占位符
        ps.setObject(1,linkObj.getName());
        ps.setObject(2,linkObj.getBirthday());
        ps.setObject(3,linkObj.getGender());
        ps.setObject(4,linkObj.getPhone());

        //更新数据库,将数据真正写入数据库
        //注意:除了执行查询语句增、删、改都需要更新数据库
        ps.executeUpdate();

3、关闭连接

        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null){
                ps.close();
            }
            if (con != null){
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

JDBC封装

通过封装父类,子类继承父类实现

具体代码:

public class BaseDao {
    //连接对象
    protected Connection con;
    //SQL 语句执行对象
    protected PreparedStatement ps;
    //结果集
    protected ResultSet rs;

    public void setConnection(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            this.con = DriverManager.getConnection("jdbc:mysql://localhost:12345/
mydb?characterEncoding=utf-8","root","1234");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }

    public void closeConnection(){
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null){
                ps.close();
            }
            if (con != null){
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

SQL注入

在JDBC 执行 SQL 语句时,如果以拼接字符串方式插入值,一旦值中有 SQL 语句的关键字,会导致 SQL 语句语法错误,或执行不正确的情况,这称为 SQL 注入攻击。

Statement 和 PreparedStatement 的区别

Statement 是 PreparedStatement 的父接口。Statement 执行 SQL 语句时,只能以拼接字符串方式插入值,效率低,而且容易引起 SQL 注入。

PreparedStatement 提供了占位符方式插入 SQL 语句的值。无论什么值,都要当字符串处理。不会引起 SQL 注入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值