Java使用JDBC連接mySQL數據庫小例子

Java連接mySQL數據庫時,需要使用到一個Jar包,如:"mysql-connector-java-5.0.5-bin.jar",此爲連接數據庫

的驅動包,將其導入所在工程的lib目錄下,並Build Path,即可進行引用。

注意:如果你沒有添加jar程序驅動包的話編譯的時候發現以下問題:

Sorry,can`t find the Driver!

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

    atjava.net.URLClassLoader$1.run(Unknown Source)

    atjava.net.URLClassLoader$1.run(Unknown Source)

    atjava.security.AccessController.doPrivileged(Native Method)

    atjava.net.URLClassLoader.findClass(Unknown Source)

    atjava.lang.ClassLoader.loadClass(Unknown Source)

    atsun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

    atjava.lang.ClassLoader.loadClass(Unknown Source)

    atjava.lang.Class.forName0(Native Method)

     atjava.lang.Class.forName(Unknown Source)

這裏可供下載驅動包:http://dev.mysql.com/downloads/connector/j/,導入Jar後,接下來進行操作。


1、新建一個名爲BDHelper的工具類:爲外界提供數據庫連接對象。

package util;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBHelper {
	
	//mysql數據庫驅動,固定寫法。連接Oracle時又與之不同,爲:"oracle.jdbc.driver.OracleDriver"
	private static final String driver = "com.mysql.jdbc.Driver"; 

	/**
	* 如下是連接數據庫的URL地址,
	* 其中,"jdbc:mysql://"   爲固定寫法
	* "localhost"是連接本機數據庫時的寫法,當不是連接本機數據庫時,要寫數據庫所在計算機的IP地址。如:172.26.132.253
	* "shopping"是數據庫的名稱,一定要根據自己的數據庫更改。
	* "?useUnicode=true&characterEncoding=UTF-8" 指定編碼格式,無需時可省略,
	* 即地址直接爲:"jdbc:mysql://localhost:3306/shopping"
	*/
	private static final String url="jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8"; 
	
	private static final String username="root";//數據庫的用戶名
	private static final String password="123456";//數據庫的密碼:這個是自己安裝數據庫的時候設置的,每個人不同。
    
	private static Connection conn=null;  //聲明數據庫連接對象
	
	//靜態代碼塊負責加載驅動
	static 
	{
		try
		{
			Class.forName(driver);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	//單例模式返回數據庫連接對象,供外部調用
	public static Connection getConnection() throws Exception
	{
		if(conn==null)
		{
			conn = DriverManager.getConnection(url, username, password); //連接數據庫
			return conn;
		}
		return conn;
	}
	
	//寫main方法測試是否連接成功,可將本類運行爲Java程序先進行測試,再做後續的數據庫操作。
	public static void main(String[] args) {
		
		try
		{
		   Connection conn = DBHelper.getConnection();
		   if(conn!=null)
		   {
			   System.out.println("數據庫連接正常!");
		   }
		   else
		   {
			   System.out.println("數據庫連接異常!");
		   }
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
		
	}
}

2、在已有的數據庫中,建立數據庫表tb_user,這裏使用的是Navicat數據庫管理工具進行建表操作。



3、建立與tb_user表對應的實體類:

package service;

/**
 * 對應數據庫在中的tb_user表
 */
public class User {
	
	private int id;
	
	private String name;
	
	private String pwd;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
}

4、調用DBHelper工具類進行數據庫操作:

package service;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import util.DBHelper;

public class dao{

	// 數據庫連接對象,注意:是導入“java.sql.Connection”此包下的連接對象。
	private static Connection conn = null; 

	// PreparedStatement對象用來執行SQL語句
	private static PreparedStatement pst = null; 

	//結果集
	private static ResultSet rs = null;

	//保存查詢到的實體集合
	List list = null;

	/**
	 * 查詢數據庫,獲取一個User類型的list集合
	 */
	public List getUsers(){
		list = new ArrayList<User>();

		try {
			conn=DBHelper.getConnection();  //從DBHelper獲取連接對象

			// 創建statement 執行數據庫語句,第一不預處理,第二步纔是正式。執行的語句可以修改.
			// 不過爲了防止SQl注入。騙取登錄,所以最好創建它的子類PreparedStatement 
			pst = conn.prepareStatement("SELECT * FROM users");// 預處理

			rs = pst.executeQuery();// 這裏纔是執行,獲得數據。 

			// 遍歷處理結果集,用while 方法next方法,相當於指針依次下移,獲得每一行表的數據 

			while (rs.next()) {

				User user=new User(); 

				/**
				 * 兩種get,
				 * 一種是根據下標 從1開始每一列, 
				 * rs.getInt(1); 
				 * rs.getString(2); 
				 * rs.getString(3);
				 * 第二個是根據列名查找。根據表的列數據類型使用不同的個體方法 
				 */

				//爲user屬性賦值
				user.setId(rs.getInt(1));
				user.setName(rs.getString(2));
				user.setPwd(rs.getString(3)); 

				//將user對象添加到list集合中
				list.add(user); 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 關閉資源.一定要關閉資源。數據庫的每一個連接都佔據服務器資源。
			// 我們寫代碼的時候感覺不到, 
			// 但是一旦服務器運行個三五天,連接就會不斷地增加,最終導致資源不足,
			// 服務器將自動關機來強行關閉連接。 
			// 而且這裏面,不僅這裏,全部過程都不要拋出異常,而是要捕捉處理異常,不然也會導致資源浪費。
			//即使前面拋出異常,程序中斷,也會執行關閉資源,而不影響浪費。
			
			try {
				// 這裏最好要先判斷是否爲空,不爲空了,纔去關閉。 
				// 而且要從小到大的關閉,順序不能亂 
				if (rs != null) 
					rs.close(); 
				if (pst != null) 
					pst.close(); 
				/*if (conn != null) 
					conn.close(); */    //注意:如果後續還要使用connection,則不用關閉
			} catch (SQLException e) 
			{ 
				e.printStackTrace(); 
			}
		}
		return list;
	}
}


5、獲得此數據集合後,根據需要進行相應的操作。

......



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