JDBC簡介及數據源配置

          Java中JDBC定義了java與各種sql數據庫之間的編程接口,JDBC API是一個統一的標準應用程序編程接口,這樣可以屏蔽異種數據庫之間的差異。 一般來說JDBC驅動分爲四種類型:1,jdbc-odbc橋,2,jdbc-native方法,3,jdbc-網絡,4,jdbc驅動。

          第一種是需要調用odbc 的,所以在性能上會差一點,而且要求電腦上必須要有odbc 的庫,這個用的比較少。

          第二種是本地API部分用java編寫的驅動,使用過程中必須安裝與數據庫相關的客戶 端程序,其實是驅動調用客戶端程序再訪問dbms

          第三種是jdbc網絡純java的驅動,jdbc調用網絡中間件,然後再訪問dbms

          第四種則是我們用的最多的一種,本地協議純java的驅動,將jdbc調用轉換爲dbms的調用,中間需要用到jar包

         下面這篇文章簡述了jdbc的優缺點,也可以看看:http://blog.csdn.net/zzj5385/article/details/4311892


          另外,連接數據庫操作從內原理來講就是先通過驅動獲得連接,然後再通過連接對數據庫進行處理,那麼從操作上來看可分爲3種:(1)直接將連接操作放在程序中,每次新建連接;(2)通過windows的數據源來配置,其中就會初始化若干個連接,但是這個用的好像比較少;(3)通過JNDI方式配置數據源,在web開發中經常用到。

         下面,通過一個例子程序來說明通過配置數據源,JDBC連接Mysql數據庫的例子

(1)添加jar包: mysql-connector-java-5.1.12-bin.jar

(2)eclipse下Servers中配置server.xml的   <GlobalNamingResources> </GlobalNamingResources>中加入:

<Resource name="jdbc/webgpsDS" 
             auth="Container" type="javax.sql.DataSource" 
             username="root"  password="12345" 
             driverClassName="com.mysql.jdbc.Driver" 
             url="jdbc:mysql://localhost:3306/webgps" 
             maxActive="100" maxIdle="30" maxWait="5000"/>
(3)context.xml中的<Context></Context>中加入:

<ResourceLink name="jdbc/webgpsDS" global="jdbc/webgpsDS" type="javax.sql.DataSourcer"/>

(4)項目web-inf目錄下web.xml文件中(最後)加入:(測試發現這步可有可無)

  <resource-ref>
	    <description>DB Connection</description>
	    <res-ref-name>jdbc/webgpsDS</res-ref-name>
	    <res-type>javax.sql.DataSource</res-type>
	    <res-auth>Container</res-auth>
     </resource-ref> 

(5)java程序

package com;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class Dao {
	protected static InitialContext context = null; //不會重複初始化
	protected DataSource dataSource = null;

	public Dao() {
		try {
            if(context == null) {
                context = new InitialContext();
            }
            System.out.println("dao init");
            dataSource = (DataSource) context.lookup("java:comp/env/jdbc/webgpsDS");
            
            Connection conn = dataSource.getConnection();   
    		Statement stmt = conn.createStatement();   
    		ResultSet rs = stmt.executeQuery("select * from TB_RR");   
    		while (rs.next()) {
    			System.out.println("conn success!");
    		}
    		
        } catch (NamingException | SQLException e) {
            e.printStackTrace();
            System.out.println("conn fail:  "+e.toString());
        }
		
		
	}
}

        測試的servlet程序

package com;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ConnServlet
 */
@WebServlet("/ConnServlet")
public class ConnServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public Dao dao = new Dao();
    
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("ConnServlet.doPost()");
	}
	
	
	
	
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    		throws ServletException, IOException {
    	this.doPost(req, resp);
    }

}
完整程序:http://pan.baidu.com/s/1gdy1aef



發佈了39 篇原創文章 · 獲贊 15 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章