在實際使用的應用程序中,大部分是需要利用數(shù)據(jù)庫進行數(shù)據(jù)的查詢與操作,因為數(shù)據(jù)庫支持強大的SQL語句,可進行事務處理等。接下為大家介紹如何在Java應用程序中使用JDBC提供的API和數(shù)據(jù)庫進行信息交付。
首先是需要安裝好MySQl數(shù)據(jù)庫,請參考另一篇文章:
把安裝好的數(shù)據(jù)庫安裝好,建立好數(shù)據(jù)庫、創(chuàng)建表后,還需要通過JDBC來操作數(shù)據(jù)庫,
Java通過使用JDBC提供的API來操作數(shù)據(jù)庫,JDBC操作不同的數(shù)據(jù)庫僅僅是連接方式上的差異而已,使用JDBC的應用程序和數(shù)據(jù)庫建立聯(lián)系后就可以對它進行操作了。
使用JDBC需要如下操作:
-
與數(shù)據(jù)庫建立連接
-
向已經(jīng)連接的數(shù)據(jù)庫發(fā)送SQL語句
-
處理SQL語句返回的結果
MySQL數(shù)據(jù)庫服務啟動后,必須先和數(shù)據(jù)庫服務器上的數(shù)據(jù)庫建立連接。Java使用JDBC調(diào)用本地的JDBC-數(shù)據(jù)庫驅(qū)動和相應的數(shù)據(jù)庫建立連接。Java運行環(huán)境將JDBC數(shù)據(jù)庫驅(qū)動轉(zhuǎn)換為DBMS(數(shù)據(jù)庫管理系統(tǒng))所使用的專用協(xié)議來實現(xiàn)和特定的DBMS交互信息,如下圖:
使用JDBC-數(shù)據(jù)庫驅(qū)動方式和數(shù)據(jù)庫建立連接需要經(jīng)歷兩個步驟:
(1) 加載JDBC-數(shù)據(jù)庫驅(qū)動
(2) 和指定的數(shù)據(jù)庫建立連接
先下載JDBC-MySQL數(shù)據(jù)庫驅(qū)動,JDBC下載網(wǎng)址:
https://dev.mysql.com/downloads/file/?id=474258。將下載的zip文件解壓,找到里面的mysql-connector-java-5.1.45-bin.jar文件,把它復制到JDK的擴展目錄中,例如我的是 D:StudyJava1.8.0jrelibext目錄下。
同時因為在安裝JDK時會額外有一個JRE,***將mysql-connector-java-5.1.45-bin.jar文件復制到那個目錄,我的是D:StudyJRE1.8.0libext目錄中,保證及時啟用該環(huán)境運行程序,也會有需要的驅(qū)動。
接下來就是加載JDBC-MySQL數(shù)據(jù)庫驅(qū)動了,代碼如下:
- try {
- Class.forName("com.mysql.jdbc.Driver");
- }
- catch (Excepton e) { }
MySQL數(shù)據(jù)庫驅(qū)動被封裝在Driver類中,包名為com.mysql.jdbc,它不是Java運行環(huán)境類庫中的類,所以需要放置在jre的擴展目錄中。
java.sql包中的DriverManager類有兩個用于建立連接的類方法(static方法):
-
Connection getConnection(java.lang.String,java.lang.String,java.lang.String)
-
Connection getConnection(java.lang.String)
在電腦中找到MySQL Notifier運行它,然后在任務欄右擊它的圖標,選擇MySQL57-Stopped-->Start啟動數(shù)據(jù)庫
接著打開Navicat for MySQL,打開連接,和數(shù)據(jù)庫服務器建立連接后,右擊連接名選擇"新建數(shù)據(jù)庫"命令,在彈出的對話框中填入相應信息,如下所示,建立名為Study的數(shù)據(jù)庫
(查看另一篇文章介紹關于Navicat for MySQL:安裝Navicat for MySQL對MySQL進行管理)
建立好數(shù)據(jù)庫后,右擊Study下的"表"選擇"新建表",填入相應的列名和列名的各種屬性,
點擊保存,輸入表名進行保存,再雙擊表名,填入相應的各類信息,添加新行,點擊"+"
接下來,用一個小小的程序來測試一下對數(shù)據(jù)庫的查詢操作
新建一個Java工程,代碼如下:
- import
- java.sql.*;public class MysqlTest { public static void main(String[]
- args) { //加載JDBC-MySQL驅(qū)動 try { Class.forName("com.mysql.jdbc.Driver"); }
- catch (Exception e) {}
- //同數(shù)據(jù)庫建立連接,其中ip地址后的3306是端口號,study是數(shù)據(jù)庫名稱,加上用戶名和密碼等信息 //設置useSSL為true
- //如果表中記錄有漢字,請加上characterEncoding參數(shù),取值為gb2312或utf-8 Connection con =
- null; String uri =
- "jdbc:mysql://192.168.199.240:3306/study?user=root&password=****&useSSL=true&characterEncoding=utf-8";
- try { con = DriverManager.getConnection(uri); //連接代碼 } catch
- (SQLException e) { System.out.println(e); } //向數(shù)據(jù)庫發(fā)送SQL查詢語句 try {
- Statement sql = con.createStatement(); //聲明并創(chuàng)建SQL語句對象 ResultSet rs =
- sql.executeQuery("SELECT * FROM test"); //查詢test表
- System.out.println("查詢結果:"); while (rs.next()) { //循環(huán)讀取表test每行的數(shù)據(jù)并輸出
- String number = rs.getString(1); String name = rs.getString(2); Date
- date = rs.getDate(3); float height = rs.getFloat(4);
- System.out.printf("%s ",number); System.out.printf("%s ",name);
- System.out.printf("%s ",date); System.out.printf("%s ",height);
- System.out.println(); } con.close(); //關閉數(shù)據(jù)庫連接 } catch (SQLException e) {
- System.out.println(e); } }}
運行這個程序,輸出結果如下: