JavaWeb系列笔记六——JDBC

JDBC

  • 概念:Java DataBase Connectivity——Java数据库连接,Java语言操作数据库
  • JDBC本质:其实是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口编程,真正执行的代码是驱动jar包里面的实现类

简单范例

//1.导入驱动jar包
//2.注册驱动
Class.forname("com.mysql.jdbc.Driver");

//3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","用户名","密码");

//4.定义sql语句
String sql = "update account set balance = 500 where id = 1";

//5.获取执行sql的对象 Statement
Statement stmt = conn.createStatement();

//6.执行sql
int count = stml.executeUpdate(sql);

//7.处理结果
System.out.println(count);

//8.释放资源
stmt.close();
conn.close();

详解各个对象:

DriverManager:驱动管理对象

功能:

  • 注册驱动:告诉程序该使用哪一个数据库驱动jar
static void registerDriver(Driver driver):注册与给定的驱动程序
//写代码使用
Class.forName("com.mysql.jdbc.Driver");

//源码中  com.mysql.jdbc.Driver类中有
static{
	try{
		java.sql.DriverManager.registerDriver(new Driver());
	}catch(SQLException E){
		throw new RuntimeException("Can't register driver!");
	}
}

注意:mysql5之后的驱动jar包可以省略注册驱动的步骤

  • 获取数据库连接
//方法 static Connection getConnection(String url,String user,String password);

参数

  • url:指定连接的路径
    • 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    • 例子:jdbc:mysql://local:3306/db3
    • 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为jdbc:mysql:///数据库名称
  • user:用户名
  • password:密码

Connection:数据库连接对象

功能:

  • 获取执行sql的对象
Statement createStatement()
PrepareStatement prepareStatement(String sql);
  • 管理事务
    • 开启事务:setAutoCommit(boolean autoCommit),autoCommit=false时开启事务
    • 提交事务:commit()
    • 回滚事务:rollback()

Statement:执行sql的对象

  • 执行sql
    • boolean execute(String sql):可以执行任意的sql
    • int executeUpdate(String sql):指定DML(insert,update,delete)语句、DDL(create,alter,drop)语句
    • ResultSet executeQuery(String sql):执行DQL(select)语句

ResultSet:结果集对象,封装查询结果

  • boolean next():游标向下移动一行,判断当前行是否时最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
  • getXxx(参数):获取数据
    • 参数:int:代表列的编号,从1开始,如getInt(1);String:代表列名称,如getDouble(“balance”);
  • 使用步骤:
    • 游标向下移动一行
    • 判断是否有数据
    • 获取数据

PrepareStatement:执行sql的对象

  • SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与到字符串的拼接,会造成安全性问题
//用户输入密码:
a' or 'a' = 'a
//拼接后sql
select * from user where username = 'fdasfd' and password ='a' or 'a' = 'a'

//显然,where后面的布尔值永为真
  • 解决sql注入问题:使用PreparedStatement对象来解决
  • 预编译的SQL:参数使用?作为占位符
  • 步骤:
    1. 导入jar包

    2. 注册驱动

    3. 获取数据库连接对象Connection

    4. 定义sql(注意:sql中的参数用?作为占位符,如:select * from user where username = ?and password = ?)

    5. 获取执行sql语句的对象PreparedStatement

      Connection.preparedStatement(String sql)
      
    6. 给?赋值,方法:setXxx(参数1,参数2);参数1:?的位置编号,从1开始;参数2:?的值

    7. 执行sql,接收返回结果,不需要传递sql语句

    8. 处理结果

    9. 释放资源

后期都会使用PreparedStatement来完成增删改查的所有操作

  • 可以防止SQL注入
  • 效率更高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值