java jdbc 連接mysql資料庫 實現增刪改查

来源:http://www.cnblogs.com/AlanLee/archive/2016/07/09/5656640.html
-Advertisement-
Play Games

好久沒有寫博文了,寫個簡單的東西熱熱身,分享給大家。 jdbc相信大家都不陌生,只要是個搞java的,最初接觸j2ee的時候都是要學習這麼個東西的,誰叫程式得和資料庫打交道呢!而jdbc就是和資料庫打交道非常基礎的一個知識,也是比較接近底層的,在實際的工作中大家用得更多的其實還是比較成熟的框架,例如 ...


好久沒有寫博文了,寫個簡單的東西熱熱身,分享給大家。

jdbc相信大家都不陌生,只要是個搞java的,最初接觸j2ee的時候都是要學習這麼個東西的,誰叫程式得和資料庫打交道呢!而jdbc就是和資料庫打交道非常基礎的一個知識,也是比較接近底層的,在實際的工作中大家用得更多的其實還是比較成熟的框架,例如Hibernate、Mybatis。

但是作為這些成熟框架的底層的jdbc卻也是我們應該去掌握的,只有瞭解了jdbc的增刪改查,這樣在以後如果有興趣去研究Hibernate或者Mybatis的源代碼的時候才能更好的去理解這些成熟的框架是如何去實現增刪改查的。

回歸正題,先來看看我們的開發環境:

Java語言、Eclipse開發工具、Mysql資料庫、Navicat資料庫可視化工具。

開發環境的安裝搭建及使用請自己查閱資料(很簡單的),這裡不詳細闡述。

第一步,創建資料庫,利用Navicat資料庫可視化工具隨便建立一個資料庫,在庫中建立一張表,表裡給幾個欄位(記得給個id欄位,唯一主鍵,自增序列),再隨便給上兩條數據便好,用來測試功能,如圖:

 

第二步,打通資料庫(這個例子希望大家自己動手敲敲,耽誤不了多少時間,熟悉一下jdbc如何和資料庫打交道,故以圖示之),如圖:

 

第三步,改造DBUtil類,方便在dao層獲得資料庫的連接,代碼如下:

 1 package com.czgo.db;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 
 7 public class DBUtil
 8 {
 9     private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc";
10     private static final String UNAME = "root";
11     private static final String PWD = "root";
12 
13     private static Connection conn = null;
14 
15     static
16     {
17         try
18         {
19             // 1.載入驅動程式
20             Class.forName("com.mysql.jdbc.Driver");
21             // 2.獲得資料庫的連接
22             conn = DriverManager.getConnection(URL, UNAME, PWD);
23         }
24         catch (ClassNotFoundException e)
25         {
26             e.printStackTrace();
27         }
28         catch (SQLException e)
29         {
30             e.printStackTrace();
31         }
32     }
33 
34     public static Connection getConnection()
35     {
36         return conn;
37     }
38 }

 

第四步,創建實體類(如上圖,大家觀察包的分配,我們將採用MVC思想設計本實例,有關於mvc的設計思想,請大家自行學習,這裡不多說)代碼如下:

 1 package com.czgo.model;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * 實體類:女神類
 7  * 
 8  * @author AlanLee
 9  * 
10  */
11 public class Goddess implements Serializable
12 {
13     private static final long serialVersionUID = 1L;
14 
15     /**
16      * 唯一主鍵
17      */
18     private Integer id;
19     /**
20      * 姓名
21      */
22     private String name;
23     /**
24      * 手機號碼
25      */
26     private String mobie;
27     /**
28      * 電子郵件
29      */
30     private String email;
31     /**
32      * 家庭住址
33      */
34     private String address;
35 
36     public Integer getId()
37     {
38         return id;
39     }
40 
41     public void setId(Integer id)
42     {
43         this.id = id;
44     }
45 
46     public String getName()
47     {
48         return name;
49     }
50 
51     public void setName(String name)
52     {
53         this.name = name;
54     }
55 
56     public String getMobie()
57     {
58         return mobie;
59     }
60 
61     public void setMobie(String mobie)
62     {
63         this.mobie = mobie;
64     }
65 
66     public String getEmail()
67     {
68         return email;
69     }
70 
71     public void setEmail(String email)
72     {
73         this.email = email;
74     }
75 
76     public String getAddress()
77     {
78         return address;
79     }
80 
81     public void setAddress(String address)
82     {
83         this.address = address;
84     }
85 }

