JDBC_JDBC基础

img

[TOC]

【黑马程序员-Java语言高级部分11】JDBC


基础概念

概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库

JDBC笔记

JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

image-20200322202245440

快速入门

步骤

  1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar

    复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下

    右键-->Add As Library

  2. 注册驱动

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

  4. 定义sql

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

  6. 执行sql,接受返回结果

  7. 处理结果

  8. 释放资源

代码实现

关键对象

DriverManager(驱动管理对象)

功能

Connection(数据库连接对象)

  1. 获取执行sql 的对象

Statement createStatement()

PreparedStatement prepareStatement(String sql)

  1. 管理事务

    开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务

    提交事务:commit()

    回滚事务:rollback()

Statement(执行sql的对象)

  1. boolean execute(String sql) :可以执行任意的sql 了解

  2. int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句

返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。

  1. ResultSet executeQuery(String sql): 执行DQL(select)语句

示例:

ResultSet(结果集对象)

boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true

getXxx(参数): 获取数据

Xxx:代表数据类型 如: int getInt() , String getString()

参数:

  1. int:代表列的编号,从1开始 如: getString(1)

  2. String:代表列名称。 如: getDouble("balance")

PreparedStatement(执行sql的对象)

QL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题

  • 输入用户随便,输入密码:a' or 'a' = 'a

  • sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'

解决sql注入问题:使用PreparedStatement对象来解决

预编译的SQL:参数使用?作为占位符

  • 驱动jar包 mysql-connector-java-5.1.37-bin.jar

  • 注册驱动

  • 获取数据库连接对象 Connection

  • 定义sql sql的参数使用?作为占位符。 如:select * from user where username=? and password = ?;

  • 获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)

  • 给?赋值 setXxx(位置编号, 参数值)

  • 执行sql,接受返回结果,不需要传递sql语句

  • 处理结果

  • 释放资源

优点

  • 可以防止SQL注入

  • 效率更高

JDBC工具类

目的:简化书写

抽取一个方法获取连接对象

需求:不想传递参数(麻烦),还得保证工具类的通用性

解决:配置文件

jdbc.properties

修改记录

添加记录

删除记录

执行DDL语句

查询并封装

JDBC控制事务

事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则这多个步骤同时成功或同时失败。

操作:

  • 开启事务

  • 提交事务

  • 回滚事务

使用Connection对象来管理事务

  • 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务

    • 在执行sql之前开启事务

  • 提交事务:commit() ,当所有sql都执行完提交事务

  • 回滚事务:rollback() ,在catch中回滚事务

Last updated

Was this helpful?