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

被折叠的 条评论
为什么被折叠?



