数据库的连接JDBC

JDBC是什么

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势

Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

JDBC、数据库厂商、程序员之间的关系图片


JDBC接口及数据库厂商的实现

● DriverManager 驱动管理

● Connection
● DatebaseMetaData 连接接口

● Statement
● PreparedStatement
● CallableStatement 语句对象接口

● ResultSet
● ResultSetMetaData 结果集接口


JDBC的工作原理

● JDBC定义接口
● 数据库厂商实现接口
● 程序员调用接口,实际调用的是底层数据库厂商实现的部分


JDBC的工作流程

  1. 加载驱动,建立连接
  2. 创建语句对象
  3. 执行SQL语句
  4. 处理结果集
  5. 关闭连接

Driver接口及驱动类的加载

—前提需要有驱动jar包
Class.forName(“oracle.jdbc.driver.OracleDriver“);–oracle数据库

    数据库类型对应的Jar文件

数据库类型与之对应的驱动jar包


Connection接口

Connection conn = DriverManager.getConnection(“URL”,”username”,”password”);

  各种数据库对应的驱动类名和URL格式
其中hostip代表ip地址,dbname代表数据库名。
数据库驱动类名URL格式
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostip:1521:dbname
Sybasecom.sybase.jdbc2.jdbc.SybDriverjdbc:sybase:Tds:hostip:4100/dbname
Mysqlcom.mysql.jdbc.Driverjdbc:mysql://hostip:3306/dbname?useUnicode=true&characterEncoding=GBK
SQLServer 2000com.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://hostip:1433;DatabaseName=dbname
SQLServer 2005com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://hostip:1433;DatabaseName=dbname
SQLServer 7.0net.sourceforge.jtds.jdbc.Driverjdbc:jtds:sqlserver://hostip:1433/dbname
DB2com.ibm.db2.jcc.DB2Driverjdbc:db2://hostip:50000/dbname
Informixcom.informix.jdbc.IfxDriverjdbc:informix-sqli://hostip:port/bname:informixserver=dbservername

Statement接口

Statement stmt = conn.creatStatement();
stmt用于来执行SQL语句
Statement对象执行SQL语句的方法图片


ResultSet接口

执行查询SQL语句后返回的的结果集,由ResultSet接口接收
常用的处理方式:遍历/判断是否有结果
[图片]这里写图片描述

  • 查询的结果存放在ResultSet对象的一系列行中(可以理解为Map)
  • ResultSet对象的最初位置在行首(数据库段名那一行)
  • ResultSet对象的最初位置在行首(数据库段名那一行)
  • ResultSet.next()方法用来在行间移动
  • ResultSet.getXXX()方法用来获取字段的内容

下面的示例来演示基本用法

Oracle数据库中职员emp表的表结构如表-1所示:

            职员表emp 信息

职员表emp 信息

            职员表 emp中的示例数据所示

这里写图片描述
本案例要求使用JDBC连接Oracle数据库,查询emp表的所有员工的ID、姓名、薪资以及入职时间。
代码:
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. public class EmpDAO {
7. public static void main(String[] args) {
8. EmpDAO dao = new EmpDAO();
9. dao.findAll();
10. }
11. public void findAll() {
12. Connection con = null;
13. Statement stmt = null;
14. ResultSet rs = null;
15. try {
16. Class.forName("oracle.jdbc.OracleDriver");
17. con = DriverManager.getConnection(
18. "jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
19. stmt = con.createStatement();
20. rs = stmt .executeQuery("select empno, ename, sal, hiredate from emp");
21. while (rs.next()) {
22. System.out.println(rs.getInt("empno") + ","
23. + rs.getString("ename") + ","
24. + rs.getDouble("sal") + "," + rs.getDate("hiredate"));
25. }
26. } catch (ClassNotFoundException e) {
27. System.out.println("驱动类无法找到!");
28. throw new RuntimeException(e);
29. } catch (SQLException e) {
30. System.out.println("数据库访问异常!");
31. throw new RuntimeException(e);
32. } finally {
33. try {
34. if (rs != null) {
35. rs.close();
36. }
37. if (stmt != null) {
38. stmt.close();
39. }
40. if (con != null) {
41. con.close();
42. }
43. } catch (SQLException e) {
44. System.out.println("关闭连接时发生异常");
45. }
46. }
47. }
48. }

运行结果为:
7369,SMITH,,800.0,1980-12-17
7499,ALLEN,,1600.0,1981-02-20
7521,WARD,,1250.0,1981-02-22
7566,JONES,,2975.0,1981-04-02
7654,MARTIN,,1250.0,1981-09-28
7698,BLAKE,,2850.0,1981-05-01
7782,CLARK,,2450.0,1981-06-09
7788,SCOTT,,3000.0,1987-04-19
7839,KING,,5000.0,1981-11-17
7844,TURNER,,1500.0,1981-09-08
7876,ADAMS,,1100.0,1987-05-23
7900,JAMES,,950.0,1981-12-03
7902,FORD,,3000.0,1981-12-03
7934,MILLER,,1300.0,1982-01-23

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图图学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值