数据库基础(六)——JDBC
前言
JDBC是一种数据库驱动,主要功能是在其他的平台或者软件中连接并使用数据库的一种组件。比如我们使用Java语言连接使用数据库的时候就需要JDBC驱动。
概述
JDBC驱动是sun公司为了简化操作提出的一个Java操作数据库的规范。大家都知道现今市场上数据库有很多,我们通过Java语言不能直接连接数据库,所以我们需要各个类型数据库的对应驱动。
如果我们的项目需要连接多个数据库则需要加载多种数据库驱动,这明显不符合开发规范,所以sun公司就推出了这种Java连接数据库的规范,各个数据库的公司按照指定的规范实现驱动的底层。
其实JDBC就是介于Java与数据库之间的一层,类似于我之前写过的网络协议杂谈(一)中描述的网络分层的理念一样,复杂的功能和业务我们可以把其拆成很多层来进行解决。
JDBC应用
Java语言连接使用数据库对的时候需要是哪个基础工具包。其中Java.sql 和javax.sql 是Java中默认存在的,除此之外我们还需要导入一个MySQL数据库连接驱动工具包。
接下来直接上代码:
// 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 导入数据库连接参数
// 基础的数据库连接信息截止到数据库名,后面在加入的参数中属于代码健壮性的属性
/**
* @param useUnicode 表示支持中文的编码
* @param characterEnccoding 表示字符编码集,建议使用utf-8
* @param useSSLeep 表示对该数据库使用安全连接,SSL是一种安全连接协议,可以去看我的网络协议杂谈(一)中的描述 *
*/
// The server time zone value 异常出现的时候,我们一般要重新设置一下数据库连接参数的时区设置
// 要注意的是我们一般在参数中加入 serverTimeZone=Asia/Shanghai或者将值设置为Asia/ChongQing
// 设置时区的时候一定不要设置Asia/BeiJing,因为在我们的时区中没有北京的时区
String url = "jdbc:mysql://localhost:3306/class1?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "123123";
// 连接数据库,成功后获取数据库连接对象
Connection connection = DriverManager.getConnection(url,username,password);
// 在数据库连接对象的基础上创建SQL执行对象,在数据库中执行SQL语句
Statement statement = connection.createStatement();
// 在数据库中执行SQL,并尝试接收SQL语句执行目录
String sql = "select * from student";
// ResultSet 结果集的底层实现,
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("sid" + resultSet.getObject("sid"));
System.out.println("sname" + resultSet.getObject("sname"));
System.out.println("sage" + resultSet.getObject("sage"));
System.out.println("tid" + resultSet.getObject("tid"));
}
// 释放连接
if (resultSet != null){
resultSet.close();
}
if (statement != null){
statement.close();
}
if (connection != null){
connection.close();
}
上述代码中展示了查询的提交方式。在我上文说过,我们的CRUD操作被宏观说明为查询和修改(更新),因为在最基础的JDBC中做数据库连接的时候仅有更新和查询两种提交方式。
如果想执行修改操作,可以直接使用execute()方法,如果确定只执行修改的SQL语句,我们可以使用executeUpdate()方法。
// 修改方法,这个方法的返回值是受影响的行数
int result = statement.executeUpdate(sql);
我们也可以使用JDBC方式依次执行多条SQL语句,使用以下方法:
String sql_row1 = "select * from student";
String sql_row2 = "insert into student values(···)";
statement.addBatch(sql_row1);
statement.addBatch(sql_row2);
int[] result = statement.executeBatch();
这个时候,我们通过addBatch方法将SQL语句放入到容器内,然后将所有的SQL语句都依次执行。
ResultSet结果集中包含了所有的查询结果,我们可以通过更为准确的方法来获取对应的字段值:
ResultSet result = statement.executeQuery("假定该SQL语句查询出一条数据");
// 可以获取所有类型的值(不确定字段类型的情况下使用, 如果明确类型,则尽量使用指定类型)
result.getObject();
// 字符串
result.getString();
// 整型
result.getInt();
// 浮点型
result.getFloat();
// 日期类型
result.getDate();
JDBC中的事务
直接上代码
// 开启事务
connection.setAutoCommit();
// 事务回滚
connection.rollback();
// 事务提交
connection.commit();
总结
数据库的基础部分就讲到这里,具体事务的应用等知识点不会说明,如果我准备记录数据库进阶方面的笔记会对事务进行详细说明。数据库方面我们以后使用框架来操作,所以现阶段对于单纯的JDBC仅仅是一些基础逻辑方面需要了解,基础逻辑会在框架部分进行说明。
数据库进阶阶段中的知识点包含很多复杂的逻辑,比如:SQL优化、数据库优化等方面的理论,现阶段只要单纯的会使用SQL语句进行CRUD就可以,其余知识仅做了解,后续会对进阶部分进行详细说明。