Java中的数据存储技术
- 在Java中,数据库存取技术分为如下几类:
- JDBC直接访问数据库
- JDO技术
- 第三方O/R工具,如Hibernate,Mybatis等
- JDBC是java访问数据库的基石,JDO,Hibernate等只是更好的封装了JDBC
JDBC概要
- JDBC是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源
- JDBC为访问不同的数据库提供了一种统一的途径(面向接口编程)
- JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统
在没有JDBC时,一个Java程序要访问一个数据库要编写特定的代码,但如果此时更换了数据库需要重新编写,可复用性差。如果在Java程序和各种数据库之间添加JDBC,JDBC提供了一组接口,此时Java应用程序只需要调用这组接口即可,而这组接口的实现则交给各个数据库的厂商去实现。即如果要想让Java程序能够调用到数据库,那么数据库厂商必须提供JDBC的实现,这个实现就叫做JDBC的驱动
JDBC简单的使用步骤
- 注册驱动
- 建立连接
- 创建Statement对象
- 执行查询,得到结果集
代码如下
// 1.注册驱动
DriverManager.registerDriver(new Driver());
// 2.建立连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?serverTimezone=GMT%2B8", "root", "");
// 3.创建Statement对象,跟数据库打交道一定要有这个对象
Statement createStatement = conn.createStatement();
// 4.执行查询,得到结果集
String sql = "select * from t_stu";
ResultSet rs = createStatement.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " " + name + " " + age);
}
rs.close();
createStatement.close();
conn.close();
在编写这段代码时还遇到了一个小问题:就是在url字符串里必须在表名后面加上“?serverTimezone=GMT%2B8”,否则会报错
百度后才知道原来是因为在使用mysql的jdbc最新版时,遇到数据库和系统时区差异引起的问题,只要将serverTime指定成GMT+8时区即可解决
上面代码还存在着一些缺陷,如在资源关闭时应放在finally代码块中,应该使用更加安全的PrepareStatement等,这些问题将在后续解决