Java之美_JDBC详解
?
什么是JDBC?
Java语言访问数据库的一种规范,是一套API
JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的存取操作。
?
?? JDBC规范采用接口和实现分离的思想设计了Java数据库编程的框架。接口包含在java.sql及javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaEE。这些接口的实现类叫做数据库驱动程序,由数据库的厂商或其它的厂商或个人提供。
?
?? 为了使客户端程序独立于特定的数据库驱动程序,JDBC规范建议开发者使用基于接口的编程方式,即尽量使应用仅依赖java.sql及javax.sql中的接口和类。
?
JDBC驱动程序:
什么是JDBC驱动程序?
这些是各个数据库厂家根据JDBC的规范制作的JDBC实现类
JDBC驱动程序的四种类型:
1.?????? 第一种类型的驱动程序的实现是通过将JDBC的调用全部委托给其它编程接口来实现的,比如ODBC。这种类型的驱动程序需要安装本地代码库,即依赖于本地的程序,所以便携性较差。比如JDBC-ODBC桥驱动程序
2.?????? 第二种类型的驱动程序的实现是部分基于Java语言的。即该驱动程序一部分是用Java语言编写,其它部分委托本地的数据库的客户端代码来实现。同类型1的驱动一样,该类型的驱动程序也依赖本地的程序,所以便携性较差
3.?????? 第三种类型的驱动程序的实现是全部基于JAVA语言的。该类型的驱动程序通常由某个中间件服务器提供,这样客户端程序可以使用数据库无关的协议和中间件服务器进行通信,中间件服务器再将客户端的JDBC调用转发给数据库进行处理
4.?????? 第四种类型的驱动程序的实现是全部基于JAVA语言的。该类型的驱动程序中包含了特定数据库的访问协议,使得客户端可以直接和数据库进行通信
?
JDBC类结构:
?????????????????????????? DriverManager
?
Driver?????????????????????????????Driver
?
Connection?????????????????????Connection
?
Statement??????????????????????Statement
?
Resultset? ???????????????????? Resultset
?
DriverManager:这个是一个实现类,它是一个工厂类,用来生产Driver对象的
这个类的结构设计模式为工厂方法
Driver:这是驱动程序对象的接口,它指向一个实实在在的数据库驱动程序对象,那么这个数据库驱动程序对象是从哪里来的呢?
DriverManager工厂中有个方法:getDriver(String URL),通过这个方法可以得到驱动程序对象,这个方法是在各个数据库厂商按JDBC规范设计的数据库驱动程序包里的类中静态实现的,也就是在静态块中
Connection:这个接口可以制向一个数据库连接对象,那么如何得到这个连接对象呢?
是通过DriverManager工厂中的getConnection(String URL)方法得到的
Statement:用于执行静态的SQL语句的接口,通过Connection中的createStatement方法得到的
Resultset:用于指向结果集对象的接口,结果集对象是通过Statement中的execute等方法得到的
?
JAVA使用JDBC访问数据库的步骤:
1.???? 得到数据库驱动程序
2.???? 创建数据库连接
3.???? 执行SQL语句
4.???? 得到结果集
5.???? 对结果集做相应的处理(增,删,改,查)
6.???? 关闭资源:这里释放的是DB中的资源
?
??
设置classpath:
1.???? 在java文件中起的包名一定要是工程基目录下的子目录,classpath:基目录
2.???? .jar包,需要将这个.jar包的路径包括这个文件的全名添加到classpath中来
Oracle连接字符串的书写格式:
“oracle:jdbc:thin:@ip:1521: 数据库名”,”数据库用户名”,”数据库密码”
?
简单的例子:
package moudule1.first;?import java.sql.*;?public class FirstJdbc{????? public static void main(String[] args)????? {???????????????? String sql="select * from yuchen_user";???????????????? Connection con=null;???????????????? Statement st=null;???????????????? ResultSet rs=null;???????????????? ????? ?try????? ?{????????????????? Class.forName("oracle.jdbc.driver.OracleDriver");???????????????? con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name", "scott","tiger");???????????????? st=con.createStatement();???????????????? rs=st.executeQuery(sql);???????????????? while(rs.next())???????????????? {??????????????????????????? System.out.println(rs.getInt("id"));??????????????????????????? System.out.println(rs.getString("name"));???????????????? }????? ?}catch(Exception e)????? ?{????? ?????????? e.printStackTrace();????? ?}finally????? ?{????? ?????????? try????? ?????????? {????? ??????????????? con.close();????? ?????????? }catch(Exception e)????? ?????????? {}????? ?????????? ????? ?????????? try????? ?????????? {????? ??????????????? st.close();????? ?????????? }catch(Exception e)????? ?????????? {????? ?????????? }????? ?????????? ????? ?????????? try????? ?????????? {????? ??????????????? rs.close();????? ?????????? }catch(Exception e)????? ?????????? {????? ?????????? }????????????????????? ????? ?}????????????????? ????? }????? }
package moudule1.preparedstatement;?import java.sql.*;import moudule1.com.*;?public class PreparedInsert{????? public static void main(String[] args)????? {?????????? String sql="insert into yuchen_user (id,name) values (?,?)";?????????? System.out.println(sql);?????????? ?????????? Connection con=null;?????????? PreparedStatement ps=null;?????????? ?????????? try{???????????????? con=JdbcUtil.getConnection();???????????????? ps=con.prepareStatement(sql);???????????????? ???????????????? ps.setInt(1,2);???????????????? ps.setString(2,"zhangsan");???????????????? ps.executeUpdate();???????????????? ???????????????? ps.setInt(1,3);???????????????? ps.setString(2,"lisi");???????????????? ps.executeUpdate();???????????????? ?????????? }catch(Exception e){???????????????? e.printStackTrace();?????????? }finally{???????????????? JdbcUtil.close(con,ps);???????????????? }?????????? }????? }?package moudule1.com;?import java.sql.*;?public class JdbcUtil{????? ????? public static Connection getConnection() throws Exception{?????????? Class.forName("oracle.jdbc.driver.OracleDriver");????? ?return DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name", "scott","tiger");?????????? }?????????? ????? public static void close(Connection con,Statement st){?????????? ?????????? close(con);?????????? close(st);?????????? ?????????? }?????????? ????? public static void close(Connection con,Statement st,ResultSet rs){?????????? ?????????? ?????????? close(con,st);?????????? close(rs);?????????? ?????????? }?????????? ????? public static void close(Connection con){?????????? try{???????????????? ???????????????? con.close();???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? ???????????????? }?????????? ?????????? }?????????? ????? public static void close(Statement st){?????????? ?????????? try{???????????????? ???????????????? st.close();???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? }?????????? }?????????? ????? public static void close(ResultSet rs){?????????? ?????????? try{???????????????? ???????????????? rs.close();???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? }?????????? ?????????? }????? ????? }
package moudule1.idus;?import java.sql.*;import moudule1.com.*;?public class UserDao{????? ????? private String sql;????? private Connection con;????? private Statement st;????? private ResultSet rs;????? ????? public UserDao(){?????????? sql=null;?????????? con=null;?????????? st=null;?????????? rs=null;?????????? }????? ????? public void insert(){?????????? ?????????? sql="insert into yuchen_user (id,name) values(";?????????? sql+="4,'zhouwu')";?????????? System.out.println(sql);?????????? ?????????? try{???????????????? ?????????? con=JdbcUtil.getConnection();?????????? st=con.createStatement();?????????? st.executeUpdate(sql);?????????? ?????????? }catch(Exception e){???????????????? ???????????????? e.printStackTrace();???????????????? ?????????? }finally{???????????????? ???????????????? JdbcUtil.close(con,st);???????????????? ???????????????? }?????????? ?????????? }?????????? ?????????? ????? public void delete(){?????????? ?????????? sql="delete from yuchen_user where id=2";?????????? System.out.println(sql);?????????? ?????????? try{???????????????? ???????????????? con=JdbcUtil.getConnection();?????????? ?st=con.createStatement();?????????? ?st.executeUpdate(sql);???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? e.printStackTrace();???????????????? ?????????? }finally{???????????????? ???????????????? JdbcUtil.close(con,st);???????????????? ???????????????? }?????????? }?????????? ?????????? ????? public void update(){?????????? ?????????? sql="update yuchen_user set name='liumang' where id=1";?????????? System.out.println(sql);?????????? ?????????? try{???????????????? ???????????????? con=JdbcUtil.getConnection();?????????? ?st=con.createStatement();?????????? ?st.executeUpdate(sql);???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? e.printStackTrace();???????????????? ?????????? }finally{???????????????? ???????????????? JdbcUtil.close(con,st);???????????????? ???????????????? }?????????? }?????????? ?????????? ????? public void select(){?????????? ?????????? sql="select * from yuchen_user";?????????? System.out.println(sql);?????????? ?????????? try{???????????????? ???????????????? con=JdbcUtil.getConnection();?????????? ?st=con.createStatement();????? ????? ?rs=st.executeQuery(sql);?????????? ??????????? ?while(rs.next()){?????????? ??? ?????????? ??? System.out.println(rs.getInt(1));?????????? ??? System.out.println(rs.getString(2));?????????? ??? ?????????? ??? }???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? e.printStackTrace();???????????????? ?????????? }finally{???????????????? ???????????????? JdbcUtil.close(con,st,rs);???????????????? ???????????????? }?????????? ?????????? }?????????? ?????????? ????? public static void main(String[] args){?????????? ?????????? UserDao ud=new UserDao();?????????? ud.select();?????????? ud.insert();?????????? ud.select();?????????? ud.update();?????????? ud.select();?????????? ud.delete();?????????? ud.select();?????????? }????? }
package moudule1.fangfa;?import java.sql.*;import moudule1.com.*;?public class sqlExecutor{????? ????? public static void main(String[] args){?????????? ?????????? Connection con=null;?????????? Statement st=null;?????????? ?????????? try{???????????????? ???????????????? con=JdbcUtil.getConnection();???????????????? st=con.createStatement();???????????????? boolean str=st.execute(args[0]);???????????????? ???????????????? if(str){?????????????????????? ResultSet rs=st.getResultSet();????????????????????? ????????????????????? while(rs.next()){??????????????????????????? System.out.println(rs.getInt("id")+":"+rs.getString("name"));??????????????????????????? }??????????????????????????? ??????????????????????????? rs.close();????????????????????? ???????????????? }else{????????????????????? int row=st.getUpdateCount();????????????????????? System.out.println(row);????????????????????? }???????????????? ?????????? }catch(Exception e){???????????????? ???????????????? e.printStackTrace();???????????????? ?????????? }finally{???????????????? ???????????????? JdbcUtil.close(con,st);???????????????? ???????????????? }?????????? }????? }