概念
Java DataBase Connectivity——java数据库连接。是官方sun公司定义的一套操作所有关系型数据库的规则,即接口。不同的数据库厂商实现这套接口,提供驱动jar包。我们可以使用这套接口jdbc编程,实际执行的是jar包中的实现类。
快速入门
步骤:
- 导入jar包
- 注册驱动
- 获取数据库连接对象 Connection
- 定义sql语句
- 获取执行sql对象 Statement
- 执行sql,接收返回结果
- 处理结果
- 释放资源
public class Demo03JDBC {
public static void main(String[] args) {
Statement stmt = null;
Connection conn = null;
try {
// 1. 注册驱动(mysql5之后之后的驱动jar包可以省略注册驱动步骤)
Class.forName("com.mysql.jdbc.Driver");
// 2. 获取连接对象
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbtest","root","123456");
// 3. 定义sql
String sql = "update account set name = 'zhangsan' where id = 1";
// 4. 获取执行sql对象
stmt = conn.createStatement();
// 5. 执行sql 如果执行成功返回1,执行失败返回0
int count = stmt.executeUpdate(sql);
// 6. 处理结果
System.out.println(count);
if (count>0){
System.out.println("修改成功");
}else {
System.out.println("修改失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
// 释放资源
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
SQL注入
这里有个sql注入的问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题。
用户名随便输入,输入密码:a’ or ‘a’ ='a
select * from user where username='ghesofaghoa' and password = 'a' or 'a' = 'a';
解决sql问题:引入PreparedStatement
在定义sql的时候,参数使用?作为占位符。
select * from user where username=? and password = ?;
在第五步获取执行sql对象的时候
PreparedStatement pstmt = null;
pstmt = conn.createStatement();
// 如何给?赋值
// setXXX(参数1,参数2) 参数1为?位置编号,参数2为?的值
pstmt.setString(1, 'ghesofaghoa')
pstmt.setString(2, 'hahahahha')
JDBC工具类
如果每次查询都要注册驱动、获取连接对象、最后都要释放资源,代码是冗余的。因此抽取出一个方法来,简化书写,去除重复工作量。
通过配置文件jdbc.properties,可以保证工具的使用
代码实现:
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static{
//读取资源文件,获取值
try {
//1. 创建Properties集合类。
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath(); // 字符串路径
//2. 加载文件
// pro.load(new FileReader("D:\\IdeaProjects\\itcast\\day04_jdbc\\src\\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源重载
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Spring JDBC
* Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
* 步骤:
1. 导入jar包
2. 创建JdbcTemplate对象。依赖于数据源DataSource
* JdbcTemplate template = new JdbcTemplate(ds);
3. 调用JdbcTemplate的方法来完成CRUD的操作
update():执行DML语句。增、删、改语句
queryForMap():查询结果将结果集封装为map集合,将列名作为key,将值作为value 将这条记录封装为一个map集合
* 注意:这个方法查询的结果集长度只能是1
queryForList():查询结果将结果集封装为list集合
* 注意:将每一条记录封装为一个Map集合,再将Map集合装载到List集合中
query():查询结果,将结果封装为JavaBean对象
* query的参数:RowMapper
* 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装
* new BeanPropertyRowMapper<类型>(类型.class)
queryForObject:查询结果,将结果封装为对象
* 一般用于聚合函数的查询

本文介绍Java数据库连接(JDBC)的概念及其在Java应用程序中操作数据库的基本步骤,包括注册驱动、获取连接、执行SQL等。同时,探讨了SQL注入问题及解决方案,并介绍了JDBC工具类的使用。此外,文章还讲解了Spring框架下JDBC的封装,包括JdbcTemplate对象的创建和使用,以及其提供的简化JDBC开发的方法。

2100

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



