【Java基础】——JDBC

来源:互联网 发布:淘宝店铺被投诉售假 编辑:程序博客网 时间:2024/06/06 07:23

      JDBC——Java Data Base Connectivity,Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组类和接口组成。它跟应用程序和数据库的关系,如下图:



JDBC为应用程序和数据库驱动之间提供了一组接口(规范),数据库驱动是实现数据库操作的类,根据JDBC规范来实现。


操作数据库的步骤

      1、注册驱动

      2、建立连接

      3、创建执行SQL语句的对象

      4、执行SQL语句

      5、处理执行结果

      6、释放相关资源


具体说明:


1、注册驱动


        网上说有3中方式,直接注册驱动、键值对方式、Class.forName方式,推荐大家使用Class.forName方式。这样方式类似于反射。“com.mysql.jdbc.Driver”,Class.forName函数的作用是根据类的名字将类装载到虚拟机中(并未实例化),这种方式 也不会对具体的驱动类产生依赖,而且使用方便。

2、建立连接


Connection  conn = DriverManager.getConnection(url,username,password)

URL格式:jdbc:子协议:子名称//主机名:端口/数据库名

连接Oracle数据库:url = "jdbc:oracle:thin:@localhost:1521:orcl"


3、创建执行SQL语句的对象


在JDBC中,有两个对象可以使用:Statement & PrepareStatement。关于这两者的区别,会在下一篇文章中,具体阐述。详情请点击:Statement & PrepareStatement

Statement st = conn.createStatement();

PrepareStatement  pst = conn.prepareStatement(sql);

可以看出,在创建PrepareStatement对象的同时,需要指明需要执行的sql语句,因为它会对sql语句进行预处理;而Statement则在执行sql动作时,才指明sql语句。


4、执行SQL(CURD)语句


查询:

    st.executeQuery(sql);

    pst.executeQuery();

非查询(增、删、改)

st.executeUpdate(sql);

pst.executeUpdate();


5、处理执行结果


查询:返回值采用ResultSet接收

ResultSet  rs = st.executeQuery(sql);

ResultSet  rs = pst.executeQuery();

非查询:同上


6、释放相关资源


依次释放ResultSet、Statement(或PrepareStatement)、Connection对象。释放的顺序与创建的顺序正好相反。

PS:Connection是非常稀有的资源,用完必须马上释放。它的使用原则是尽量晚的创建,尽量早的释放,以减少占用资源的时间。


下边是一个JDBC操作数据库的Demo


[java] view plain copy
 print?
  1. <span style="font-family:Microsoft YaHei;font-size:14px;">    /** 
  2.     * @Title: JDBCtest 
  3.     * @Description: JDBC操作数据库Demo,以mysql为例   
  4.     * @param @throws ClassNotFoundException 
  5.     * @param @throws SQLException    参数 
  6.     * @return void    返回类型 
  7.     * @throws 
  8.      */  
  9.     public static void JDBCtest() throws ClassNotFoundException, SQLException  
  10.     {    
  11.         //1.方法1:注册驱动:依赖于驱动jar包的存在,否则无法通过编译   
  12.         DriverManager.registerDriver(new com.oracle.jdbc.Driver());  
  13.           
  14.         //方法2:键值对方式  
  15.         System.setProperties("jdbc.drivers","com.oracle.jdbc.Driver");    
  16.           
  17.         //方法3:Class.forName方式  
  18.         Class.forName("oracle.jdbc.driver.OracleDriver");   
  19.           
  20.         //2.建立连接    
  21.         String url = "jdbc:oracle:thin:@localhost:1521:orcl";  
  22.         String username = "system";  
  23.         String password ="kirnY123";  
  24.         Connection conn =   DriverManager.getConnection(url,username,password);  
  25.           
  26.         //3.创建语句执行对象    
  27.         //需要执行的sql语句  
  28.         String sql = "select user_name,password from t_user where user_id=?";  
  29.         //使用Statement对象  
  30.        Statement st=conn.createStatement();        
  31.        //使用PrepareStatement对象  
  32.        PreparedStatement pst = conn.createStatement(sql);  
  33.          
  34.         //4.执行语句    
  35.         //使用Statement对象  
  36.         st.executeQuery("sql");    
  37.         //使用PrepareStatement对象  
  38.         pst.executeQuery();  
  39.           
  40.         //5.处理结果    
  41.         //使用Statement对象  
  42.         ResultSet rs=st.executeQuery("sql");    
  43.         //使用PrepareStatement对象  
  44.         ResultSet rs=pst.executeQuery();  
  45.           
  46.         //6.释放资源,资源rs、st、conn的释放顺序与创建顺序相反    
  47.         rs.close();    
  48.         st.close();    
  49.         conn.close();    
  50.     }  </span>  

       在实际的开发使用中,我们需要将上边的代码进行封装优化。将注册驱动、建立连接、释放资源的额操作封装到一个工具类中,然后采用单例模式为该类加锁(synchronize)来限制多线程冲突的问题。


0 0
原创粉丝点击