背景

  • 持久化:把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 }

最新文章

  1. PHP 获取中国时间,即上海时区时间
  2. 用Castor 处理XML文档
  3. graph-tool文档(一)- 快速开始使用Graph-tool - 2.属性映射、图的IO和Price网络
  4. alter table <表名 > add constraint <主键名>用法
  5. 用Telnet发送HTTP请求
  6. Android 4.4 音量调节流程分析(二)
  7. ### C++总结-[类的继承]
  8. android一个纠结的VFY错误
  9. 使用ViewPager实现三个fragment切换
  10. vim代码折叠功能
  11. C# 不使用递归遍历目录树中的文件和文件夹
  12. Bootstrap3基础 text-right/left/center 设置标题右对齐、左对齐、居中
  13. C#sql语句
  14. go遍历某个文件夹
  15. 20172308 实验四《Java面向对象程序设计 》实验报告
  16. [HNOI2019]多边形
  17. Mybatis笔记二:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  18. PHP实现openSug.js参数调试
  19. distinct与order by
  20. Apache Struts最新漏洞 远程代码执行漏洞预警 2018年11月08日

热门文章

  1. PAT (Advanced Level) Practice 1011 World Cup Betting (20 分) 凌宸1642
  2. Autofac 框架初识与应用
  3. OO 第三单元
  4. MySQL实战45讲,丁奇带你搞懂
  5. Install Tensorflow object detection API in Anaconda (Windows)
  6. 数据库MySQL六
  7. 让你的Windows/Linux玩上Switch!
  8. openpyxl 库
  9. Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo
  10. 分布式存储bfs