---恢复内容开始---
1.首先说明什么是JDBC
在第一眼看到这个名词之前,我觉得有必要知道它的英文全称是什么,Java Database Connectivity,从英文字面上理解就直译为
可连通的Java数据库,说白了也就是想提供一套中间环节,去连接Java代码与数据库,使之可以直接通过操作Java代码就可以控制数据库。
2.JDBC的实质
它是Java访问数据库的解决方案,希望能过用同样的方式访问不同的数据库,以达到实现与具体数据库无关的Java操作界面。
JDBC实质上就是就是一套标准化的接口,不同的数据库厂商根据自己的数据库特点去实现这套接口,实现的具体方法无需我们去关心。
JDBC中数据库厂商实现的主要接口如下:
DriverManager :驱动管理
Connection、
DatabaseMetaData :连接接口
Statement、
PreparedStatement
CallableStatement: 语句对象接口
ResultSet、
ResultSetMetaData: 结果集接口
3.JDBC的工作原理
程序员调用的是底层数据库厂商实现的部分,
即:1)通过Connection 接口实现第一步的连接
2)通过Statement结果传送sql语句
3)数据库返回结果保存到ResultSet结果集合接口中
主要流程可归纳为:
1)加载驱动,创建连接
2)创建语句对象
3)执行SQL语句
4)发回结果集
5)关闭连接
下面我以我学的oracle数据库配合eclips为例逐步阐述一下如何实现JDBC
1)加载驱动
使用的方法为:Class.forName(“驱动”);
对于如何获得到这个驱动,我所知道的方法是:展开JDBC的jar包,如我使用的是ojdbc6.jar,在里面找到oracle.jdbc.driver,在里面再找到OracleDriver然后鼠标右键点qualitycopy,粘贴到引号之中即可,如:Class.forName("oracle.jdbc.driver.OracleDriver");
2)创建连接
使用的方法为: conn=DriverManager.getConnection(“jdbc:oracle:thin:@IP地址:1521:orcl","数据库账号","数据库密码”);
如:conn=DriverManager.getConnection("jdbc:oracle:thin:@172.16.3.8:1521:orcl","jsd1601","jsd1601");
3)创建语句对象
使用的方法为:Statement stmt=conn.createStatement();
需要注意的是,使用的是第二步上面创建出来的连接去调用方法
调用executeUpdate方法将sql语句传入其中即可执行所写的sql语句,这里需要注意的是,executeUpdate方法能执行的sql种类为insert,update,delete
如: Statement stmt=conn.createStatement();
String sql="insert into emp_jiawenzhe(empno,ename,sal,deptno) values(1000,‘贾文哲‘,1500,10)";
int i=stmt.executeUpdate(sql);
这里面的返回值i就是受影响的行数,我们可以根据这个受影响的行数来判断是否操作成功
4)而对于返回的结果集主要是指进行select操作(这里暂不提)
5)最后关闭连接
如:conn.close();
列举一整体代码,包括注释:
1 package jdbc_day01; 2 import java.sql.*; 3 /** 4 * 演示JDBC的操作步骤 5 * 1、加载驱动程序 6 * 2、创建连接 7 * 3、创建语句对象 8 * 4、发送SQL语句 9 * 5、如果发送的是select语句,处理结果集 10 * 6、关闭连接 11 * @author jiawenzhe 12 * 13 */ 14 public class JDBCDome01 { 15 public static void main(String[] args) throws SQLException { 16 //需求:创建一个员工,员工号,员工名,工资,部门号 17 //1、 18 Connection conn=null; 19 try { 20 Class.forName("oracle.jdbc.driver.OracleDriver"); 21 System.out.println("驱动加载成功"); 22 //2、 23 conn= 24 DriverManager.getConnection("jdbc:oracle:thin:@172.16.3.8:1521:orcl","jsd1601","jsd1601"); 25 System.out.println(conn.getClass().getName()); 26 //3、 27 //Statment 语句对象。发送并执行SQL语句 28 /* 29 * int excuteUpdate(String sql); 30 * 发送insert,update,delete语句 31 * 返回值int表示影响数据库表的行数 32 */ 33 Statement stmt=conn.createStatement(); 34 String sql="insert into emp_jiawenzhe(empno,ename,sal,deptno) " 35 + "values(1000,‘王小二‘,1500,10)"; 36 int i=stmt.executeUpdate(sql); 37 if(i>0){ 38 System.out.println("保存成功!"); 39 } 40 } catch (ClassNotFoundException e) { 41 e.printStackTrace(); 42 //1、记录日志 43 //2、通知调用者 44 throw new RuntimeException("加载驱动错误",e); 45 }finally{ 46 //关闭连接 47 if(conn!=null){ 48 try { 49 conn.close(); 50 } catch (SQLException e) { 51 e.printStackTrace(); 52 } 53 } 54 } 55 56 57 58 59 } 60 }
注:oracle数据库可以使用的jar包:ojdbc14.jar/ojdbc6.jar(oracle12c用这个)
mysql数据库可以使用的jar包:mysql-connector-java-5.0.4-bin.jar
加载驱动类:
Class.forName("com.mysql.jdbc.Driver");
未完待续!
---恢复内容结束---