1. 程式人生 > >day22 Java語言中的------JDBC連接

day22 Java語言中的------JDBC連接

day22 java語言中的------jdbc連接

day22 Java語言中的------JDBC連接

一、JDBC概述:

“JDBC”就是Java連接數據庫,根據數據庫的不同建立的連接也有一定的區別。我們主要還是對MySQL數據庫進行數據的操作。JDBC架構中主要包含兩種:一種是JDBC應用程序層,一種是JDBC驅動程序層。下表是JDBC與各種數據庫連接的圖示。下面就具體的來了解一下Java與數據庫之間的一個關系。

技術分享圖片

二、JDBC:

在具體開始學習JDBC之前,做好相應的準備工作。在MySQL數據庫官網下載好相應的jar包(mysql-connector-java-5.1.24-bin.jar),在MySQL數據庫中建立好test數據庫,以及一張emp數據表,對數據表做好相應的數據準備。


1、使用JDBC連接數據庫的基本步驟:

在Java語言中,我們隊數據庫的連接使用jdbc技術,一般分為以下幾個步驟。

1.1、加載驅動:使用Class.forName("......");

1.2、建立連接:使用DriverManager.getConnection("......");

1.3、創建SQL語句對象。createStatement()

1.4、通過SQL對象調取相應的sql語句執行的方法

具體實例:

