jdbc

JDBC

jdbc全称为java database connectivity。是一组规范客户端应用程序如何来访问数据库的应用程序接口。但是其具体如何访问数据库的操作是由数据库厂商提供的驱动来实现的。

官方定义的一套操作所有关系型数据库的规则/接口。各个数据库厂商去实现这套接口,提供数据库驱动这套接口,这是执行的代码时驱动jar包中的实现类。

使用步骤

步骤,如下

  1. 导入驱动:驱动一般为一个jar包

  2. 注册驱动:

  3. 获取数据连接对象 Connection

  4. 定义sql语句对象

  5. 获取执行sql语句对象

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

  7. 处理结果

  8. 释放资源

使用Class.forName加载驱动类,加载时会自动执行驱动类中的静态方法。静态方法中,使用了Driver.registerDriver 方法来注册驱动

DriverManager 驱动管理对象

功能: 注册驱动, 获取数据库连接

registerDriver

在使用Class.forName加载类字节码时,Driver类的静态代码块自动调用了registerDriver方法

static {
    try {
        DriverManager.registerDriver(new Driver(), new DeRegister());
    } catch (SQLException var1) {
        throw new RuntimeException("Could not register driver", var1);
    }
}

mysql5自动注册,可以不写注册步骤

getConnection

需要提供三个参数:

  1. url:指定连接路径

  2. user:用户名

  3. password:密码

将返回一个Connection类型的连接对象

Connection 数据库连接对象

该对象一般用来执行以下几个操作

获取执行sql的对象

createStatement返回一个Statement对象,用来执行静态SQL语句。使用此方式执行SQL语句的缺点是容易被SQL注入。

preparedStatement 返回一个PreparedStatement对象,用来执行动态SQL语句。大多数时候使用此方式,原因在于,效率高,以及不容易被SQL注入。

释放连接

使用close方法释放该连接占用的资源。

设置事务

使用setAutoCommit方法设置true来取消自动提交模式并开启事务。

但需要提交时使用commit方法。回滚时使用rollback方法。

等等

如设置事务隔离级别等等。

Statement 执行sql的对象

该对象用来执行静态SQL语句。

使用execute 方法可以执行任意的SQL语句,返回一个布尔值。但是该方法并不推荐使用。

executeUpdate 可以执行DML(增删改)语句,DDL(create,alter,drop)语句。返回一个整数,代表影响的行数

executeQuery 执行DQL(select)语句。返回值为ResultSet类型。

ResultSet 结果集对象

该对象为执行DQL语句以后返回的结果。

从结果集中提取数据的方法是,先调用next方法判断下一行有无数据,之后使用getXXX(XXX表示你需要提取的数据的类型)。

getXXX方法需要你提供一个int/String类型的参数,int类型的参数表示你提取数据的列编号,String类型的参数则表示你提取数据的列名。

需要注意的是这里的列表编号是从1开始的。

PrepareStatement 执行动态sql的对象

该对象是为了解决SQL注入问题。

使用Connection#prepareStatement方法获取该对象。该方法需要提供一个sql字符串参数,同时缺省的数据需要使用? 来表示。

如:

select * from user where uname=? and pwd=?

当需要为prepareStatement,预编译sql的占位符赋值时,使用setXXX(位置, 值) XXX表示你赋值的数据类型,参数以占位符的位置索引(同样以1开始),然后就是值。

如:

String sql = "select uname from user where uname=? and pwd=?";
PreparedStatement pStatement = connect.prepareStatement(sql);

pStatement.setString(1, uname); // uname = "uname1234"
pStatement.setString(2, pwd); // uname = "uname1234"

ResultSet result = pStatement.executeQuery();
posted @ 2020-10-15 21:50  秦晓  阅读(163)  评论(0编辑  收藏  举报