JDBC粗淺理解

JDBC概念:

JDBC簡而言之就是java數據庫連接。

JDBC訪問數據庫支持兩層模型,也支持三層模型。

我使用的服務端是mysql,在使用JDBC操作數據庫之前必須的做如下工作:

下載mysql-connector-java-5.1.39-bi.jar包,將其放到工程目錄的lib文件下,添加buildpath即可。

JDBC只要掌握3個主要類基本上就算入門了(注意jdbc用到的類均應用java.sql包下)。

1.Connection

程序與數據庫的連接類,是基於TCP協議的連接,連接需要三次握手花時相對較長,因此連接需要進行重用,且連接完畢需要關閉否則容易導致數據庫連接次數用完。獲得Connection對象的方法如下:

/**
		 * url指的是jdbc協議地址
		 * user 連接mysql的用戶名
		 * password 密碼
		 */
		Connection conn = DriverManager.getConnection(url, user, password);

2.Statement

執行SQL語句的類,代碼如下:

//獲取Statement對象
		Statement st = conn.createStatement();
		//該方法對應的是sql語句中的select
		st.executeQuery(sql); 
		//該語句對應的是sql語句中的insert,delete,update
		st.executeUpdate(sql);

3.ResultSet

結果集,這個是statement執行executeQuery()方法時纔會返回的結果集。

下面就要敲代碼來看看怎麼連接mysql的了:

在這之前先要寫入連接數據庫的配置信息db.properties,包含url,user,password

放在src目錄下,結構如下

db.properties裏面代碼如下


根據Connection要求,我們需要對連接類進行重用,所以我把連接的操作封裝到一個工具類中DBUtil,利用餓漢式單例,代碼如下:


import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 惡漢單例,重用conn
 * 
 */
public class DBUtil {

	private static Connection conn;
	/**
	 * 獲取Connection實例的方法
	 * @return
	 */
	public static Connection getConnection() {
		if (conn == null) {
			Properties p = getProperties();
			try {
				conn = DriverManager.getConnection(p.getProperty("url"),
						p.getProperty("user"), p.getProperty("password"));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return conn;
	}
	/**
	 * 獲取db文件屬性類的方法
	 */
	private static Properties getProperties() {
		Properties p = new Properties();
		try {
			p.load(DBUtil.class.getClassLoader().getResourceAsStream(
					"db.properties"));
			return p;
		} catch (IOException e) {
			e.printStackTrace();
		}

		return null;
	}
	/**
	 * 關閉資源
	 * @param rs
	 * @param st
	 * @param conn
	 */
	public static void close(ResultSet rs, Statement st, Connection conn){
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	

}
然後就是三大類讀取操作數據庫信息登場,我這裏只實現了查詢數據,代碼如下

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

import com.csdn.bean.Dept;


public class ConnectionDemo {
	Connection conn = DBUtil.getConnection();

	public static void main(String[] args) {
		ConnectionDemo cd = new ConnectionDemo();
		Dept dept = cd.setectDept(10);
		System.out.println(dept);
	}
	/**
	 * 根據部門id
	 * 查詢dept表中數據方法
	 */
	private Dept setectDept(int deptno) {
		Statement st = null;
		ResultSet rs = null;
		Dept dept = null;
		try {
			st = conn.createStatement();
			String sql = "select * from dept where deptno = '" + deptno + "'";
			rs = st.executeQuery(sql);
			if (rs.next()) {
				dept = new Dept();
				dept.setDeptno(rs.getInt("deptno"));
				dept.setDname(rs.getString("dname"));
				dept.setLoc(rs.getString("loc"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			DBUtil.close(rs,st,conn);
		}
		return dept;
	}

}

to be continue......





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章