JDBC指南

所谓的JDBC,就是使用Java代码来操作所有的关系型数据库。JDBC本质,是一组操作数据库的接口。各厂商实现的jar包就是驱动。

一、步骤

  1. 创建工程,倒入驱动jar包
  2. 注册驱动
    • Class.forName("com.mysql.jdbc.Driver");
  3. 获取连接
    • Connection conn = DriverManager.getConnection(url, username, password);
  4. 获取执行SQL对象
    • Statement stmt = conn.createStatement();
      • 获取普通执行SQL的对象
        • Statement createStatement()
      • 预编译SQL的执行SQL对象
        • PreparedStatement prepareStatement(sql)
      • 获取存储过程的对象
        • CalableStatement prepareCall(sql)
  5. 执行SQL
    • stmt.executeUpdate(sql);
  6. 处理返回结果
  7. 释放资源

Connection

事务管理

try {
	//开启事务
	conn.setAutoCommit(false);
	//执行sql
	int count1 = stmt.executeUpdate(sql1);
	//处理结果
	System.out.println(count1);
	//执行sql
	int count2 = stmt.executeUpdate(sql2);
	//处理结果
	System.out.println(coutn2);

	//提交事务
	conn.commit();
} catch(Exception throwables) {
	//回滚事务
	conn.rollback();
	throwables.printStackTrace();
}

Statement

  • Statement的作用
    • 执行SQL语句
      • int executeUpdate(sql)
        • 执行DML、DDL语句
        • 返回值
          • (1)DML语句的行数
          • (2)DLL语句执行完毕后,执行成功返回0
      • ResultSet executeQuery(sql)
        • 执行DQL语句
        • 返回值
          • ResultSet结果集对象

ResultSet

  • ResultSet stmt.executeQuery(sql)
    • 执行DQL语句,返回ResultSet对象
  • boolean next()
    • 将光标位置向前移动一行
    • 判断当前行是否有效
    • 返回值
      • true 有效行,当前行有数据
      • false 无效行,当前行没有数据
  • xxx getXxx(参数)
    • 获取数据
    • 参数
      • int 列的编号,从1开始
      • String 列的名字
  
//获取执行sql的对象
StatementStatement stetement = connection.createStatement();  
  
//执行sql  
ResultSet resultSet = stetement.executeQuery(sql);  
  
List<User> list = new ArrayList<>();  

//处理结果  
while(resultSet.next()){  
    User user = new User();  
  
    //获取数据 getXxx(参数);  
    int id = resultSet.getInt("id");  
    String name = resultSet.getString("name");  
    int money = resultSet.getInt("money");  
  
    user.setId(id);  
    user.setName(name);  
    user.setMoney(money);  
  
    //存入集合  
    list.add(user);  
}
System.out.println(list);

PreparedStatement

  • PreparedStatement
    • 预编译SQL并执行(预防SQL注入问题)
  • SQL注入
    • 通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

SQL注入

通过输入来修改事先定义好的SQL语句
需求:完成用户登陆

select * from tb_user where username='zhangsan' and password = '123'; 

PreparedStatement

本质上是字符转义

一、获取PreparedStatement对象

//SQL语句中的参数值,使用?占位符替代
String sql = "select * from user where username = ? and password=?";

//通过Connection对象获取,并传入对于的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

二、设置参数值

PreparedStatement对象.setXxx(参数1, 参数2) 给?赋值
Xxx: 数据类型
参数:
	1. ?的位置编号,从1开始
	2. ?的值

三、执行SQL

executeUpdate(); 
or:
executeQuery();

不需要再传递sql语句,因为创建PreparedStatement对象时就已经传入了

预编译

/**  
 * PreparedStatement原理  
 * 预编译SQL,性能更高,需要手动开启预编译  
 * useServerPrepStmts=true  
 * 这样,检查SQL和编译SQL只会执行一次  
 */

数据库连接池

创建一个conn池,当用户访问完成数据库后,不是关闭,而是放回到池子里面,当下一个用户访问时,不需要重新建立一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值