JSP (3)------JDBC編程1

來源:互聯網
上載者:User

標籤:java web


JDBC API :

是一系列的編程介面,可以用來串連資料庫,訪問資料等。

DriverManager : 驅動程式管理類,用來裝載驅動程式,為建立資料庫連接提供支援。

Connection:用於串連某一指定的資料庫

Statement : 提供了執行sql語句,擷取查詢結果的方法。有兩個子介面。分別是:

  • PrepareStatement:用於執行先行編譯的sql語句


ResultSet : 提供了對結果集處理的方法



JDBC Driver API

是面向驅動程式開發商的介面,JDBC驅動程式主要有四種類型:

  • JDBC-ODBC bridge : 將JDBC的調用全部委託給其他其他編程介面調用

  • 部分Java技術的本地API驅動程式: 部分基於java,其他的委託給本地用戶端的代碼實現

  • 全部基於java技術的本地API驅動程式

  • 全部基於java技術的本地協議驅動。





寫一個JDBC的應用程式:

首先,在mysql中建立表:

/*建立使用者表*/create table tbl_user(id int(11) unsigned not null auto_increment,name varchar(50) not null default ‘‘,password varchar(50) not null default ‘‘,email varchar(50) default ‘‘,primary key (id))engine = InnoDB   /*mysql儲存引擎的一種,支援事務*/default charset = utf8;/*建立地址表*/create table tbl_address(id int(11) unsigned not null auto_increment,city varchar(20) default null,country varchar(20) default null,user_id int(11) unsigned not null,  /*使用者表的主鍵*/primary key(id))engine = InnoDBdefault charset = utf8;


在資料庫中顯示如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/2C/wKiom1V1X2rQyupBAAA7DZ4IoFo049.jpg" title="QQ20150608172330.jpg" alt="wKiom1V1X2rQyupBAAA7DZ4IoFo049.jpg" />

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/2D/wKiom1V1X-XwqV3eAADX1QSglL0293.jpg" style="float:none;" title="QQ20150608172543.jpg" alt="wKiom1V1X-XwqV3eAADX1QSglL0293.jpg" />

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/28/wKioL1V1YYnRN9LlAADN0HsV_xw343.jpg" style="float:none;" title="QQ20150608172644.jpg" alt="wKioL1V1YYnRN9LlAADN0HsV_xw343.jpg" />

/*向表中插入資料*/insert into tbl_user(id, name, password, email) values(1,‘xiaoming‘, ‘123456‘, ‘[email protected]‘),(2, ‘daming‘, ‘654321‘,‘[email protected]‘);insert into tbl_address(city, country, user_id) values(‘beijing‘, ‘china‘, 1),(‘NewYork‘, ‘USA‘, 2);


JDBC 編程的步驟:

  • 載入驅動

  • 開啟串連

  • 執行查詢

  • 處理結果

  • 清理環境


添加java代碼測試:將user表中的資料輸出

