JDBC小白第一天

本文详细介绍JDBC的基本概念、核心功能及其实现步骤,包括数据库连接、执行SQL语句、处理结果集、管理事务等,并深入探讨了SQL注入攻击的防范措施及数据库连接池的高效使用。

JDBC的快速入门

概念

//概念
1.JDBC(java数据连接)是一种用于执行SQL语句的javaAPI,可以为多种关系型数据库 提供统一访问,它是由一组用Java语言编写的类和接口组成的。
//本质
2.其实就是java官方提供的一天规范(接口),用于帮助开发人员快速实现不同关系型数据库的连接.

在这里插入图片描述

入门小程序

//jdbc的快速入门程序 
   //导入jar包 
   //注册驱动 
   //获取数据库连接 
   //获取执行者对象 
   //执行sql语句并返回结果 
   //处理结果 
   //释放资源

public class JDBCDemo01 {
    public static void main(String[] args) throws Exception {
        //① 导入jar包
        // ② 注册驱动
        // Class.forName("com.mysql.jdbc.Driver");可以不用自己写 在com.mysql.jdbc.Driver类中存在静态代码块:在new;使用静态代码块时在加载子类shi父类被加载
        
        // ③ 获取数据库连接
        Connection con = DriverManager.getConnection("jdbc:mysql://192.168.23.129:3306/db14", "root", "root");//:jdbc:mysql://ip地址(域名):端口号/数据库名称 ,用户名,用户密码
        
        // ④ 获取执行者对象
        Statement stat = con.createStatement();
        
        // ⑤ 执行sql语句并返回结果
        String sql = "SELECT * FROM student";
        ResultSet re = stat.executeQuery(sql);
        
        // ⑥ 处理结果
        while (re.next()) {
            System.out.println(re.getInt("sid") + "\t" + re.getString("NAME") + "\t" + re.getString("age") + "\t" + re.getString("birthday"));
        }
        
        // ⑦ 释放资源
        re.close();
        stat.close();
        con.close();
    }
}

DriverManager

DriverManager驱动管理对象:注册驱动
    Class.forName("com.mysql.jdbc.Driver");
//在com.mysql.jdbc.Driver类中存在静态代码块,只要river类被调用就会执行静态代码块完成注册驱动
获取数据库连接 获取数据库连接对象:
    static Connection getConnection(String url, String user, String password); 
返回值:Connection 数据库连接对象 
    参数
url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称 user:用户名 password:密码
//举例
 Connection = DriverManager.getConnection(url, username, password);

Connection

 Connection数据库连接对象 
     ① 获取执行者对象 
     	获取普通执行者对象:Statement createStatement(); 
	    获取预编译执行者对象PreparedStatementprepareStatement(String sql); 
	② 管理事务 
        开启事务:setAutoCommit(booleanautoCommit);     参数为false,则开启事务。 
        提交事务:commit(); 
	    回滚事务:rollback(); 
	③ 释放资源 
        立即将数据库连接对象释放:void close();

SQL注入攻击

1. 什么是SQL注入攻击:
	就是利用sql语句的漏洞来对系统进行攻击
2. SQL注入攻击的原理:
    按照正常道理来说,我们在密码处输入的所有内容,都应该认为是密码的组成
    但是现在Statement对象在执行sql语句时,将密码的一部分内容当做查询条件来执行了
//实现方式就是拼接字符串在密码错误的情况下实现sql能够正常查询数据        
SELECT * FROM user WHERE loginname= '' or 1 = 1 -- AND password='" + password + "'
3.预编译SQL语句,以防止SQL注入问题
PrepareStatement ps = connection.prepareStatement("select * from student where id = ?");
ps.setInt(1, 22);   

JDBC管理事务

 管理事务的功能类:Connection 
     开启事务:setAutoCommit(booleanautoCommit);  参数为false,则开启事务。 
     提交事务:commit(); 
	回滚事务:rollback();

数据库连接池的概念

数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出, 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接, 而不是再重新建立一个。这项技术能明显提高对数据库操作的性能

在这里插入图片描述

开源数据库连接池的使用 : C3P0 , Druid

C3P0

C3P0 数据库连接池的使用步骤
//① 导入 jar 包。

//②  导入配置文件到src 目录下。
<c3p0-config>
  <!-- 使用默认的配置读取连接池对象 -->
  <default-config>
  	<!--  连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://192.168.23.129:3306/db14</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 连接池参数 -->
    <property name="initialPoolSize">5</property>			/*初始连接数量*/
    <property name="maxPoolSize">10</property>			 /*最大连接数量*/
    <property name="checkoutTimeout">3000</property>			/*等待时间*/
  </default-config>

  <named-config name="otherc3p0"> 
    <!--  连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/db15</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 连接池参数 -->
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">8</property>
    <property name="checkoutTimeout">1000</property>
  </named-config>
</c3p0-config>
        
//③ 创建 C3P0 连接池对象
//④ 获取数据库连接进行使用 
public class C3P0test {
    public static void main(String[] args) throws Exception {
        //1创建c3p0的数据库连接池对象
        DataSource dataSource = new ComboPooledDataSource();


        //2 通过连接池对象获取数据库连接
        Connection con = dataSource.getConnection();
        
        //3 执行操作
        String sql = "SELECT * FROM student";
        PreparedStatement prep = con.prepareStatement(sql);
        ResultSet re = prep.executeQuery();


        while (re.next()) {
            System.out.println(re.getInt("sid") + "\t" + re.getString("NAME") + "\t" + re.getInt("age") + "\t" + re.getDate("birthday"));
        }


        re.close();
        prep.close();
        con.close();
    }

}

Druid

Druid 数据库连接池的使用步骤
//① 导入 jar 包。 
//② 编写配置文件,放在src 目录下。 
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.23.129/db14
username=root
password=root
# 初始化数量
initialSize=5
# 最大配置数量
maxActive=10
# 最大等待时间
maxWait=3000
//③ 通过 Properties 集合加载配置文件。 
//④ 通过 Druid 连接池工厂类获取数据库连接池对象。
//⑤ 获取数据库连接进行使用。
public class Druid {
    public static void main(String[] args) throws Exception {
        //获取配置文件的流对象
        InputStream resourceAsStream = Druid.class.getClassLoader().getResourceAsStream("druid.properties");
        //1 通过Properties集合,加载配置文件
        Properties properties = new Properties();
        properties.load(resourceAsStream);//加载流对象

        //2 通过Druid连接池工厂类过去数据库连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        //3 通过连接池对象过去数据库连接进行使用

        Connection connection = dataSource.getConnection();
        String sql = ("SELECT * FROM student");
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        //4.执行sql语句,接收结果集
        ResultSet resultSet = preparedStatement.executeQuery();

        //5.处理结果集
        while (resultSet.next()) {
            System.out.println(resultSet.getInt("sid") + "\t" + resultSet.getString("name") + "\t" + resultSet.getInt("age") + "\t" + resultSet.getDate("birthday"));
        }
        //6.释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }


+ resultSet.getString("name") + "\t" + resultSet.getInt("age") + "\t" + resultSet.getDate("birthday"));
        }
        //6.释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值