JDBC 使用說明(流程、架構(gòu)、編程)
JDBC API 允許用戶訪問任何形式的表格數(shù)據(jù),尤其是存儲在關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)。
執(zhí)行流程:
•連接數(shù)據(jù)源,如:數(shù)據(jù)庫。
•為數(shù)據(jù)庫傳遞查詢和更新指令。
•處理數(shù)據(jù)庫響應(yīng)并返回的結(jié)果。
JDBC 架構(gòu)
分為雙層架構(gòu)和三層架構(gòu)。
雙層
作用:此架構(gòu)中,Java Applet 或應(yīng)用直接訪問數(shù)據(jù)源。
條件:要求 Driver 能與訪問的數(shù)據(jù)庫交互。
機(jī)制:用戶命令傳給數(shù)據(jù)庫或其他數(shù)據(jù)源,隨之結(jié)果被返回。
部署:數(shù)據(jù)源可以在另一臺機(jī)器上,用戶通過網(wǎng)絡(luò)連接,稱為 C/S配置(可以是內(nèi)聯(lián)網(wǎng)或互聯(lián)網(wǎng))。
三層
側(cè)架構(gòu)特殊之處在于,引入中間層服務(wù)。
流程:命令和結(jié)構(gòu)都會經(jīng)過該層。
吸引:可以增加企業(yè)數(shù)據(jù)的訪問控制,以及多種類型的更新;另外,也可簡化應(yīng)用的部署,并在多數(shù)情況下有性能優(yōu)勢。
歷史趨勢: 以往,因性能問題,中間層都用 C 或 C++ 編寫,隨著優(yōu)化編譯器(將 Java 字節(jié)碼 轉(zhuǎn)為 高效的 特定機(jī)器碼)和技術(shù)的發(fā)展,如EJB,Java 開始用于中間層的開發(fā)這也讓 Java 的優(yōu)勢突顯出現(xiàn)出來,使用 Java 作為服務(wù)器代碼語言,JDBC隨之被重視。
JDBC 編程步驟
加載驅(qū)動程序:
Class.forName(driverClass) //加載MySql驅(qū)動 Class.forName("com.mysql.jdbc.Driver") //加載Oracle驅(qū)動 Class.forName("oracle.jdbc.driver.OracleDriver")
獲得數(shù)據(jù)庫連接:
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
創(chuàng)建Statement\PreparedStatement對象:
conn.createStatement();
conn.prepareStatement(sql);
完整實(shí)例
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; public static void main(String[] args) throws Exception { //1.加載驅(qū)動程序 Class.forName("com.mysql.jdbc.Driver"); //2. 獲得數(shù)據(jù)庫連接 Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); //3.操作數(shù)據(jù)庫,實(shí)現(xiàn)增刪改查 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess"); //如果有數(shù)據(jù),rs.next()返回true while(rs.next()){ System.out.println(rs.getString("user_name")+" 年齡:"+rs.getInt("age")); } } }
增刪改查
public class DbUtil { public static final String URL = "jdbc:mysql://localhost:3306/imooc"; public static final String USER = "liulx"; public static final String PASSWORD = "123456"; private static Connection conn = null; static{ try { //1.加載驅(qū)動程序 Class.forName("com.mysql.jdbc.Driver"); //2. 獲得數(shù)據(jù)庫連接 conn = DriverManager.getConnection(URL, USER, PASSWORD); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public static Connection getConnection(){ return conn; } } //模型 package liulx.model; import java.util.Date; public class Goddess { private Integer id; private String user_name; private Integer sex; private Integer age; private Date birthday; //注意用的是java.util.Date private String email; private String mobile; private String create_user; private String update_user; private Date create_date; private Date update_date; private Integer isDel; //getter setter方法。。。 } //---------dao層-------------- package liulx.dao; import liulx.db.DbUtil; import liulx.model.Goddess; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class GoddessDao { //增加 public void addGoddess(Goddess g) throws SQLException { //獲取連接 Connection conn = DbUtil.getConnection(); //sql String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+ "create_user, create_date, update_user, update_date, isdel)" +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)"; //預(yù)編譯 PreparedStatement ptmt = conn.prepareStatement(sql); //預(yù)編譯SQL,減少sql執(zhí)行 //傳參 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setDate(4, new Date(g.getBirthday().getTime())); ptmt.setString(5, g.getEmail()); ptmt.setString(6, g.getMobile()); ptmt.setString(7, g.getCreate_user()); ptmt.setString(8, g.getUpdate_user()); ptmt.setInt(9, g.getIsDel()); //執(zhí)行 ptmt.execute(); } public void updateGoddess(){ //獲取連接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "UPDATE imooc_goddess" + " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+ " update_user=?, update_date=CURRENT_DATE(), isdel=? "+ " where id=?"; //預(yù)編譯 PreparedStatement ptmt = conn.prepareStatement(sql); //預(yù)編譯SQL,減少sql執(zhí)行 //傳參 ptmt.setString(1, g.getUser_name()); ptmt.setInt(2, g.getSex()); ptmt.setInt(3, g.getAge()); ptmt.setDate(4, new Date(g.getBirthday().getTime())); ptmt.setString(5, g.getEmail()); ptmt.setString(6, g.getMobile()); ptmt.setString(7, g.getUpdate_user()); ptmt.setInt(8, g.getIsDel()); ptmt.setInt(9, g.getId()); //執(zhí)行 ptmt.execute(); } public void delGoddess(){ //獲取連接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "delete from imooc_goddess where id=?"; //預(yù)編譯SQL,減少sql執(zhí)行 PreparedStatement ptmt = conn.prepareStatement(sql); //傳參 ptmt.setInt(1, id); //執(zhí)行 ptmt.execute(); } public List<Goddess> query() throws SQLException { Connection conn = DbUtil.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess"); List<Goddess> gs = new ArrayList<Goddess>(); Goddess g = null; while(rs.next()){ g = new Goddess(); g.setUser_name(rs.getString("user_name")); g.setAge(rs.getInt("age")); gs.add(g); } return gs; } public Goddess get(){ Goddess g = null; //獲取連接 Connection conn = DbUtil.getConnection(); //sql, 每行加空格 String sql = "select * from imooc_goddess where id=?"; //預(yù)編譯SQL,減少sql執(zhí)行 PreparedStatement ptmt = conn.prepareStatement(sql); //傳參 ptmt.setInt(1, id); //執(zhí)行 ResultSet rs = ptmt.executeQuery(); while(rs.next()){ g = new Goddess(); g.setId(rs.getInt("id")); g.setUser_name(rs.getString("user_name")); g.setAge(rs.getInt("age")); g.setSex(rs.getInt("sex")); g.setBirthday(rs.getDate("birthday")); g.setEmail(rs.getString("email")); g.setMobile(rs.getString("mobile")); g.setCreate_date(rs.getDate("create_date")); g.setCreate_user(rs.getString("create_user")); g.setUpdate_date(rs.getDate("update_date")); g.setUpdate_user(rs.getString("update_user")); g.setIsDel(rs.getInt("isdel")); } return g; } }
相關(guān)文章
Idea如何配置Maven才能優(yōu)先從本地倉庫獲取依賴(親測方法有效)
對于Idea怎么配置Maven才能優(yōu)先從本地倉庫獲取依賴,網(wǎng)上說法有很多種,都不太靠譜,最終都沒有效果,最好的解決方法是通過修改maven配置文件settings.xml,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別分析
這篇文章主要介紹了JDBC的基本操作與Statement和PreparedStateMent使用區(qū)別,Java Database Connectivity,它是代表一組獨(dú)立于任何數(shù)據(jù)庫管理系統(tǒng)(DBMS)的API,聲明在java.sql與javax.sql包中,是SUN(現(xiàn)在Oracle)提供的一組接口規(guī)范2023-04-04java后臺發(fā)起get請求獲取響應(yīng)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了java后臺發(fā)起get請求獲取響應(yīng)數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08SpringData JPA基本/高級/多數(shù)據(jù)源的使用詳解
這篇文章主要介紹了SpringData JPA基本/高級/多數(shù)據(jù)源的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02