//使用JDBC連接數據庫
package www.com.c1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC01 {

	
	/*
	* 1、com.mysql.jdbc.Driver。加載驅動,這個是固定語法,根據不同的數據庫可以更改。
	* 2、jdbc:mysql://。類似於協議
	* 3、localhost:3306/。安裝數據庫的本地主機和端口號。也可以改為IP地址和端口號
	* 4、test。數據庫名
	* 5、?,&。表示所帶的參數,和參數之間的連接。
	* 6、user。數據庫的用戶名是什麽?
	* 7、password。數據庫的密碼是什麽?
	*/
	//連接方式一
	private static final String URL01 = 
			"jdbc:mysql://localhost:3306/test?user=root&password=123456";
	
	    //連接方式二
	    /*private static final String URL02 ="jdbc:mysql://localhost:3306/test";
	        private static String user ="root";
	        private static String password = "123456";
	    */
	//創建連接的對象
	private static Connection connection;
	
public static void main(String[] args) {
		try {
		//1、加載驅動
		Class.forName("com.mysql.jdbc.Driver");
			
		//2、建立連接,方式一。並創建連接對象。
		connection = DriverManager.getConnection(URL01);
			
			/*	//建立連接,方式二。
				DriverManager.getConnection(URL02, user, password);
			*/
		//3、創建SQL語句對象。
		Statement statement = connection.createStatement();
	
//一、執行查詢語句。		
		//(1)、只能執行查詢的sql語句,並使用resultSet結果集來接收存儲查詢到的所有結果
		ResultSet resultSet = statement.executeQuery("select * from emp");
		//(2)、遍歷結果集
		while (resultSet.next()) {
			//輸出結果集
			System.out.println(
					"id:"+resultSet.getInt("id")+";"+
					"用戶名:"+resultSet.getString("username")+";"+
					"密碼:"+resultSet.getString("password"));
			}
//二、執行更新語句。
		//(1)更新數據。註意使用更新操作的時候返回值是int類型,即某行數據是否受影響
		int updateCount = statement.executeUpdate(
		"update emp set password=888888 where id=2");
			
		//(2)判斷是否更新成功。
		        if (updateCount>0) {
				System.out.println("更新成功!");
			} else {
				System.out.println("更新失敗!");
			}
			
//三、執行任意的sql語句。		
	//返回值:註意返回類型是布爾類型,主要分為兩種。
	          //一般在創建表或創建數據庫的時候最適用。
	    //返回true時:執行的是select語句
	   //返回false時:執行的是插入、更新、刪除、或者是create語句
    //if not exists關鍵字是判斷該表是否存在,如果存在就不創建
	    boolean create = statement.execute(
		"create table if not exists test(id int primary key,name varchar(20))");
		
		if (create = true) {
		    System.out.println("創建成功!");
		} else {
			System.out.println("創建失敗!");
		}
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
    }
}

2、通過JDBC連接技術,實現“動態sql”操作數據表。

具體實例:

//JDBC中的使用動態sql查詢數據
package www.com.c1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC02 {
		//定義連接數據庫字符
		private static final String URL = 
			        "jdbc:mysql://localhost:3306/test";
		//定義字符接收連接數據
		private static Connection connection;
			
public static void main(String[] args) {
		try {
			
		//1、加載驅動
		Class.forName("com.mysql.jdbc.Driver");
			
		//2、建立連接
		connection = DriverManager.getConnection(URL, "root", "123456");
			
		//3、編譯動態sql
		PreparedStatement ps = connection.prepareStatement(
				"select * from emp where id=? and username=?");
			
		//4、假設用戶從頁面上傳遞id和username兩個參數,
		    //並作為查詢條件查詢數據。★★★★
			int id = 2;
			String username = "ls";
			
		//5、將用戶傳遞過來的id和username復制到動態sql的?處,作為條件
			ps.setInt(1, id);
			ps.setString(2, username);
		//註意:在這一步復制的時候,1代表第一個問號,2代表第二個問號,
			//問號是從小標1開始的,不是0.
			
		//6、使用ps調用executeQuery()方法,
					//並將查詢到的結果集接收,ResultSet表示結果集
			ResultSet resultSet = ps.executeQuery();
				
		//7、輸出查詢到的結果
			while (resultSet.next()) {
			    System.out.println("ID為:"+resultSet.getInt("id"));
			    System.out.println("用戶名為:"+
			        resultSet.getString("username"));
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e){ 
			e.printStackTrace();
		}
	}
}

3、使用屬性文件和封裝sql執行方法來操作數據表。

屬性文件:就是將一些不改變的代碼寫入一個文件中,通過調取這個文件直接就可以實現連接。同時在更改數據庫信息的時候就只需要更改屬性文件即可。不需要更改指定的代碼。


具體實例:

(1)、建立屬性文件。

在項目的“SRC”一級目錄下新建一個文件。new-->Other-->輸入Text file就可以創建了。將相關的屬性寫入到這個文件中

    #連接jdbc的屬性文件

    driver = com.mysql.jdbc.Driver
    URL = jdbc:mysql://localhost:3306/test
    username = root
    password = 123456

命名為:jdbc.properties文件。


(2)、創建JdbcMethod類。用來封裝相應的方法。並連接對應的屬性文件。

package www.com.c2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

//主要用於封裝使用動態sql的所有方法。以及數據庫的屬性文件連接
	//註意:我們再屬性文件jdbc.properties中已經將各種屬性寫好了,我們只需要應用。

public class JdbcMethod {

//1、使用構造函數建立數據庫連接:
//   在jdbctest類中是創建該類的對象,
//   我們可以直接通過構造函數來建立連接,因為構造函數是在創建對象的時刻就執行代碼。
	
		//  3)定義conn接收連接數據
				private Connection connection;
	
	public JdbcMethod(){
		//  1)加載屬性文件
		ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
			String driver = bundle.getString("driver");
			String url = bundle.getString("URL");
			String user = bundle.getString("username");
			String password = bundle.getString("password");
		
			try {
				
		//	2)加載驅動
				Class.forName(driver);
		
		//	4)建立連接
			  connection = DriverManager.getConnection(url, user, password);
				
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
//---------------------------------------------------

//2、寫動態sql
			
	// 1)、封裝實現insert、update、delete操作
		public int excuteUpdate(String sql){
			
			Statement statement;
			int count = 0;
			try {
				//(1):創建sql對象
				statement = connection.createStatement();
				//(2):執行更新語句
				count = statement.executeUpdate(sql);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return count;
		}
	// 2)、封裝實現查詢語句
		public ResultSet excuteQuery(String sql){
			Statement statement;
			ResultSet rs = null;
			
			try {
				//(1):創建sql對象
				statement = connection.createStatement();
				//(2):執行相關的查詢語句
				rs = statement.executeQuery(sql);
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return rs;
		}
			
//3、使用帶多個問號的方式封裝動態sql的查詢【★★★★★】
		/**
		 * @param sql:是需要執行的查詢,可以帶問號或者不帶問號。
		 * @param ...:代表不可預估的帶問號的個數。
		 * @param params:在sql中需要的參數
		 * @return	【執行查詢】
		 */
		public ResultSet excuteQuery(String sql , Object ... params ){
		
			PreparedStatement preparedStatement;
			ResultSet resultSet = null;
			
			try {
				//調取執行sql的方法,
				preparedStatement = connection.prepareStatement(sql);
				
				//判斷sql語句中是否帶有?。
				if (params != null && params.length > 0){
					//如果有就對問號進行賦值
					for (int i = 0; i < params.length; i++) {
					preparedStatement.setObject(i+1 , params[i] );
					}
				}
				
				resultSet = preparedStatement.executeQuery();
				
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
			return resultSet;
		}
}

(3)、新建一個JdbcTest類,帶有主函數。

package www.com.c2;

import java.sql.ResultSet;

//主要調取封裝的動態sql的方法,

public class JdbcTest {

	public static void main(String[] args) {
		
		JdbcMethod jdbcMethod = new JdbcMethod();
		
	//創建相應的sql語句去操作數據表。
		int inser = jdbcMethod.excuteUpdate("insert into emp values()");
		int update = jdbcMethod.excuteUpdate("update emp set  where");
		int delete = jdbcMethod.excuteUpdate("delete from emp where....");
		
	//2、執行查詢語句、返回的是結果集
		ResultSet resultSet = jdbcMethod.excuteQuery("select* from emp where ");			
	}
}


四、結束語

到這裏我們就把JDBC的一些常用的方法說完了,記住,連接數據庫無須就對表中數據的增刪改查。一定要掌握使用動態sql的方法去操作數據庫和思想。

本文出自 “程序猿” 博客,轉載請與作者聯系!

day22 Java語言中的------JDBC連接