1 JDBC進行批處理 1.1 爲什麼要用批處理? 之前:一次操作只能發送一條sql語句到數據庫服務器,效率並不高! 如果要插入2000條記錄,那麼必須發送2000條sql語句。 如果IO流的話,一次寫出一個字節,顯然效率效率並不高,所以可以使用緩存字節數組提高每 次寫出的效率。 現在:插入2000條記錄,但現在使用sql緩存區,一次發送多條sql到數據庫服務器執行。這種做法就叫做批處理。 1.2JDBC批處理的API Statement批處理: voidaddBatch(String sql) 添加sql到緩存區(暫時不發送) int[]executeBatch() 執行批處理命令。 發送所有緩存區的sql voidclearBatch() 清空sql緩存區 PreparedStatement批處理: voidaddBatch() 添加參數到緩存區 int[]executeBatch() 執行批處理命令。 發送所有緩存區的sql voidclearBatch() 清空sql緩存區 案例:分別測試statement和preparedstatement使用和不使用批處理向學生表插入2000條數據 的效率 2 JDBC獲取自增長值 /** * 獲取自增長值 * @author APPle * */publicclass Demo1 { @Test publicvoid test(){ //插入部門表數據 String deptSql = "INSERT INTO dept(deptName) VALUES(?)"; //插入員工表數據 String empSql = "INSERT INTO employee(empName,deptId) VALUES(?,?)"; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); /** * 1)插入部門 */ //預編譯部門sql //stmt = conn.prepareStatement(deptSql); // /** * 1.1 使用兩個參數的prepareStatement()方法,指定可以返回自動增長的鍵值 * Statement.RETURN_GENERATED_KEYS: 可以返回自動增長值 * Statement.NO_GENERATED_KEYS: 不能返回自動增長值 */ stmt = conn.prepareStatement(deptSql, Statement.RETURN_GENERATED_KEYS); //設置參數 stmt.setString(1, "祕書部"); //執行部門sql stmt.executeUpdate(); /** * 1.2 獲取自增長的值 */ rs = stmt.getGeneratedKeys(); Integer deptId = null; if(rs.next()){ deptId = rs.getInt(1);//得到第一行第一列的值 } /** * 2)插入員工,員工在剛添加的部門中 */ stmt = conn.prepareStatement(empSql); //設置參數 stmt.setString(1, "李四"); stmt.setInt(2, deptId); //如何獲取剛剛添加的部門ID?? //執行員工sql stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }} 3 JDBC處理大數據文件 3.1 什麼是大容量 字符: 存儲字符內容: mysql:char(0-255) varchar(0-65535) 長度有限的。 65535 大容量的字符字段: mysql: text(64K) longtext(4G字符內容) oracle: clob longclob 字節: mysql: blob(65kb) mediumblob(16mb) longblog(4GB) oracle: blob 3.1jdbc操作字符文件 /** * 對大文本數據處理 * @author APPle * */publicclass Demo1 { /** * 文件保存到數據中 */ @Test publicvoid testWrite(){ Connection conn = null; PreparedStatement stmt = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); //創建PreparedStatement String sql = "INSERT INTO test1(content) VALUES(?)"; stmt =conn.prepareStatement(sql); //設置參數 /** * 參數一:參數位置 * 參數二:輸入字符流 */ /** * 讀取本地文件,返回輸入字符流 */ FileReader reader = new FileReader(new File("e:/Demo1.java")); stmt.setClob(1, reader); //執行sql int count = stmt.executeUpdate(); System.out.println("影響了"+count+"行"); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, null); } } /** * 從數據中讀取文本內容 */ @Test publicvoid testRead(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); String sql = "SELECT * FROM test1 where id=?"; stmt = conn.prepareStatement(sql); //設置參數 stmt.setInt(1, 2); //執行sql,返回結果集 rs = stmt.executeQuery(); if(rs.next()){ //方式一:當做字符串取出數據 /* String content = rs.getString("content"); System.out.println(content); */ //方式二:返回輸入流形式 Clob clob = rs.getClob("content"); Reader reader = clob.getCharacterStream(); //寫出到文件中 FileWriter writer = new FileWriter(new File("e:/Demo2.java")); char[] buf = newchar[1024]; int len = 0; while( (len=reader.read(buf))!=-1){ writer.write(buf, 0, len); } //關閉流 writer.close(); reader.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }} 3.2jdbc操作字節文件 /** * 對字節文件處理 * @author APPle * */publicclass Demo2 { /** * 文件保存到數據庫中 */ @Test publicvoid testWrite(){ Connection conn = null; PreparedStatement stmt = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); String sql = "insert into test2(content) values(?)"; stmt = conn.prepareStatement(sql); //設置參數 /** * 參數一:參數位置 * 參數二:輸入字節流 */ /** * 讀取本地文件 */ InputStream in = new FileInputStream(new File("e:/abc.wmv")); //stmt.setBlob(1, in); stmt.setBinaryStream(1, in); //執行 stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, null); } } /** * 注意: mysql數據庫默認情況下,只能存儲不超過1m的文件,由於max_allowed_packet變量的限制 * 可以修改: %mysql%/my.ini文件, 修改或添加max_allowed_packet變量,然後重啓mysql即可!! */ /** * 從數據中讀取字節內容 */ @Test publicvoid testRead(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); String sql = "SELECT * FROM test2 where id=?"; //獲取PreparedStatement stmt = conn.prepareStatement(sql); //設置參數 stmt.setInt(1, 1); //執行sql rs = stmt.executeQuery(); if(rs.next()){ //返回輸入流 //InputStream in = rs.getBinaryStream("content"); InputStream in = rs.getBlob("content").getBinaryStream(); //寫出文件中 FileOutputStream out = new FileOutputStream(new File("e://3.jpg")); byte[] buf = newbyte[1024]; int len = 0; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } //關閉流 out.close(); in.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }} 4 數據庫事務 4.1什麼是事務? 所謂的事務,如果把多條sql語句看做一個事務,那麼這個事務要麼一起成功,要麼一起失敗!! 4.2mysql事務操作命令 setautocommit =0 / 1; 設置是否自動提交事務 1: 表示自動提交事務,每執行一條sql語句,自動提交事務。 0: 表示關閉自動提交事務。 commit; 提交事務,一旦提交事務不能回滾 rollback; 回滾事務。回滾到事務的起始點。 4.3jdbc事務操作 Connection.setAutoCommit(false) 開啓事務 Connection.commit(); 成功執行,最後提交事務 Connection.rollback(); 一旦遇到錯誤,回滾事務 /** * 模擬銀行轉賬 * @author APPle * */publicclass Demo1 { /** * 從eric的賬戶轉2000元到rose的賬戶上 */ @Test publicvoid testTransfer(){ //從eric賬戶上扣除2000元 String delSql = "UPDATE account SET BALANCE=BALANCE-2000 WHERE NAME='eric'"; //向rose賬戶打入2000元 String addSql = "UPDATE account SET BALANCE=BALANCE+2000 WHERE NAME='rose'"; Connection conn = null; PreparedStatement stmt = null; try{ //獲取連接 conn = JdbcUtil.getConnection(); //開啓事務 conn.setAutoCommit(false); // 等價於set autocommit=0; //預編譯delSQL stmt = conn.prepareStatement(delSql); //執行delSQL stmt.executeUpdate(); //發生異常 int i = 100/0; //預編譯addSql stmt = conn.prepareStatement(addSql); //執行addSql stmt.executeUpdate(); //提交事務 conn.commit();// 等價於commit; }catch(Exception e){ e.printStackTrace(); //回滾事務 try { conn.rollback(); // 等價於rollback; } catch (SQLException e1) { e1.printStackTrace(); } }finally{ JdbcUtil.close(conn, stmt, null); } }} HTML: 三: 3.1 基本標籤的講解 <html> --html開始標籤 <head> -- 文件頭(用戶在瀏覽器的主體是看不到的) </head> <body> --文件體(用戶在瀏覽器的主體看得到) </body> </html>--html結束標籤 3.2 head文件頭 作用:告訴瀏覽器如何解釋該html頁面 <html> <head> <!-- html註釋 --> <!-- 作用:告訴瀏覽器如何解釋該html頁面 --> <!-- 標題 :在窗口的標題欄看到--> <title>這是標題</title> <!-- 告訴瀏覽器使用什麼碼錶解釋html文件 --> <!-- html標籤分類: 有標籤體標籤:有開始,有結束標籤、 <title></title> 沒有標籤體標籤 : 也叫空標籤 <meat /> --> <metahttp-equiv="content-type" content="text/html;charset=utf-8"/> <!-- 關鍵詞:keywords 搜索引擎: 百度 輸入 java培訓 網頁的排名 推廣SEO SEO優化 關鍵詞是網頁排名的一個因素。 100% 權重 50% 33.3.% (3-5個合適) --> <meta name="keywords"content="java培訓,net培訓,php培訓" /> <!-- 描述: 標題 描述 標題 描述 標題 描述 --> <meta name="description"content="這是一家專門做IT職業培訓的公司"/> </head> <body> </body> </html> 3.3 文本標籤(body裏面的標籤) 標題(h1~h6) align:設置位置 水平線(hr) color:線的顏色 換行(br) 標籤規定粗體文本(b) 將文本以斜體顯示(i) 將文本以下劃線顯示(u) 段落(p)(書寫兩段小說進行演示) 段落縮進(blockquote)(主要用於解釋或者強調) 上下標(sup和sub)(一般用於公式)y=x2 H2O CaCo3 原樣輸出(pre)(希望網頁上的東西和代碼裏面寫的樣式完全一樣的時候(寫一首詩,寫一段代碼)) 好雨知時節,當春乃發生。 隨風潛入夜,潤物細無聲。 野徑雲俱黑,江船火獨明。 曉看紅溼處,花重錦官城。 marquee: behavior屬性值(alternata:來回滾動scroll:重複滾動 slide:不重複滾動 bgcolor:字幕背景顏色 direction:設置字幕的滾動方向down right left up bgsound: src:需要播放的音樂路徑 loop=-1(無限循環) autostart="true"自動播放 列表標籤: 有序列表ol li(type屬性更改序號類型,案例:投票喜歡的女明星) 無序列表ul li(用於條目的羅列,type屬性更改序號類型,案例:學生管理系統) 項目列表標籤(dl dt dd)(一般用於有層次結構的列表,一個公司員工的列表) 下拉選項:<select/><option/> 行內標籤(span) (html中用的非常少,css中用的非常多) 塊標籤<div> (html中用的非常少,css中用的非常多) 2.4 超鏈接標籤 <!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <head> <metahttp-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>超鏈接標籤</title> </head> <body> <!-- a超鏈接標籤: 常用的屬性: href 表示鏈接到的地址(文件) target 打開資源方式 _self: 當前窗口打開, _blank: 新窗口打開 協議執行資源的基本流程(超鏈接的原理): 使用協議到本地計算機的註冊表中查詢是否有對應協議的軟件(程序),有就執行,沒有就不執行。 http協議的詳細執行流程(畫圖詳解) 發佈個人網站的流程: 1.域名 2.服務器 3.服務器ip和域名進行綁定 4.將網站發佈到服務器 常見的協議: file:// 本地文件協議(本地或局域網) 在href中不寫就是使用這個默認協議 http:// http協議(執行流程) 通常連接到域名或IP地址(http協議執行流程) thunder:// 迅雷下載軟件的協議 mailto:發送郵件協議 超鏈接作用; 1)鏈接到資源 2)作爲錨點使用 打錨點: <a name="錨點名稱"></a> 去到錨點:<a href="#錨點名稱">內容</a> --> <aname="top"></a> <ahref="03.html文本標籤.html#list"target="_blank">超鏈接</a><br/>(在其他頁面的位置打上錨點) <ahref="../1.jpg">鏈接到圖片</a><br/> <ahref="http://www.baidu.com">鏈接到百度</a><br/> <ahref="http://www.moive.com/fuzhouzhe.avi">高清《復仇者聯盟2》(普通通道)</a><br/> <ahref="thunder://www.moive.com/fuzhouzhe.avi">高清《復仇者聯盟2》(迅雷通道)</a><br/> <br/><ahref="#ch01">去到第一章</a> <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> <aname="ch01"></a> 第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容第一章內容<br/> <a href="#top">返回頂部</a> </body> </html> 2.5 圖像標籤 img 圖像標籤 常用屬性: src : 表示圖片源位置 width: 圖片寬度 height: 圖片高度 alt: 替代文本。當圖片的src屬性失效時,alt屬性的內容就會生效 title: 提示文本。當鼠標放到圖片上面出現。 地圖(熱點區域):map 熱點: area,設置圖片上可以被點擊的區域(用工具做之後進行簡單分析) 2.6 轉義字符 在html語法中,存在一些特殊的字符,這些字符是不能直接原樣輸出。如果想讓這些特殊字符原樣輸出的話, 那麼就需要進行轉義。 常見的轉義字符: 特殊字符 轉義字符(以&開頭,以;結尾) 需求:在瀏覽器中顯示:<h1>標題</h1> < < letter than > > greater than & & 需求:在瀏覽器中輸入 華育 國際 空格 王老吉加上商標和版權: 版權 © 商標 ® ------------------------------------------------------------------------------------------------------------------------- 2.6 表格標籤 標籤: table 表格 tr 行 td 單元格 th 表頭 caption 標題 常用的屬性: border 表格的邊框 width 寬度 heigth 高度 align 對齊方式。left: 左對齊 center:居中 right:右對齊 rowspan 行合併。把多行的單元格合併 colspan 列合併。把多列的單元格合併 2.9 表單提交() 表單標籤(重點) 作用:用於採集用戶輸入的數據,提交給後臺程序處理 場景1: 註冊用戶: -> 註冊頁面(輸入用戶名、密碼、郵箱...)(通過表單標籤攜帶用戶數據)-> 系統後臺程序 -> 把用戶數據保存到數據庫 場景2 登錄: -> 登錄頁面(輸入用戶名和密碼)(通過表單標籤攜帶用戶數據) -> 系統後臺,搜索數據庫,判斷是否存在次用戶和密碼 表單標籤: <form> 就是一個表單 <inputtype="text"> 單行輸入域 <inputtype="password"/> 密碼輸入域 <inputtype="radio"/> 單選按鈕 <inputtype="checkbox"/> 多選按鈕 <select/> 下拉選項 <inputtype="hidden"/> 隱藏域。特點:不會顯示到html頁面上,但可以攜帶數據。 <inputtype="file"/> 文件選擇器 <textarea></textarea> 多行輸入域 <inputtype="submit"/> 提交按鈕 <inputtype="button"/> 普通按鈕 <inputtype="reset"/> 重置按鈕 3.1 框架標籤 frameset 框架集 屬性: cols:按照列的方向來劃分框架 rows: 按照行的方向來劃分框架 以上兩個屬性的值填每個框架的比例或者長度 *號表示其他框架分配完之後剩下的比例 frame 表示一個框架,框架中包含一個html頁面 有2個或2個以上的frame就會包含在frameset當中。 注意: 框架標籤不能放在body標籤中,否則無法顯示!!!
二十二、二十三天筆記總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.