十、JDBC

本文介绍了JDBC的概念,展示了如何使用JDBC连接MySQL数据库,包括基本操作、PreparedStatement的使用以及防范SQL注入的方法。同时提到了数据库连接池的重要性,如DBCP、C3PO和Druid等开源解决方案。
摘要由CSDN通过智能技术生成

(一)、jdbc概念

java操作数据的驱动程序是这样的
在这里插入图片描述
有了jdbc后是这样的
在这里插入图片描述
由此可见,jdbc是为了简化开发人员对数据库的操作而产生的java操作数据库的规范。

JDBC连接mysql数据库的驱动点击这里

(二)、DBC使用案例

package JDBC.jdbcDemo;
import java.sql.*;

public class JDBCDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
    加载驱动
    Class.forName("com.mysql.jdbc.Driver");
	String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&cjaracterEncoding=utf-8&useSSL=true";
	String username = "root";
	String password = "root";
	// 使用url,username,password常见连接对象
	Connection connection = DriverManager.getConnection(url, username, password);
	
	// 创建sql执行对象
	Statement statement = connection.createStatement();
	String sql = "select * from student";
	执行sql返回结果集
	ResultSet resultSet = statement.executeQuery(sql);

	// 遍历得到结果
	while(resultSet.next()){
		System.out.println(resultSet.getObject("id"));
		System.out.println(resultSet.getObject("name"));
	}
	
	// 关闭资源(后使用的先关闭)
	resultSet.close();
	statement.close();
	connection.close();
    }
}

(三)、JDBC中常用方法

方法描述
statement.executeQuery();查询操作,返回查询结果集
statement.execute();可执行所有sql,但需要判断,效率比较低
statement.executeUpdate();执行更新、插入、删除操作,返回受影响的行数
resultSet.beForeFirst();将游标移到最前面
resultSet.afterLast();将游标移动到最后面
resultSet.next();将游标移动到下一行
resultSet.previous();将游标移动到前一行
resultSet.absolute();将游标移动到指定行

(四)、SQL注入

1、什么是SQL注入

一般登录时将用户输入的用户名和密码拼接成sql时这个样子:
select * from user where username = ‘1234’ and password = ‘qwer’
但是有人找到了漏洞,输入用户名和密码时这样输入
用户名:’ ’ or 1=1,密码:’ ’ or 1 = 1
使得字符串拼接成的sql语句为这样:
select * from user where username = ’ ’ or 1=1 and password = ’ ’ or 1 = 1;
这样也使得sql语句成立,从而查询出数据库的数据来。

2、防止SQL注入的方法

再使用jdbc时,sql语句执行对象使用PreparedStatement(预编译sql),且该对象的执行效率更高

		PreparedStatement preparedStatement = connection.prepareStatement(sql);//预编译sql,先写sql,虽然不执行
        preparedStatement.setInt(1,4);
        preparedStatement.setString(2,"hx");
        //执行
        preparedStatement.executeUpdate();

(五)、数据库连接池

频繁的对数据操作:连接、执行、释放 ,是十分消耗性能的
数据库连接池就是提前准备一些链接放在池子中,需要用时从连接池中去除连接,使用完毕后将连接放回连接池中,这样避免了重复连接和释放连接。
常见的开源数据库连接池有:DBCP、C3PO、Druid…

数据库连接池详解看这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值