DriveManager类
DriveManager类有两个作用:注册驱动与获得数据库连接。
注册驱动使用registerDrive()
方法实现,建立连接使用getConnection()
方法实现。
registerDriver()
在此类中有一段静态代码使用DriverManager.registerDriver(new Driver());
完成了驱动的注册,所以已经无须手动调用此方法注册。
getConnection()
此方法有三个String类型参数:
- url:与数据库连接的路径
- user:与数据库连接的用户名
- password:与数据库连接的密码
此处主要涉及URL的写法,比较特殊:jdbc:mysql://localhost:3306/$DB_NAME
。其中:
- jdbc:连接数据库的协议
- mysql:jdbc的子协议
- localhost:连接的MySQL数据库服务器的主机地址。连接是本机就可以写成localhost,如果连接不是本机的,就需要写上连接主机的IP地址或域名。
- 3306:MySQL数据库服务器的端口号
- $DB_NAME:数据库名称
该函数将会与数据库连接,如果连接成功则返回一个Connection
类的数据库连接对象,若连接失败则返回null。
Connection类
Connection类即数据库连接对象,有两大功能:创建用于执行SQL语句的对象和管理事务
以下三个方法可以创建用于执行SQL语句的对象:
- createStatement():返回一个Statement对象,用于执行SQL
- prepareCall():返回一个CallableStatement对象,用于调用数据库中存储过程
- prepareStatement():返回一个PreparedStatement对象,用于执行SQL并对SQL进行预处理以解决SQL注入漏洞。
以下三个无返回值的方法用于管理数据库事务:
- getAutoCommit():将此连接的自动提交模式设定为给定状态
- commit():使所有上一次提交/回滚后进行的更改成为永久更改,并释放此Connection对象当前的数据库锁
- rollback():取消在当前事务中进行的所有更改,并释放此Connection对象当前的数据库锁
Statement接口
Statement 接口提供了三种执行 SQL 语句的方法:
- executeQuery()
- executeUpdate()
- execute()
我们需要针对不同的SQL语句使用这三种方法
executeQuery()
executeQuery()
返回一个ResultSet
类的对象,该对象是一个结果集。这个方法只能被用于查询语句,比如用的最多的SELECT
语句,执行完语句后会返回代表查询结果的ResultSet
对象。随后可以通过ResultSet
类中的getString()方法来获取读到的数据。
executeUpdate()
executeUpdate()
常用于执行INSERT
、UPDATE
、DELETE
、CREATE TABLE
等非查询类语句。常用于数据库与数据表的增删改。它返回一个int类型的值,对于INSERT
、UPDATE
、DELETE
等操作,会返回数据表中受影响的行数;对于CREATE TABLE
等的操作,它的返回值总为0。
execute()
execute()
可以用于执行任何SQL语句。它的返回值是一个bool类型的值,来表明该SQL语句是否返回了ResultSet
对象。如果执行后得到的第一个结果是ResultSet
则返回true,否则返回false。返回为true后可以利用getResultSet()
方法来获取对应的ResultSet
类的结果集对象。此函数更复杂,推荐仅当不知道SQL语句的具体类型时使用此函数来执行。
ResultSet接口
ResultSet
类是查询的结果集。主要使用两个方法来进行操作:getString()和next()。
getString()
getString()
方法接受一个String类型的参数,作为要获得的字段的字段名。它会返回一个String类型的值,就是ResultSet
对象当前指向行的所求字段的值。此方法多用于处理查询所得值。
next()
next()
方法会将该ResultSet
对象所指向行的光标向下移动一行。它返回一个bool类型的值,当光标已经不能下移时会返回false,否则返回true并下移光标。此方法可以用于遍历查询所得数据或者判断查询是否有查到值。