JDBC 教程
jdbc 教程
jdbc 即 java database connectivity,是指 java 數據庫連接,在 java 語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。
jdbc 提供了一組 api,用于訪問任何形式的表格數據,尤其是存儲在關系數據庫中的數據。
jdbc 使用流程如下:
- 連接數據源,比如:數據庫。
- 為數據庫傳遞查詢和更新指令。
- 處理數據庫響應并返回的結果。
1. jdbc 架構
jdbc api支持兩層和三層處理模型進行數據庫訪問,但在一般的jdbc體系結構由兩層組成:
- jdbc api: 提供了應用程序對jdbc的管理連接。
- jdbc driver api: 支持jdbc管理到驅動器連接。
jdbc api 的使用驅動程序管理器和數據庫特定的驅動程序提供透明的連接到異構數據庫。
dbc驅動程序管理器可確保正確的驅動程序來訪問每個數據源。該驅動程序管理器能夠支持連接到多個異構數據庫的多個并發的驅動程序。
以下是結構圖,它顯示了驅動程序管理器方面的jdbc驅動程序和java應用程序的位置:
2. jdbc 組件
jdbc api 提供了以下接口和類:
- drivermanager
這個類管理數據庫驅動程序的列表。內容是否符合從java應用程序使用的通信子協議正確的數據庫驅動程序的連接請求。識別jdbc在一定子協議的第一個驅動器將被用來建立數據庫連接。 - driver
此接口處理與數據庫服務器通信。很少直接與驅動程序對象。相反,使用drivermanager中的對象,它管理此類型的對象。它也抽象與驅動程序對象工作相關的詳細信息。 - connection
此接口與接觸數據庫的所有方法。連接對象表示通信上下文,即,與數據庫中的所有的通信是通過唯一的連接對象。 - statement
可以使用這個接口創建的對象的sql語句提交到數據庫。一些派生的接口接受除執行存儲過程的參數。 - resultset
這些對象保存從數據庫后,執行使用statement對象的sql查詢中檢索數據。它作為一個迭代器,讓您可以通過移動它的數據。 - sqlexception
這個類處理發生在一個數據庫應用程序的任何錯誤。
3. jdbc 編程步驟
1)加載驅動程序
class.forname(driverclass) //加載mysql驅動 class.forname("com.mysql.jdbc.driver") //加載oracle驅動 class.forname("oracle.jdbc.driver.oracledriver")
2)獲得數據庫連接
drivermanager.getconnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
3)創建 statement\preparedstatement 對象
conn.createstatement(); conn.preparestatement(sql);
4. jdbc 完整編程范例
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.加載驅動程序 class.forname("com.mysql.jdbc.driver"); //2. 獲得數據庫連接 connection conn = drivermanager.getconnection(url, user, password); //3.操作數據庫,實現增刪改查 statement stmt = conn.createstatement(); resultset rs = stmt.executequery("select user_name, age from imooc_goddess"); //如果有數據,rs.next()返回true while(rs.next()){ system.out.println(rs.getstring("user_name")+" 年齡:"+rs.getint("age")); } } }
5. jdbc 增刪改查編程范例
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.加載驅動程序 class.forname("com.mysql.jdbc.driver"); //2. 獲得數據庫連接 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(),?)"; //預編譯 preparedstatement ptmt = conn.preparestatement(sql); //預編譯sql,減少sql執行 //傳參 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()); //執行 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=?"; //預編譯 preparedstatement ptmt = conn.preparestatement(sql); //預編譯sql,減少sql執行 //傳參 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()); //執行 ptmt.execute(); } public void delgoddess(){ //獲取連接 connection conn = dbutil.getconnection(); //sql, 每行加空格 string sql = "delete from imooc_goddess where id=?"; //預編譯sql,減少sql執行 preparedstatement ptmt = conn.preparestatement(sql); //傳參 ptmt.setint(1, id); //執行 ptmt.execute(); } public list query() throws sqlexception { connection conn = dbutil.getconnection(); statement stmt = conn.createstatement(); resultset rs = stmt.executequery("select user_name, age from imooc_goddess"); list gs = new arraylist(); 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=?"; //預編譯sql,減少sql執行 preparedstatement ptmt = conn.preparestatement(sql); //傳參 ptmt.setint(1, id); //執行 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; }