好久沒有寫博文了,寫個簡單的東西熱熱身,分享給大家。 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吃晚飯去了,下次再會!