標籤:
好久沒有寫博文了,寫個簡單的東西熱熱身,分享給大家。
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 static16 {17 try18 {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 Serializable12 {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 SQLException117 */118 public void updateGoddess(Goddess goddess) throws SQLException119 {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 SQLException138 */139 public void deleteGoddess(Integer id) throws SQLException140 {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 AlanLee13 * 14 */15 public class GoddessAction16 {17 /**18 * 新增女神19 * 20 * @param goddess21 * @throws Exception22 */23 public void add(Goddess goddess) throws Exception24 {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 id37 * @return38 * @throws SQLException39 */40 public Goddess get(Integer id) throws SQLException41 {42 GoddessDao dao = new GoddessDao();43 return dao.queryById(id);44 }45 46 /**47 * 修改女神48 * 49 * @param goddess50 * @throws Exception51 */52 public void edit(Goddess goddess) throws Exception53 {54 GoddessDao dao = new GoddessDao();55 dao.updateGoddess(goddess);56 }57 58 /**59 * 刪除女神60 * 61 * @param id62 * @throws SQLException63 */64 public void del(Integer id) throws SQLException65 {66 GoddessDao dao = new GoddessDao();67 dao.deleteGoddess(id);68 }69 70 /**71 * 查詢全部女神72 * 73 * @return74 * @throws Exception75 */76 public List<Goddess> query() throws Exception77 {78 GoddessDao dao = new GoddessDao();79 return dao.query();80 }81 82 /**83 * 測試是否成功84 * 85 * @param args86 * @throws SQLException87 */88 public static void main(String[] args) throws SQLException89 {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吃晚飯去了,下次再會!
java jdbc 串連mysql資料庫 實現增刪改查