第五步,dao層的實現(這裡由於是小例子沒有寫dao介面,實際工作中大型項目應該是要寫dao介面的,便於程式的維護和擴展),代碼如下:

  1 package com.czgo.dao;
  2 
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9 
 10 import com.czgo.db.DBUtil;
 11 import com.czgo.model.Goddess;
 12 
 13 /**
 14  * 數據層處理類
 15  * 
 16  * @author AlanLee
 17  * 
 18  */
 19 public class GoddessDao
 20 {
 21     /**
 22      * 查詢全部女神
 23      * 
 24      * @return
 25      * @throws SQLException
 26      */
 27     public List<Goddess> query() throws SQLException
 28     {
 29         List<Goddess> goddessList = new ArrayList<Goddess>();
 30 
 31         // 獲得資料庫連接
 32         Connection conn = DBUtil.getConnection();
 33 
 34         StringBuilder sb = new StringBuilder();
 35         sb.append("select id,name,mobie,email,address from goddess");
 36 
 37         // 通過資料庫的連接操作資料庫,實現增刪改查
 38         PreparedStatement ptmt = conn.prepareStatement(sb.toString());
 39 
 40         ResultSet rs = ptmt.executeQuery();
 41 
 42         Goddess goddess = null;
 43 
 44         while (rs.next())
 45         {
 46             goddess = new Goddess();
 47             goddess.setId(rs.getInt("id"));
 48             goddess.setName(rs.getString("name"));
 49             goddess.setMobie(rs.getString("mobie"));
 50             goddess.setEmail(rs.getString("email"));
 51             goddess.setAddress(rs.getString("address"));
 52 
 53             goddessList.add(goddess);
 54         }
 55         return goddessList;
 56     }
 57 
 58     /**
 59      * 查詢單個女神
 60      * 
 61      * @return
 62      * @throws SQLException
 63      */
 64     public Goddess queryById(Integer id) throws SQLException
 65     {
 66         Goddess g = null;
 67 
 68         Connection conn = DBUtil.getConnection();
 69 
 70         String sql = "" + " select * from imooc_goddess " + " where id=? ";
 71 
 72         PreparedStatement ptmt = conn.prepareStatement(sql);
 73 
 74         ptmt.setInt(1, id);
 75 
 76         ResultSet rs = ptmt.executeQuery();
 77 
 78         while (rs.next())
 79         {
 80             g = new Goddess();
 81             g.setId(rs.getInt("id"));
 82             g.setName(rs.getString("name"));
 83             g.setMobie(rs.getString("mobie"));
 84             g.setEmail(rs.getString("email"));
 85             g.setAddress(rs.getString("address"));
 86         }
 87 
 88         return g;
 89     }
 90 
 91     /**
 92      * 添加女神
 93      * 
 94      * @throws SQLException
 95      */
 96     public void addGoddess(Goddess goddess) throws SQLException
 97     {
 98         // 獲得資料庫連接
 99         Connection conn = DBUtil.getConnection();
100 
101         String sql = "insert into goddess(name,mobie,email,address) values(?,?,?,?)";
102 
103         PreparedStatement ptmt = conn.prepareStatement(sql);
104 
105         ptmt.setString(1, goddess.getName());
106         ptmt.setString(2, goddess.getMobie());
107         ptmt.setString(3, goddess.getEmail());
108         ptmt.setString(4, goddess.getAddress());
109 
110         ptmt.execute();
111     }
112 
113     /**
114      * 修改女神資料
115      * 
116      * @throws SQLException
117      */
118     public void updateGoddess(Goddess goddess) throws SQLException
119     {
120         Connection conn = DBUtil.getConnection();
121 
122         String sql = "update goddess set name=?,mobie=?,email=?,address=? where id=?";
123 
124         PreparedStatement ptmt = conn.prepareStatement(sql);
125 
126         ptmt.setString(1, goddess.getName());
127         ptmt.setString(2, goddess.getMobie());
128         ptmt.setString(3, goddess.getEmail());
129         ptmt.setString(4, goddess.getAddress());
130 
131         ptmt.execute();
132     }
133 
134     /**
135      * 刪除女神
136      * 
137      * @throws SQLException
138      */
139     public void deleteGoddess(Integer id) throws SQLException
140     {
141         Connection conn = DBUtil.getConnection();
142 
143         String sql = "delete from goddess where id=?";
144 
145         PreparedStatement ptmt = conn.prepareStatement(sql);
146 
147         ptmt.setInt(1, id);
148 
149         ptmt.execute();
150     }
151 }

