数据库Day03

sql注入问题

sql存在漏洞,会被攻击导致数据泄漏,sql会被拼接or

user='' ' or '1=1''

password='' ' or '1=1''

10.5PreparedStatement对象

PreparedStatement可以防止sql注入,效率更高

10.9数据库连接池

数据库连接完毕--执行完毕--释放 

连接--释放十分浪费系统资源

池化技术:准备一些预先的资源,过来就连接预先准备好的

银行开门--业务员:等待--服务--

常用连接数 10个

最小连接数 10

最大连接数 15 业务最高承载上限

等待超时 100ms

编写连接池,实现一个接口 DataSoure

开源数据源实现

DBCP

C3P0

Durid:阿里巴巴

使用了这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了

C3P0:

配置:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!--
c3p0的缺省(默认)配置
如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource();"这样写就表示使用的是c3p0的缺省(默认)-->
    <default-config>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/school?useUnicode=true&amp;characterEncoding=utf8&amp;uesSSL=true&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </default-config>

    <!--如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");"这样写就表示使用的是name=MySQL -->
    <named-config name="MySQL">
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/school?useUnicode=true&amp;characterEncoding=utf8&amp;uesSSL=true&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </named-config>
</c3p0-config>

utils:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcUtils_C3P0 {
    private static ComboPooledDataSource dataSource=null;
    static {
        try{


            //创建数据源
            dataSource = new ComboPooledDataSource();//十分方便,只需要一个语句。


        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }



    //新建一个release的方法类来实现 释放连接资源 的功能
    public static void release(Connection conn, Statement st, ResultSet rs){
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (st!=null){
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

test:

import com.kuang.lesson05.utils.JdbcUtils_C3P0;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestC3P0 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs =null;


        try {
            conn= JdbcUtils_C3P0.getConnection();

            String sql="INSERT INTO grade(gradeid,gradename)VALUES(?,?)";
            st=conn.prepareStatement(sql);//预编译sql,先写sql,然后不执行
            //手动给参数赋值
            st.setInt(1,6);//第一个问号,插入值6
            st.setString(2,"大六");//第二个问号插入值
            //注意点: sql.Date   数据库用的   java.sql.Date()
            //        util.Date Java用的  new Date().getTime() 获得时间戳
//            st.setDate(5,new java.sql.Date(new Date().getTime()));
            //执行
            int i=st.executeUpdate();
            if (i>0){
                System.out.println("插入成功!");
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JdbcUtils_C3P0.release(conn,st,rs);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值