背景
- 持久化:把Java对象保存在硬盘中
- 序列化:将对象转换为二进制对象,再保存
- 保存在关系型数据库中
- Object-Relational Mapping(对象-关系映射框架,或ORM框架):把对象属性变成数据库的行-列,进而存储在数据库中
- Java Database Connective JDBC(Java数据库连接技术):Java提供的一组与平台无关的数据库操作标准,用于Java与关系型数据库的连接
- O/R Mapping中间件
- EJB:对JDBC的重量级封装,用面向对象的风格实现数据的创建、读取、查询等操作
- Hibernate:对JDBC的轻量级封装,把Java属性用声明的方式映射到数据库表,采用反射机制实现了持久化
- Spring:基于IOC和AOP的结构J2EE系统的框架
- MyBatis:一种半自动的ORM框架,前身是iBatis
操作形式
- JDBC本地驱动:由不同的数据库生产商根据JDBC定义的操作标准实现驱动程序,程序可直接通过JDBC进行数据库的连接操作,性能较高,但需对不同数据库编写相应驱动
- JDBC网络驱动:利用特定的数据库连接协议进行数据库的网络连接,可连接任何一个指定服务器的数据库,实际开发使用最多
连接步骤
- 向容器中加载数据库驱动程序
- 通过DriverManager类根据指定数据库连接信息取得数据库连接
- 利用Statement、PreparedStatement、ResultSet实现数据库CRUD操作
- 释放占用的资源
连接数据库
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.SQLException; 4 5 public class TestDemo { 6 public static void main(String[] args) { 7 try { 8 Class.forName("com.mysql.jdbc.Driver"); 9 Connection c = DriverManager.getConnection( 10 "jdbc:mysql://127.0.0.1:3306/mysql?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false", 11 "root", "Chen1227+"); 12 System.out.println("数据库连接成功!" + c); 13 } catch (ClassNotFoundException e) { 14 e.printStackTrace(); 15 }catch(SQLException e) { 16 e.printStackTrace(); 17 } 18 } 19 }
查询数据
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 public class TestDemo { 8 public static void main(String[] args) { 9 try { 10 // 加载数据库驱动 11 Class.forName("com.mysql.jdbc.Driver"); 12 13 // 连接数据库 14 Connection c = DriverManager.getConnection( 15 "jdbc:mysql://127.0.0.1:3306/mysql?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false", 16 "root", "Chen1227+"); 17 System.out.println("数据库连接成功!" + c); 18 19 // 建立连接 20 Statement s = c.createStatement(); 21 System.out.println("获取 Statement对象: " + s); 22 23 // 执行SQL语句 24 String sql = "SELECT order_num, cust_id FROM Orders"; 25 ResultSet re = s.executeQuery(sql); 26 while(re.next()) { 27 int order = re.getInt("order_num"); 28 int cust = re.getInt("cust_id"); 29 System.out.println(order + "," + cust); 30 } 31 System.out.println("执行语句成功!"); 32 33 // 关闭资源 34 re.close(); 35 s.close(); 36 c.close(); 37 System.out.println("资源关闭成功!"); 38 39 } catch (ClassNotFoundException e) { 40 e.printStackTrace(); 41 }catch(SQLException e) { 42 e.printStackTrace(); 43 } 44 } 45 }