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連接