第六步,控制層的實現(控制層在此處用來模仿控制層和界面,直接在這裡構建數據,如果是界面的數據則通過請求傳遞接收參數即可,控制層的代碼大家可以根據實際情況去更改完善,這裡只是給大家拋磚引玉,做個簡單的測試,時間比較緊,希望大家理解),代碼如下:

 1 package com.czgo.action;
 2 
 3 import java.sql.SQLException;
 4 import java.util.List;
 5 
 6 import com.czgo.dao.GoddessDao;
 7 import com.czgo.model.Goddess;
 8 
 9 /**
10  * 控制層,直接在這裡構建數據,界面的數據則通過請求傳遞接收即可,亦是同理
11  * 
12  * @author AlanLee
13  * 
14  */
15 public class GoddessAction
16 {
17     /**
18      * 新增女神
19      * 
20      * @param goddess
21      * @throws Exception
22      */
23     public void add(Goddess goddess) throws Exception
24     {
25         GoddessDao dao = new GoddessDao();
26         goddess.setName("蒼井空");
27         goddess.setMobie("52220000");
28         goddess.setEmail("[email protected]");
29         goddess.setAddress("北京紅燈區");
30         dao.addGoddess(goddess);
31     }
32 
33     /**
34      * 查詢單個女神
35      * 
36      * @param id
37      * @return
38      * @throws SQLException
39      */
40     public Goddess get(Integer id) throws SQLException
41     {
42         GoddessDao dao = new GoddessDao();
43         return dao.queryById(id);
44     }
45 
46     /**
47      * 修改女神
48      * 
49      * @param goddess
50      * @throws Exception
51      */
52     public void edit(Goddess goddess) throws Exception
53     {
54         GoddessDao dao = new GoddessDao();
55         dao.updateGoddess(goddess);
56     }
57 
58     /**
59      * 刪除女神
60      * 
61      * @param id
62      * @throws SQLException
63      */
64     public void del(Integer id) throws SQLException
65     {
66         GoddessDao dao = new GoddessDao();
67         dao.deleteGoddess(id);
68     }
69 
70     /**
71      * 查詢全部女神
72      * 
73      * @return
74      * @throws Exception
75      */
76     public List<Goddess> query() throws Exception
77     {
78         GoddessDao dao = new GoddessDao();
79         return dao.query();
80     }
81 
82     /**
83      * 測試是否成功
84      * 
85      * @param args
86      * @throws SQLException
87      */
88     public static void main(String[] args) throws SQLException
89     {
90         GoddessDao goddessDao = new GoddessDao();
91 
92         List<Goddess> goddessList = goddessDao.query();
93 
94         for (Goddess goddess : goddessList)
95         {
96             System.out.println(goddess.getName() + "," + goddess.getMobie() + "," + goddess.getEmail());
97         }
98     }
99 }

最後,讓我們看一下main方法的運行結果是否成功:

這樣,一個簡單的java jdbc 連接mysql資料庫 實現增刪改查便完成了,大家可以在查詢的基礎上試著去做一個高級查詢,也就是多條件查詢來鞏固jdbc的使用。

現在21:00,還沒有吃晚飯,時間比較緊,所以沒有給大家一一測試增刪改查的功能,閑著沒事做蛋疼的可以都去測試一下,如果發現問題,希望能夠指正小Alan,小Alan有空的時候便去修正博文中的一些錯誤。

最後的最後,祝大家今晚都能夠做一個美美的夢,小Alan吃晚飯去了,下次再會!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這次沒有忘記,其實也忘了,只不過剛好碰上我換瀏覽器,正好想起來這事! 我把用了很長一段時間的chrome瀏覽器換成搜狗瀏覽器了,好多網站原先記住的用戶名和密碼都沒有了我還需要重新輸入! 今天再放一段美術幫我做的動作,這個比上次的做的還好,連木屐離腳的感覺都做出來了, 我覺得愛玩格鬥游戲的人從這套動作 ...
  • Swift 3.0 Swift 3.0 Swift 2.x Swift 2.x Swift 1.x Swift 1.x ...
  • 表單重覆提交是在多用戶Web應用中最常見、帶來很多麻煩的一個問題。有很多的應用場景都會遇到重覆提交問題,比如: 點擊提交按鈕兩次。 點擊刷新按鈕。 使用瀏覽器後退按鈕重覆之前的操作,導致重覆提交表單。 使用瀏覽器歷史記錄重覆提交表單。 瀏覽器重覆的HTTP請求。 幾種防止表單重覆提交的方法 禁掉提交 ...
  • public class SuperClass{ public void printA(){ System.out.print("SuperClass-printA"); printB(); } public void printB(){ System.out.print("SuperClass-p ...
  • 最近打算寫個簡單的配置中心,考慮到實現便捷性,語言選擇了go,由於其中計劃用到zk,就調研了下golang的zk客戶端,並實現了個簡單的分散式server。 ...
  • ...
  • * 1、繼承自抽象類 AbstractSet,實現介面 Set、Cloneable、Serializable; * 2、元素無順序; * 3、元素不可重覆; * 4、採用哈希演算法插入數據,插入速度快; * 5、非線程安全,輕量級; * 6、由於實現了介面 Cloneable,故此可以被覆制; * 7 ...
  • 按照一般的學習慣例,第一個程式自然就是"Hello World"。 運行結果如上圖。代碼: 在主函數中只需4句話即可創建一個新的視窗,併在其中顯示文字。 第1~2行:包含頭文件。 在Qt中,每一個類都有一個與該類同名的頭文件。 例如主函數中的QApplication類,它的頭文件就是,QLabel類... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...