在上篇博客中,介绍了两个Web层的规范,本篇博客,继续J2EE十三个规范的学习,下面要介绍的便是数据层的JDBC。
【学习笔记】
一.什么是JDBC
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
二.JDBC的优势
1.有了JDBC API,就不必为Sybase数据库专门写一个程序,为Oracle数据库又专门写一个程序等等。程序员只要用JDBC API写一个程序就行,它可以向相应数据库发送SQL调用。同时,将java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序。
2.JDBC可扩展了java的功能。用java和JDBC API可以发布含有applet的网页,而改applet使用的信息可能来自远程数据库。企业也可以用JDBC通过Intranet将所有支援镰刀一个或多个内部数据库中,即使他们之间所用的操作系统不同。
3.java和JDBC的结合,使得信息传播变得容易和经济。企业可以继续使用他们安装好的数据库,并能便捷地存取信息,即使信息在不同的数据库管理系统上。
三.JDBC的用途
简单地说,JDBC可做以下四件事:
1.使得连接到数据库
2.创建SQL或MySQL语句
3.执行SQL或MySQL的查询数据库
4.查看和修改结果记录
四.JDBC的架构
JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成:
1.JDBC API:提供了应用程序对JDBC的管理连接。
2.JDBC Driver API:支持JDBC管理到驱动器连接。
以下是一种结构图,它显示了JDBC驱动程序和Java应用程序的位置:
五.JDBC的创建
创建JDBC应用程序有以下6个步骤:
1.导入数据包 . 需要包括含有需要进行数据库编程的JDBC类的包。大多数情况下,使用 import java.sql.* 就可以了.
2.注册JDBC驱动程序. 需要初始化驱动程序,可以与数据库打开一个通信通道。
3.打开连接. 需要使用DriverManager.getConnection() 方法创建一个Connection对象,它代表与数据库的物理连接。
4.执行查询 . 需要使用类型声明的对象建立并提交一个SQL语句到数据库。
5.从结果集中提取数据 . 要求使用适当的关于ResultSet.getXXX()方法来检索结果集的数据。
6.清理环境. 需要明确地关闭所有的数据库资源相对依靠JVM的垃圾收集。
下面是一个创建JDBC的完整代码:
//STEP 1. Import required packages import java.sql.*; public class FirstExample { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/EMP"; // Database credentials static final String USER = "username"; static final String PASS = "password"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ //STEP 2: Register JDBC driver Class.forName("com.mysql.jdbc.Driver"); //STEP 3: Open a connection System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); //STEP 4: Execute a query System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); //STEP 5: Extract data from result set while(rs.next()){ //Retrieve by column name int id = rs.getInt("id"); int age = rs.getInt("age"); String first = rs.getString("first"); String last = rs.getString("last"); //Display values System.out.print("ID: " + id); System.out.print(", Age: " + age); System.out.print(", First: " + first); System.out.println(", Last: " + last); } //STEP 6: Clean-up environment rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ //Handle errors for JDBC se.printStackTrace(); }catch(Exception e){ //Handle errors for Class.forName e.printStackTrace(); }finally{ //finally block used to close resources try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// nothing we can do try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); }//end finally try }//end try System.out.println("Goodbye!"); }//end main }//end FirstExample【学习比较】
在很早之前,我们就知道了ODBC,而JDBC和ODBC间又有什么样的联系和不同呢。
目前,Microsoft 的 ODBC API 可能是使用最广的、用于访问关系数据库的编程接口。它能在几乎所有平台上连接几乎所有的数据库。然而,为什么java不使用ODBC呢。答案是可以使用,但不适合直接使用。
因为ODBC是用C语言接口,从java调用本地C代码再安全性、实现、坚固性和移植性方面都有缺陷。此外,java中没有指针,而ODBC对指针的应用很广泛。
JDBC API是建立在ODBC基础上的,它保留了ODBC的基本设计特征。它们之间最大的区别在于:JDBC以java风格与优点为基础并进行优化,因此更加易于使用。
【学习感悟】
对于数据层JDBC的学习,感觉就好像要轻松一些。因为对ODBC有一定的了解,并且对数据库的操作,也是固定的几件事:连接、执行、查询等。不过现在的学习还是很零散的,后面系统的学习与编程相信会更有共鸣。