精髓——java数据访问

精髓——java数据访问

 

第一节 从底层最终连接方式来看,有下面两种方式

 

一、jdbc-odbc桥

适用于Microsoft Access、Visual FoxPro等

 

二、第三方JDBC驱动

各数据库厂商都提供了相应的驱动程序

 

第二节 从程序架构上来看,有下面这些方式

 

一、临时建立连接。在需要数据的时候才加载驱动,创建Connection(连接)对象,进而创建Statement、ResultSet等对象,使用完毕后调用各对象的close()方法。见示例。

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

 

publicclass ConnectionMySQL {

    publicstaticvoid main(String args[]) {

       try {

           //加载数据库驱动

           Class.forName("com.mysql.jdbc.Driver");

           //获取数据库连接

           Connection con = DriverManager.getConnection(

                  "jdbc:mysql://localhost:3306/chentao","root","admin");

           //提交查询并获取结果集

           Statement stmt=con.createStatement();

           ResultSet rs=stmt.executeQuery("SELECT * FROM student");

           //对结果集进行遍历

           System.out.println(" 学号\t姓名\t年龄 ");

           while(rs.next()) {

              //打印数据

              System.out.print(rs.getString(1)+"\t");

              System.out.print(rs.getString(2)+"\t");

              System.out.println(rs.getInt(3));

           }

           con.close();

           stmt.close();

           rs.close();

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

二、建立公共数据库访问连接类。

该类主要能创建公用的连接,此连接可作为单例存在。(如果提供不止一个connection而不强制成为单例,则可改造成所谓的“连接池”)。应用程序在需要数据的时候每次都使用此公共数据库访问连接类。应用程序用完数据后可能需要调用一些close()方法来关闭一些对象。

 

公共数据库访问连接类举例:

下面的代码以连接mysql数据库为例。类DB_Connection包含一个获得单例连接的方法getConnection(),和4个关闭必要对象的方法。可以扩展DB_Connection以使其功能更丰富。

 

本例参见了下面两本书:

《Struts与hibernate实用教程》邬继成 第24页 含有一个提供单例连接的所谓连接池的写法

《javaweb程序设计与项目实践》古乐声 第82页

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

publicclass DB_Connection {

    privatestatic Connection conn;//这将是该类能提供的唯一一个连接

    privatestatic String driverName = "com.mysql.jdbc.Driver";

    privatestatic String userName = "root";

    privatestatic String userPwd = "admin";

    privatestatic String dbName = "chentao";

    privatestatic String url = "jdbc:mysql://localhost:3306/"+dbName;

   

    // 私有构造器,避免用户调用而生成多个DB_Connection实例

    private DB_Connection() {}

 

    // 获得连接的静态公共方法

    publicstatic Connection getConnection() {

 

       try {

           if (conn == null) {

              Class.forName(driverName);

              conn = DriverManager.getConnection(url, userName, userPwd);

              returnconn;

           } elseif ((conn != null) &&(conn.isClosed()) ){

              Class.forName(driverName);

              conn = DriverManager.getConnection(url, userName, userPwd);

              returnconn;

           }

           elsereturnconn;

       } catch (ClassNotFoundException e) {

           e.printStackTrace();

       } catch (SQLException e) {

           e.printStackTrace();

       }

       returnconn;

    }

 

    // 关闭ResultSet

    publicvoid close(ResultSet rs) {

       if (rs != null)

           try {

              rs.close();

           } catch (SQLException e) {

              e.printStackTrace();

           }

    }

 

    // 关闭Statement

    publicvoid close(Statement stmt) {

       if (stmt != null)

           try {

              stmt.close();

           } catch (SQLException e) {

              e.printStackTrace();

           }

    }

 

    // 关闭PreparedStatement

    publicvoid close(PreparedStatement pstmt) {

       if (pstmt != null)

           try {

              pstmt.close();

           } catch (SQLException e) {

              e.printStackTrace();

           }

    }

 

    // 关闭Connection

    publicvoid close(Connection conn) {

       if (conn != null) {

           try {

              conn.close();

           } catch (SQLException e) {

              e.printStackTrace();

           }

       }

    }

}

 

三、使用数据源连接池。

数据源连接池通常由容器(中间件)管理,负责分配、管理和释放数据库连接。系统设计者应根据现实情况来对数据源进行一些配置,比如最大、最小连接数。在容器中配置的一个好处是松耦合,并且容器可能提供了一些比较好的优化策略,当然,这些策略有时也要系统设计者来参与设置。

参见《Tomcat与JavaWeb开发技术详解》封超。

java的数据源连接池设计与javax.sql.DataSource和JNDI有关。应用程序员不需要编写连接数据库代码,而是查找容器中是否有相关的服务。比如下述代码

      Context ctx=null;

      DataSource ds=null;

      java.sql.Connection con=null;

      try {

          ctx=new InitialContext();

          //通过JNDI找到数据源

          ds=(DataSource)ctx.lookup("java:comp/env/dataSource");

          //获取数据库连接

          con=ds.getConnection();

          //提交查询并获取结果集

          stmt=con.createStatement();

          String sql="SELECT * FROM student";

          rs=stmt.executeQuery(sql);

          //后续代码

          }

 

应用程序需要导入的包有javax.sql.*、javax.naming.*。

Tomcat连接池本身的配置可以在server.xml里的<context>节点下的<Resource>节点中完成,可能随版本会有变化,详见相关资料。

 

四、使用框架。如hibernate。既带来了松耦合,而且在多线程并发处理、和事务操作时这些框架带来了安全。应用程序员需要进行一些配置,对于这些框架的内部原理,应用程序员可以不必知道。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值