package com.jike.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JDBCTest {public static void main(String[] args) {String sql = "SELECT * FROM tbl_user";Connection conn = null;   // 當前的資料連線Statement st = null;   // 向資料庫發送sql語句ResultSet rs = null;   // 封裝從資料庫裡查詢到的資料// 用ctrl+shift+o自動匯入以上用到的三個介面try {Class.forName("com.mysql.jdbc.Driver"); // 註冊MySQL的jdbc驅動程式  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "******", "*******");// 擷取資料庫連接,後面兩個分別是資料庫使用者名稱和密碼st = conn.createStatement();rs = st.executeQuery(sql);   // 發送sql語句while(rs.next()){System.out.print(rs.getInt("id")+" ");System.out.print(rs.getString("name")+" ");System.out.print(rs.getString("password")+" ");System.out.print(rs.getString("email")+" ");System.out.println();}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{ // 關閉順序由小到大try{rs.close();}catch(Exception e2){}try {st.close();} catch (Exception e3) {// TODO: handle exception}try {conn.close();} catch (Exception e4) {// TODO: handle exception}}}}


JDBC資料庫的插入,更新,刪除


package com.jike.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class JDBCTest {// 擷取資料庫連接public static Connection getConnection(){Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "root", "mysqladmin");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return conn;}// 向資料庫表中插入資料public static void insert(){Connection conn = getConnection();try {String sql = "insert into tbl_user(name, password, email)"+"values(‘deci‘, ‘2255225‘, ‘[email protected]‘)";Statement st = conn.createStatement();int count = st.executeUpdate(sql);System.out.println("向資料庫中插入了" + count + "條記錄");conn.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}// 更新內容public static void update(){Connection conn = getConnection();try {String sql = "update tbl_user set email=‘[email protected]‘ where name = ‘deci‘";Statement st = conn.createStatement();int count = st.executeUpdate(sql);System.out.println("向資料庫中更新了" + count + "條記錄");conn.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}//刪除記錄public static void delete(){Connection conn = getConnection();try {String sql = "delete from tbl_user where name = ‘deci‘";Statement st = conn.createStatement();int count = st.executeUpdate(sql);System.out.println("向資料庫刪除了" + count + "條記錄");conn.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {//insert();//update();delete();}}


依次調用定義的方法,得到結果:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/71/wKiom1V8Ya3Ty8hqAAIrJraJzDA435.jpg" title="QQ20150614005947.jpg" alt="wKiom1V8Ya3Ty8hqAAIrJraJzDA435.jpg" />





JDBC 編程 ----交易處理:

事務:維護資料一致性的工作單位,要麼全部執行,要麼全部不執行。

事務的基本特徵:

  • 原子性

  • 一致性

  • 隔離性

  • 持久性


與事務相關的sql語句

開始事務: begin transaction

提交事務: commit transaction

復原事務:rollback transaction


舉例:在使用者表和地址表中分別插入資料:

使用者表 插入:

"insert into tbl_user(id, name, password, email)"+         "values(10, ‘Tom‘, ‘2525252‘, ‘[email protected]‘)"

地址表插入:

"insert into tbl_address(id, city, country, user_id)"+"values(1, ‘shanghai‘, ‘china‘, ‘10‘)";


可以看出,原有的資料庫中地址表中已經有主鍵id=1的資料,程式會報出主鍵衝突的錯誤,具體代碼如下:

package com.jike.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class TransactionTest {public static Connection getConnection(){Connection conn = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/info", "root","mysqladmin");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return conn;}// 向使用者表中插入資料public static void insertUserData(){Connection conn = getConnection();try {String sql = "insert into tbl_user(id, name, password, email)"+"values(10, ‘Tom‘, ‘2525252‘, ‘[email protected]‘)";Statement st = conn.createStatement();int count = st.executeUpdate(sql);System.out.println("向使用者表中插入了"+count+"條資料");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}// 向地址表中插入資料public static void insertAddressData(){Connection conn = getConnection();try {String sql = "insert into tbl_address(id, city, country, user_id)"+"values(1, ‘shanghai‘, ‘china‘, ‘10‘)";//這裡注意, 因為這條語句規定插入地址表中的資料id號為1,但是地址表中已經有id=1的資料,因此會拋出異常// 這是一個很嚴重的問題,因為資料只有部分被插入。需要採用事務保證資料要麼完全插入,要麼全部復原。Statement st = conn.createStatement();int count = st.executeUpdate(sql);System.out.println("向地址表中輸入了"+count+"條記錄");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {insertUserData();insertAddressData();}}


程式報出異常

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/6D/wKioL1V8bWPz3blyAAPCUg8UNTg851.jpg" title="QQ20150614014247.jpg" alt="wKioL1V8bWPz3blyAAPCUg8UNTg851.jpg" />


這是,資料表中的插入結果如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/6D/wKioL1V8baPR-rVSAAEyfIe30qs590.jpg" title="QQ20150614014404.jpg" alt="wKioL1V8baPR-rVSAAEyfIe30qs590.jpg" />


可見,地址表中的資訊沒有正確插入,而使用者表中的資訊插入成功,這種插入是非常危險的,其無法保持資料的完整性。因此使用事務來處理這類問題。




極客學院地址:http://www.jikexueyuan.com/course/625.html

JSP (3)------JDBC編程1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.