在實(shí)現(xiàn)程序的修改模塊時(shí),要在頁(yè)面端檢查用戶(hù)是否修改過(guò)數(shù)據(jù),以便提醒用戶(hù)及時(shí)保存修改后的數(shù)據(jù)。
實(shí)現(xiàn)要求:
判斷用戶(hù)是否修改了輸入的內(nèi)容,要能判斷input中的checkbox,text,radio等,不知道會(huì)多少個(gè)input,也不知道input的ID和name,要在客戶(hù)端判斷是否修改,不能產(chǎn)
生提交。還要同時(shí)滿(mǎn)足IE和firefox兩種環(huán)境。也要支持master和content頁(yè)的使用。
解決方案;
處理思路:在頁(yè)面加載時(shí)記錄所有的input的值或狀態(tài),如果要求在用戶(hù)進(jìn)行修改操作時(shí)立即調(diào)整控件狀態(tài),則在數(shù)據(jù)區(qū)div上的onclick和onkeypress事件里調(diào)用檢查數(shù)據(jù)
是否改變的函數(shù),并設(shè)置相應(yīng)控件的狀態(tài)(用ha_setch())。如果是在提交或用戶(hù)手動(dòng)控制檢查過(guò)程時(shí),則在相應(yīng)的操作事件中調(diào)用檢查數(shù)據(jù)是否改變(例在button的onclick
()中使用ha_checkin()控制提交)。
以下是實(shí)現(xiàn)代碼
var ha_last=new Array;//定義一個(gè)全局的空對(duì)象,存放所有的初始值。
function ha_get()//讀取初始值
{ var ha_input = document.getElementsByTagName("input");
for (var i=0;i<ha_input.length;i++)
{
if (ha_input[i].type=="password"){ ha_last.push(ha_input[i].value);}//根本頁(yè)面需要設(shè)置type的值和對(duì)象屬性
if (ha_input[i].type=="radio") {ha_last.push(ha_input[i].checked);}//要保證檢查的范圍是否準(zhǔn)確
}
}
window.onload=ha_get;//綁定讀取初始值的函數(shù)
function ha_checkin()//檢查新的輸入值和初始值是否相等。返回判斷結(jié)果。true為沒(méi)有發(fā)生修改,false為有修改。
{ var ha_now=new Array;
var ha_input = document.getElementsByTagName("input");
for (var i=0;i<ha_input.length;i++)
{
if (ha_input[i].type=="password"){ ha_now.push(ha_input[i].value);}//根本頁(yè)面需要設(shè)置type的值和對(duì)象屬性。
if (ha_input[i].type=="radio") {ha_now.push(ha_input[i].checked);}//也要保證和ha_get()中檢查的標(biāo)簽相一致
}
if (ha_now.toString()==ha_last.toString())//沒(méi)修改
{return true;}
else//有修改
{return false;}
}
function ha_setch(){//設(shè)置相應(yīng)的控件狀態(tài)
if (ha_checkin())//沒(méi)有變化
//改變控件的顯示和功能狀態(tài)
else//有變化
//改變控件的顯示和功能狀態(tài)
}
做了適當(dāng)?shù)男薷摹W詈笤赽utton里面onclick直接調(diào)用
var ha_last=new Array;//定義一個(gè)全局的空對(duì)象,存放所有的初始值。
function ha_get()//讀取初始值
{
var ha_input = document.getElementsByTagName("input");
ha_last.push($("#select").val());//采用jquery獲取select 選擇的值
for (var i=0;i<ha_input.length;i++)
{
if (ha_input[i].type=="text"){ ha_last.push(ha_input[i].value);}//根本頁(yè)面需要設(shè)置type的值和對(duì)象屬性
}
}
window.onload=ha_get;//綁定讀取初始值的函數(shù)
function ha_checkin(action)//檢查新的輸入值和初始值是否相等。返回判斷結(jié)果。true為沒(méi)有發(fā)生修改,false為有修改。
{
if(action=="update"){
var ha_now=new Array;
var ha_input = document.getElementsByTagName("input");
ha_now.push($("#select").val());
for (var i=0;i<ha_input.length;i++)
{
if (ha_input[i].type=="text"){ ha_now.push(ha_input[i].value);}//根本頁(yè)面需要設(shè)置type的值和對(duì)象屬性。
}
if (ha_now.toString()==ha_last.toString())//沒(méi)修改
{
alert("沒(méi)有修改");
return false;
}
else//有修改
{
// return true;
}
}
}
來(lái)自:http://www.javaeye.com/topic/304818
jQuery 是我最喜歡的一個(gè)Javascript框架,下表中包含了240+可以為jQuery愛(ài)好者們使用的插件。我斷定一定還有下表沒(méi)有包括的,如果你還知道其他的好東西,歡迎與大家分享。
文件上傳
Ajax File Upload
jQUploader
Multiple File Upload plugin
jQuery File Style
Styling an input type file
Progress Bar Plugin
表單驗(yàn)證
jQuery Validation
Auto Help
Simple jQuery form validation
jQuery XAV - form validations
jQuery AlphaNumeric
Masked Input
TypeWatch Plugin
Text limiter for form fields
Ajax Username Check with jQuery
Form - Select Box stuff
jQuery Combobox
jQuery controlled dependent (or Cascadign) Select List
Multiple Selects
Select box manipulation
Select Combo Plugin
jQuery - LinkedSelect
Auto-populate multiple select boxes
Choose Plugin (Select Replacement)
表單基本、輸入與、復(fù)選框等
jQuery Form Plugin
jQuery-Form
jLook Nice Forms
jNice
Ping Plugin
Toggle Form Text
ToggleVal
jQuery Field Plugin
jQuery Form’n Field plugin
jQuery Checkbox manipulation
jTagging
jQuery labelcheck
Overlabel
3 state radio buttons
ShiftCheckbox jQuery Plugin
Watermark Input
jQuery Checkbox (checkboxes with imags)
jQuery SpinButton Control
jQuery Ajax Form Builder
jQuery Focus Fields
jQuery Time Entry
時(shí)間,日期和顏色選取器
jQuery UI Datepicker
jQuery date picker plugin
jQuery Time Picker
Time Picker
ClickPick
TimePicker
Farbtastic jQuery Color Picker Plugin
Color Picker by intelliance.fr
投票插件
jQuery Star Rating Plugin
jQuery Star Rater
Content rater with asp.net, ajax and jQuery
Half-Star Rating Plugin
搜索插件
Autocomplete Box
jQuery Suggest
jQuery Autocomplete
jQuery Autocomplete Mod
jQuery Autocomplete by AjaxDaddy
jQuery Autocomplete Plugin with HTML formatting
jQuery Autocompleter
AutoCompleter (Tutorial with PHP&MySQL)
quick Search jQuery Plugin
編輯器
jTagEditor
WYMeditor
jQuery jFrame
Jeditable - edit in place plugin for jQuery
jQuery editable
jQuery Disable Text Select Plugin
Edit in Place with Ajax using jQuery
jQuery Plugin - Another In-Place Editor
TableEditor
tEditable - in place table editing for jQuery
聲音,視頻,F(xiàn)lash, SVG等
jMedia - accessible multi-media embedding
JBEdit - Ajax online Video Editor
jQuery MP3 Plugin
jQuery Media Plugin
jQuery Flash Plugin
Embed QuickTime
SVG Integration
jQuery Multimedia Portfolio
jQuery YouTube Plugin
圖片
ThickBox
jQuery lightBox plugin
jQuery FancyBox
jQuery Multimedia Portfolio
jQuery Image Strip
jQuery slideViewer
jQuery jqGalScroll 2.0
jQuery - jqGalViewII
jQuery - jqGalViewIII
jQuery Photo Slider
jQuery Thumbs - easily create thumbnails
jQuery jQIR Image Replacement
jCarousel Lite
jQPanView
jCarousel
Interface Imagebox
Image Gallery using jQuery, Interface & Reflactions
simple jQuery Gallery
jQuery Gallery Module
EO Gallery
jQuery ScrollShow
jQuery Cycle Plugin
jQuery Flickr
jQuery Lazy Load Images Plugin
Zoomi - Zoomable Thumbnails
jQuery Crop - crop any image on the fly
Image Reflection
Google Map
jQuery Plugin googlemaps
jMaps jQuery Maps Framework
jQmaps
jQuery & Google Maps
jQuery Maps Interface forr Google and Yahoo maps
jQuery J Maps - by Tane Piper
游戲
Tetris with jQuery
jQuery Chess
Mad Libs Word Game
jQuery Puzzle
jQuery Solar System (not a game but awesome jQuery Stuff)
jQuery Memory
表格
UI/Tablesorter
jQuery ingrid
jQuery Grid Plugin
Table Filter - awesome!
TableEditor
jQuery Tree Tables
Expandable “Detail” Table Rows
Sortable Table ColdFusion Costum Tag with jQuery UI
jQuery Bubble
TableSorter
Scrollable HTML Table
jQuery column Manager Plugin
jQuery tableHover Plugin
jQuery columnHover Plugin
jQuery Grid
TableSorter plugin for jQuery
tEditable - in place table editing for jQuery
jQuery charToTable Plugin
jQuery Grid Column Sizing
jQuery Grid Row Sizing
圖表
Flot
jQuery Wizard Plugin
jQuery Chart Plugin
Bar Chart
Accessible Charts using Canvas and jQuery
邊框,圓角,背景
jQuery Corner
jQuery Curvy Corner
Nifty jQuery Corner
Transparent Corners
jQuery Corner Gallery
Gradient Plugin
文本和鏈接
jQuery Spoiler plugin
Text Highlighting
Disable Text Select Plugin
jQuery Newsticker
Auto line-height Plugin
Textgrad - a text gradient plugin
LinkLook - a link thumbnail preview
pager jQuery Plugin
shortKeys jQuery Plugin
jQuery Biggerlink
jQuery Ajax Link Checker
Chili jQuery code highlighter plugin
jScroller
鼠標(biāo)提示
jQuery Plugin - Tooltip
jTip - The jQuery Tool Tip
clueTip
BetterTip
Flash Tooltips using jQuery
ToolTip
菜單,導(dǎo)航欄
jQuery Tabs Plugin - awesome! [demo nested tabs ]
another jQuery nested Tab Set example (based on jQuery Tabs Plugin)
jQuery idTabs
jdMenu - Hierarchical Menu Plugin for jQuery
jQuery SuckerFish Style
jQuery Plugin Treeview
treeView Basic
FastFind Menu
Sliding Menu
Lava Lamp jQuery Menu
jQuery iconDock
jVariations Control Panel
ContextMenu plugin
clickMenu
CSS Dock Menu
jQuery Pop-up Menu Tutorial
Sliding Menu
手風(fēng)琴,幻燈片等效果
jQuery Plugin Accordion
jQuery Accordion Plugin Horizontal Way
haccordion - a simple horizontal accordion plugin for jQuery
Horizontal Accordion by portalzine.de
HoverAccordion
Accordion Example from fmarcia.info
jQuery Accordion Example
jQuery Demo - Expandable Sidebar Menu
Sliding Panels for jQuery
jQuery ToggleElements
Coda Slider
jCarousel
Accesible News Slider Plugin
Showing and Hiding code Examples
jQuery Easing Plugin
jQuery Portlets
AutoScroll
Innerfade
CodaSlider
拖拽
UI/Draggables
EasyDrag jQuery Plugin
jQuery Portlets
jqDnR - drag, drop resize
Drag Demos
XML XSL JSON Feeds
XSLT Plugin
jQuery Ajax call and result XML parsing
xmlObjectifier - Converts XML DOM to JSON
jQuery XSL Transform
jQuery Taconite - multiple Dom updates
RSS/ATOM Feed Parser Plugin
jQuery Google Feed Plugin
瀏覽器
Wresize - IE Resize event Fix Plugin
jQuery ifixpng
jQuery pngFix
Link Scrubber - removes the dotted line onfocus from links
jQuery Perciformes - the entire suckerfish familly under one roof
Background Iframe
QinIE - for proper display of Q tags in IE
jQuery Accessibility Plugin
jQuery MouseWheel Plugin
對(duì)話(huà)框,確認(rèn)窗口
jQuery Impromptu
jQuery Confirm Plugin
jqModal
SimpleModal
CSS
jQuery Style Switcher
JSS - Javascript StyleSheets
jQuery Rule - creation/manipulation of CSS Rules
jPrintArea
DOM, Ajax 和其他插件
FlyDOM
jQuery Dimenion Plugin
jQuery Loggin
Metadata - extract metadata from classes, attributes, elements
Super-tiny Client-Side Include Javascript jQuery Plugin
Undo Made Easy with Ajax
JHeartbeat - periodically poll the server
Lazy Load Plugin
Live Query
jQuery Timers
jQuery Share it - display social bookmarking icons
jQuery serverCookieJar
jQuery autoSave
jQuery Puffer
jQuery iFrame Plugin
Cookie Plugin for jQuery
jQuery Spy - awesome plugin
Effect Delay Trick
jQuick - a quick tag creator for jQuery
Metaobjects
elementReady
starterkit.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>jQuery Starterkit</title>
<link rel="stylesheet" type="text/css" media="screen" href="style.css" />
<script type="text/javascript" src="http://www.css88.com/jquery-1.3.2/jquery-1.3.2.min.js"></script>
<script src="jquery.js" type="text/javascript"></script>
<script src="custom.js" type="text/javascript"></script>
<script src="jquery.tablesorter.js" type="text/javascript"></script>
<script src="jquery-latest.js" type="text/javascript"></script>
<script src="jquery.tablesorter.min.js" type="text/javascript"></script>
<script src="jquery.metadata.js" type="text/javascript"></script>
</head>
<body>
<!-- tablecode taken from tablesorter examples -->
<table class="tablesorter " cellspacing=1>
<thead>
<tr>
<th class="{sorter:'text'}">Email</th>
<th>Id</th>
<th>Phone</th>
<th>Total</th>
<th>Ip</th>
<th class="{sorter:'procent'}">Url</th>
<th>Time</th>
<th>ISO Date</th>
<th>UK Date</th>
</tr>
</thead>
<tbody>
<tr>
</tr>
<tr>
<td>henry@mountdev.net</td>
<td>35889</td>
<td>941-964-9543</td>
<td>$2776.09</td>
<td>119.232.182.142</td>
<td>http://www.gmail.com</td>
<td>3:54</td>
<td>1974/1/19</td>
<td>19/1/1974</td>
</tr>
<tr>
<td>christian@reno.gov</td>
<td>60021</td>
<td>941-964-5617</td>
<td>$2743.41</td>
<td>167.209.64.181</td>
<td>http://www.dotnet.ca</td>
<td>10:58</td>
<td>2000/3/25</td>
<td>25/3/2000</td>
</tr>
<tr>
<td>muffins@donuts.com</td>
<td>17927</td>
<td>941-964-9511</td>
<td>$2998.18</td>
<td>210.214.231.182</td>
<td>http://google.se</td>
<td>21:22</td>
<td>1993/1/24</td>
<td>24/1/1993</td>
</tr>
<tr>
<td>muffins@reno.gov</td>
<td>76375</td>
<td>941-964-2757</td>
<td>$1836.09</td>
<td>220.222.93.171</td>
<td>http://www.samba.org</td>
<td>15:22</td>
<td>1988/4/4</td>
<td>4/4/1988</td>
</tr>
<tr>
<td>found@flexomat.com</td>
<td>20953</td>
<td>941-964-5544</td>
<td>$575.42</td>
<td>247.246.235.138</td>
<td>http://gmail.com</td>
<td>3:12</td>
<td>1978/6/10</td>
<td>10/6/1978</td>
</tr>
<tr>
<td>foo@reno.gov</td>
<td>03603</td>
<td>941-964-8942</td>
<td>$1677.07</td>
<td>176.96.162.192</td>
<td>http://www.flexomat.com</td>
<td>19:11</td>
<td>1980/7/31</td>
<td>31/7/1980</td>
</tr>
<tr>
<td>found@flexomat.com</td>
<td>84939</td>
<td>941-964-7004</td>
<td>$3916.83</td>
<td>240.145.198.78</td>
<td>http://www.fish.org</td>
<td>1:29</td>
<td>1980/8/26</td>
<td>26/8/1980</td>
</tr>
<tr>
<td>muffins@reno.gov</td>
<td>95926</td>
<td>941-964-147</td>
<td>$3897.91</td>
<td>105.85.121.209</td>
<td>http://www.flexomat.com</td>
<td>9:50</td>
<td>2003/4/1</td>
<td>1/4/2003</td>
</tr>
</tbody>
</table>
</body>
</html>
custom.js
jQuery(document).ready(function() {
$.tablesorter.defaults.widgets=['zebra'];
$.tablesorter.defaults.sortList=[[0,0]];
$("table").tablesorter();
});
starterkit.html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>jQuery Starterkit</title>
<link rel="stylesheet" type="text/css" media="screen" href="screen.css" />
<script type="text/javascript" src="http://www.css88.com/jquery-1.3.2/jquery-1.3.2.min.js"></script>
<script src="jquery.js" type="text/javascript"></script>
<script src="custom.js" type="text/javascript"></script>
<script src="jquery.tablesorter.js" type="text/javascript"></script>
<script src="jquery-latest.js" type="text/javascript"></script>
<script src="jquery.tablesorter.min.js" type="text/javascript"></script>
<script src="jquery.metadata.js" type="text/javascript"></script>
</head>
<body>
<table id="large" cellspacing="0">
<thead>
<tr>
<th>Email</th>
<th>Id</th>
<th>Phone</th>
<th>Total</th>
<th>Ip</th>
<th>Url</th>
<th>Time</th>
<th>ISO Date</th>
<th>UK Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>devo@flexomat.com</td>
<td>66672</td>
<td>941-964-8535</td>
<td>$2482.79</td>
<td>172.78.200.124</td>
<td>http://gmail.com</td>
<td>15:10</td>
<td>1988/12/14</td>
<td>14/12/1988</td>
</tr>
<tr>
<td>henry@mountdev.net</td>
<td>35889</td>
<td>941-964-9543</td>
<td>$2776.09</td>
<td>119.232.182.142</td>
<td>http://www.gmail.com</td>
<td>3:54</td>
<td>1974/1/19</td>
<td>19/1/1974</td>
</tr>
<tr>
<td>christian@reno.gov</td>
<td>60021</td>
<td>941-964-5617</td>
<td>$2743.41</td>
<td>167.209.64.181</td>
<td>http://www.dotnet.ca</td>
<td>10:58</td>
<td>2000/3/25</td>
<td>25/3/2000</td>
</tr>
<tr>
<td>muffins@donuts.com</td>
<td>17927</td>
<td>941-964-9511</td>
<td>$2998.18</td>
<td>210.214.231.182</td>
<td>http://google.se</td>
<td>21:22</td>
<td>1993/1/24</td>
<td>24/1/1993</td>
</tr>
<tr>
<td>muffins@reno.gov</td>
<td>76375</td>
<td>941-964-2757</td>
<td>$1836.09</td>
<td>220.222.93.171</td>
<td>http://www.samba.org</td>
<td>15:22</td>
<td>1988/4/4</td>
<td>4/4/1988</td>
</tr>
<tr>
<td>mendez@gmail.com</td>
<td>45834</td>
<td>941-964-2575</td>
<td>$2805.46</td>
<td>228.170.245.253</td>
<td>http://flexomat.com</td>
<td>11:31</td>
<td>1975/12/12</td>
<td>12/12/1975</td>
</tr>
<tr>
<td>dev@gmail.com</td>
<td>20022</td>
<td>941-964-4967</td>
<td>$3296.54</td>
<td>175.248.70.240</td>
<td>http://www.flexomat.com</td>
<td>4:27</td>
<td>2002/7/3</td>
<td>3/7/2002</td>
</tr>
<tr>
<td>foo@polyester.se</td>
<td>55977</td>
<td>941-964-745</td>
<td>$2953.73</td>
<td>222.114.227.156</td>
<td>http://www.donuts.com</td>
<td>23:49</td>
<td>1977/8/4</td>
<td>4/8/1977</td>
</tr>
<tr>
<td>adam@aftonbladet.se</td>
<td>38867</td>
<td>941-964-6302</td>
<td>$1949.27</td>
<td>116.241.143.196</td>
<td>http://flexomat.com</td>
<td>23:35</td>
<td>1995/7/27</td>
<td>27/7/1995</td>
</tr>
<tr>
<td>devo@donuts.com</td>
<td>51426</td>
<td>941-964-1234</td>
<td>$1067.00</td>
<td>88.96.149.82</td>
<td>http://www.polyester.se</td>
<td>15:17</td>
<td>1986/1/5</td>
<td>5/1/1986</td>
</tr>
<tr>
<td>henry@samba.org</td>
<td>40859</td>
<td>941-964-4856</td>
<td>$3401.19</td>
<td>68.152.250.74</td>
<td>http://www.flexomat.com</td>
<td>4:36</td>
<td>1990/3/7</td>
<td>7/3/1990</td>
</tr>
<tr>
<td>found@dotnet.ca</td>
<td>23986</td>
<td>941-964-2686</td>
<td>$1393.52</td>
<td>98.102.181.138</td>
<td>http://lostnfound.org</td>
<td>5:51</td>
<td>1993/7/22</td>
<td>22/7/1993</td>
</tr>
<tr>
<td>carl@fish.org</td>
<td>73392</td>
<td>941-964-5792</td>
<td>$3876.04</td>
<td>246.234.182.243</td>
<td>http://www.google.se</td>
<td>6:52</td>
<td>1984/7/14</td>
<td>14/7/1984</td>
</tr>
<tr>
<td>found@mountdev.net</td>
<td>03519</td>
<td>941-964-1599</td>
<td>$1176.48</td>
<td>104.212.122.177</td>
<td>http://donuts.com</td>
<td>18:52</td>
<td>2000/8/6</td>
<td>6/8/2000</td>
</tr>
<tr>
<td>lost@fish.org</td>
<td>36628</td>
<td>941-964-5975</td>
<td>$822.23</td>
<td>153.63.68.208</td>
<td>http://www.gmail.com</td>
<td>7:53</td>
<td>1994/7/14</td>
<td>14/7/1994</td>
</tr>
<tr>
<td>mendez@dotnet.ca</td>
<td>90442</td>
<td>941-964-1649</td>
<td>$1975.72</td>
<td>128.161.95.170</td>
<td>http://reno.gov</td>
<td>8:35</td>
<td>1997/10/20</td>
<td>20/10/1997</td>
</tr>
<tr>
<td>carl@donuts.com</td>
<td>00412</td>
<td>941-964-6432</td>
<td>$1834.77</td>
<td>141.231.126.192</td>
<td>http://gmail.com</td>
<td>16:15</td>
<td>1997/8/23</td>
<td>23/8/1997</td>
</tr>
<tr>
<td>foo@fish.org</td>
<td>80653</td>
<td>941-964-1022</td>
<td>$260.26</td>
<td>98.102.97.81</td>
<td>http://samba.org</td>
<td>8:27</td>
<td>1991/11/24</td>
<td>24/11/1991</td>
</tr>
<tr>
<td>found@fish.org</td>
<td>54635</td>
<td>941-964-6439</td>
<td>$1442.80</td>
<td>108.133.231.154</td>
<td>http://dotnet.ca</td>
<td>6:47</td>
<td>1977/7/12</td>
<td>12/7/1977</td>
</tr>
<tr>
<td>found@flexomat.com</td>
<td>20953</td>
<td>941-964-5544</td>
<td>$575.42</td>
<td>247.246.235.138</td>
<td>http://gmail.com</td>
<td>3:12</td>
<td>1978/6/10</td>
<td>10/6/1978</td>
</tr>
<tr>
<td>lost@aftonbladet.se</td>
<td>60810</td>
<td>941-964-8406</td>
<td>$1054.39</td>
<td>130.80.125.154</td>
<td>http://www.samba.org</td>
<td>15:50</td>
<td>1978/5/18</td>
<td>18/5/1978</td>
</tr>
<tr>
<td>carl@reno.gov</td>
<td>22666</td>
<td>941-964-104</td>
<td>$373.59</td>
<td>185.150.127.115</td>
<td>http://www.lostnfound.org</td>
<td>10:11</td>
<td>1971/11/5</td>
<td>5/11/1971</td>
</tr>
<tr>
<td>carl@donuts.com</td>
<td>82867</td>
<td>941-964-1031</td>
<td>$631.03</td>
<td>62.244.222.152</td>
<td>http://www.reno.gov</td>
<td>11:24</td>
<td>1985/1/22</td>
<td>22/1/1985</td>
</tr>
<tr>
<td>foo@donuts.com</td>
<td>11268</td>
<td>941-964-208</td>
<td>$3730.64</td>
<td>234.192.138.252</td>
<td>http://aftonbladet.se</td>
<td>22:45</td>
<td>1979/8/4</td>
<td>4/8/1979</td>
</tr>
<tr>
<td>devo@google.se</td>
<td>17059</td>
<td>941-964-2903</td>
<td>$1404.67</td>
<td>73.189.246.202</td>
<td>http://www.gmail.com</td>
<td>22:28</td>
<td>1983/4/28</td>
<td>28/4/1983</td>
</tr>
<tr>
<td>muffins@flexomat.com</td>
<td>90584</td>
<td>941-964-4640</td>
<td>$3706.01</td>
<td>243.162.73.115</td>
<td>http://www.fish.org</td>
<td>11:12</td>
<td>1997/4/8</td>
<td>8/4/1997</td>
</tr>
<tr>
<td>foo@samba.org</td>
<td>82966</td>
<td>941-964-7245</td>
<td>$1001.38</td>
<td>255.182.148.252</td>
<td>http://www.reno.gov</td>
<td>8:42</td>
<td>1995/11/1</td>
<td>1/11/1995</td>
</tr>
<tr>
<td>foo@reno.gov</td>
<td>03603</td>
<td>941-964-8942</td>
<td>$1677.07</td>
<td>176.96.162.192</td>
<td>http://www.flexomat.com</td>
<td>19:11</td>
<td>1980/7/31</td>
<td>31/7/1980</td>
</tr>
<tr>
<td>found@flexomat.com</td>
<td>84939</td>
<td>941-964-7004</td>
<td>$3916.83</td>
<td>240.145.198.78</td>
<td>http://www.fish.org</td>
<td>1:29</td>
<td>1980/8/26</td>
<td>26/8/1980</td>
</tr>
<tr>
<td>henry@lostnfound.org</td>
<td>76453</td>
<td>941-964-3084</td>
<td>$3875.88</td>
<td>235.225.168.168</td>
<td>http://www.fish.org</td>
<td>15:31</td>
<td>2000/10/22</td>
<td>22/10/2000</td>
</tr>
<tr>
<td>sam@aftonbladet.se</td>
<td>36274</td>
<td>941-964-7784</td>
<td>$73.43</td>
<td>114.190.194.148</td>
<td>http://www.dn.se</td>
<td>18:24</td>
<td>1994/11/11</td>
<td>11/11/1994</td>
</tr>
<tr>
<td>dev@polyester.se</td>
<td>15971</td>
<td>941-964-7527</td>
<td>$1855.18</td>
<td>179.121.143.189</td>
<td>http://www.flexomat.com</td>
<td>10:25</td>
<td>1984/8/16</td>
<td>16/8/1984</td>
</tr>
<tr>
<td>devo@fish.org</td>
<td>31734</td>
<td>941-964-9760</td>
<td>$3201.35</td>
<td>213.186.220.205</td>
<td>http://www.samba.org</td>
<td>19:37</td>
<td>1979/3/4</td>
<td>4/3/1979</td>
</tr>
<tr>
<td>devo@reno.gov</td>
<td>52074</td>
<td>941-964-2068</td>
<td>$3035.24</td>
<td>189.62.225.163</td>
<td>http://www.dn.se</td>
<td>21:18</td>
<td>1998/2/24</td>
<td>24/2/1998</td>
</tr>
<tr>
<td>mendez@fish.org</td>
<td>87800</td>
<td>941-964-7933</td>
<td>$618.59</td>
<td>254.119.153.91</td>
<td>http://www.dn.se</td>
<td>22:34</td>
<td>1979/5/28</td>
<td>28/5/1979</td>
</tr>
<tr>
<td>muffins@reno.gov</td>
<td>95926</td>
<td>941-964-147</td>
<td>$3897.91</td>
<td>105.85.121.209</td>
<td>http://www.flexomat.com</td>
<td>9:50</td>
<td>2003/4/1</td>
<td>1/4/2003</td>
</tr>
<tr>
<td>carl@donuts.com</td>
<td>74513</td>
<td>941-964-4507</td>
<td>$2150.68</td>
<td>106.175.123.125</td>
<td>http://www.fish.org</td>
<td>21:42</td>
<td>1977/4/8</td>
<td>8/4/1977</td>
</tr>
<tr>
<td>sam@fish.org</td>
<td>82420</td>
<td>941-964-2134</td>
<td>$3947.54</td>
<td>129.78.102.122</td>
<td>http://mountdev.net</td>
<td>11:33</td>
<td>1990/11/26</td>
<td>26/11/1990</td>
</tr>
<tr>
<td>devo@mountdev.net</td>
<td>81905</td>
<td>941-964-3535</td>
<td>$722.17</td>
<td>229.101.84.111</td>
<td>http://fish.org</td>
<td>7:29</td>
<td>1975/12/28</td>
<td>28/12/1975</td>
</tr>
<tr>
<td>john@lostnfound.org</td>
<td>93124</td>
<td>941-964-1508</td>
<td>$394.82</td>
<td>61.184.235.77</td>
<td>http://www.mountdev.net</td>
<td>14:38</td>
<td>1979/12/10</td>
<td>10/12/1979</td>
</tr>
</tbody>
</table>
</body>
custom.js
jQuery(document).ready(function() {
$("#large").tablesorter( {sortList: [[0,0], [1,0]]} );
});
1.在當(dāng)前類(lèi)路徑下新建一個(gè)properties文件;
編寫(xiě)DBconfig.properties
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=school
user=sa
password=sa
2.新建工具類(lèi)
package com.itcast.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionUtil {
public Connection openConnection() {
String driver = "";
String url = "";
String user = "";
String password = "";
Properties prop = new Properties();
Connection conn = null;
try {
//加載屬性文件
prop.load(this.getClass().getClassLoader().getResourceAsStream(
"DBConfig.properties"));
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
//Class.forName加載驅(qū)動(dòng)
Class.forName(driver);
//DriverManager獲得連接
conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
3.業(yè)務(wù)實(shí)現(xiàn)類(lèi)
package com.itcast.service.impl;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.itcast.db.ConnectionUtil;
import com.itcast.db.DBConnection;
import com.itcast.model.User;
import com.itcast.service.IUser;
/**
* 業(yè)務(wù)邏輯處理
*
* @author Administrator
*
*/
public class UserImpl implements IUser {
// DBConnection db = new DBConnection();
private PreparedStatement pstm;
/**
* 添加用戶(hù)
*/
public void add_User(User user) {
try{
// Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// conn= DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=school", "sa", "sa");
Connection conn = new ConnectionUtil().openConnection();
pstm=conn.prepareStatement("insert into userTable(user_name , user_password ,user_age,user_sex,user_address,user_telephone) values(?,?,?,?,?,?)");
pstm.setString(1, user.getUsername());
pstm.setString(2, user.getPassword());
pstm.setInt(3, user.getAge());
pstm.setString(4, user.getSex());
pstm.setString(5, user.getAddress());
pstm.setString(6, user.getTelephone());
pstm.executeUpdate();
}catch(SQLException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
// String sql="insert into userTable(user_name , user_password ,user_age,user_sex,user_address,user_telephone) values(?,?,?,?,?,?)";
//
// db.GetConnection();
}
/**
* 刪除用戶(hù)
*/
public boolean del_User(int id) {
boolean result=false;
try{
Connection conn = new ConnectionUtil().openConnection();
pstm=conn.prepareStatement("delete from userTable where user_id="+id);
pstm.executeUpdate();
result=true;
}catch(SQLException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
return result;
}
/**
* 查找用戶(hù)
*/
public List<User> find_User() {
Connection conn = new ConnectionUtil().openConnection();
List<User> list = new ArrayList();
User user = new User();
String sql = "select * from userTable ";
try {
pstm=conn.prepareStatement(sql);
// pstm.setInt(1, id);
ResultSet rs=pstm.executeQuery();
while (rs.next()) {
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setAddress(rs.getString(6));
user.setTelephone(rs.getString(7));
user.setTime(rs.getDate(8));
// System.out.println(rs.getString(7));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/**
* 按照id查詢(xún)用戶(hù)信息
*/
public List find_Users(int id) {
Connection conn = new ConnectionUtil().openConnection();
List list = new ArrayList();
User user = new User();
String sql = "select * from userTable where user_id=?";
try {
pstm=conn.prepareStatement(sql);
pstm.setInt(1, id);
ResultSet rs=pstm.executeQuery();
while (rs.next()) {
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getInt(4));
user.setSex(rs.getString(5));
user.setAddress(rs.getString(6));
user.setTelephone(rs.getString(7));
user.setTime(rs.getDate(8));
// System.out.println(rs.getString(7));
list.add(user);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
/**
* 修改用戶(hù)信息
*/
public IUser modify_User() {
// TODO Auto-generated method stub
return null;
}
}
摘要: JSTL 入門(mén): 探討 core
JSTL 入門(mén): 探討 core
使用定制標(biāo)記進(jìn)行流控制和 URL 管理
...
閱讀全文
由于采用sql server2000作為數(shù)據(jù)庫(kù)。用java進(jìn)行jdbc連接時(shí)
出現(xiàn)Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
發(fā)現(xiàn)原來(lái)是少了sp4補(bǔ)丁。
先下載補(bǔ)丁文件
SQL2000-KB884525-SP4-x86-CHS.EXE
之后安裝該文件,默認(rèn)安裝在c:/下
進(jìn)入該文件夾,點(diǎn)擊set up.bat 進(jìn)行更新。
最后重新開(kāi)啟服務(wù)。就ok啦!
以前用myeclipse連接sql server 2005時(shí),直接用的一個(gè)jdbcdriver.jar就ok了。但是目前為了需要
必須用sql server 2000,所以我才在網(wǎng)上找了找連接驅(qū)動(dòng)。
SQLServer2000的JDBC驅(qū)動(dòng)
轉(zhuǎn)自 http://blog.csdn.net/javalf00/archive/2009/06/09/4254478.aspx
一、下載SQL SERVER2000的jdbc驅(qū)動(dòng)程序。在微軟站點(diǎn)就有這個(gè)驅(qū)動(dòng)程序: Window操作系統(tǒng)
http://download.microsoft.com/download/3/0/f/30ff65d3-a84b-4b8a-a570-27366b2271d8/setup.exe Unix操作系統(tǒng)
Mssqlserver.tar http://download.microsoft.com/download/3/0/f/30ff65d3-a84b-4b8a-a570-27366b2271d8/mssqlserver.tar
二、安裝JDBC 執(zhí)行ms_jdbc_setup.exe可執(zhí)行文件,一切只需要點(diǎn)擊下一
步,至到出現(xiàn)finish按鈕,完成安裝。注: (1) ms_JDBC_setup默認(rèn)安裝路
徑為:c:\Program Files\Microsoft SQL Server 2000 Driver for JDBC (2)此版
(Version 2.2.0022)本僅支持Microsoft SQL Server 2000 Driver for JDBC (3)安
裝目錄\lib\下的三個(gè)jar文件即是我們要的JDBC驅(qū)動(dòng)核心 msbase.jar
mssqlserver.jar msutil.jar
三、將以上(3)中指的三個(gè)jar文件加入到環(huán)境變量中去 classpath:
d:\webserver\lib\msbase.jar;d:\webserver\lib\mssqlserver.jar;d:\webserver\lib\msutil.jar
注:也可以省事的將以上三個(gè)文件拷貝至你的jvm機(jī)所在的
JAVA_HOME\jre\lib\ext目錄下,不過(guò)不建議這么做。 對(duì)于web項(xiàng)目,可
直接將以上三個(gè)jar包拷貝到WEB-INF下的lib文件夾下即可。
四、測(cè)試 jsp文件:
您的第一個(gè)字段內(nèi)容為:
您的第二個(gè)字段內(nèi)容為:
五、注意事項(xiàng) 1. 要保證你的Sql服務(wù)是啟動(dòng)狀態(tài) 2. 在Sql 的管理器中能夠
使用sa或其它用戶(hù)正常登錄;(有些人在安裝sql時(shí)用了nt用戶(hù)管理模式,
這里可能會(huì)有一定問(wèn)題) 3. 第一次配置好環(huán)境變量最好能重啟一下電腦
4. 注意JVM和DataBase的啟動(dòng)順序:先啟動(dòng)DataBase,再啟動(dòng)JVM機(jī)。
注:在停止Web服務(wù)器后,再重啟動(dòng),中間最好能有10秒以上的間隔。
5. 注意操作系統(tǒng)的網(wǎng)絡(luò)連通性 A.啟動(dòng)了Tcp/IP服務(wù) B.配置了相關(guān)IP地址,
有些人機(jī)器可能用的是自動(dòng)分配IP或有配置IP時(shí),但網(wǎng)絡(luò)不通可能也找不
到IP 6. 有些機(jī)器在調(diào)試明最好能將(四)中的連接地址localhost改成數(shù)據(jù)
庫(kù)服務(wù)器的IP,這也是要注意5的原因。
package zmsjdbc;
import java.sql.*;
public class sqlserver1 {
private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=catv"; //catv是數(shù)據(jù)庫(kù)!loacalhost可以用IP和主機(jī)
private String user="sa";
private String pwd="";
public Connection getcon() {
Connection con;
try { //加載驅(qū)動(dòng)程序
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //創(chuàng)建連接 con=DriverManager.getConnection(url,user,pwd);
return con;
} catch(ClassNotFoundException e) {
System.out.println("加載驅(qū)動(dòng)程序出錯(cuò)");
} catch(SQLException e) {
System.out.println(e.getMessage());
} catch(Exception e) {
System.out.println("出現(xiàn)了好大的錯(cuò)誤");
}
return null;
}
public ResultSet executeSql(String sqlstr) {
Connection conn; Statement stmt;
try { conn=getcon();
stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sqlstr);
return rs;
} catch(SQLException e) {
System.out.print("獲取數(shù)據(jù)集時(shí)出現(xiàn)錯(cuò)誤");
}
return null;
}
public static void main(String[] args) {
ResultSet rs1;
sqlserver1 sql1=new sqlserver1();
rs1=sql1.executeSql("select ui_id,ui_name from userinfo");
try {
while(rs1.next()) {
System.out.println(rs1.getString("ui_id")+" 姓名:"+rs1.getString("ui_name"));
}
} catch(Exception e)
{
System.out.println(e.getMessage());
}
} } /*
1、對(duì)于SQLSERVER 必須下載 SQLSERVER驅(qū)動(dòng) http://download.microsoft.com/download/3/0/f/30ff65d3-a84b-4b8a-a570-27366b2271d8/setup.exe 然后把 msbase.jar mssqlserver.jar msutil.jar 復(fù)制到 D:\JBuilder9\jdk1.4\jre\lib\ext,或者放在web項(xiàng)目的WEB-INF/lib下。
2:如果出現(xiàn)錯(cuò)誤: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 說(shuō)明 SQLERVER 端口號(hào) 不對(duì) 》》》更改端口號(hào):SQLSERVER->屬性-常規(guī)-網(wǎng)絡(luò)配置-常規(guī)-TCP/IP-屬性--更改端口號(hào)有個(gè)命令可以用: cmd-> netstat -a 例如:String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=zmstv"; 說(shuō)明你使用的是1433 在CMD 下 輸入 netstat -a -n 應(yīng)該看不到:TCP 127.0.0.1:1433 0.0.0.0:0 LISTENING 如果安裝 sqlserver 2000 出現(xiàn) 報(bào)錯(cuò) "以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作。。。。" 打開(kāi)注冊(cè)表編輯器,在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations項(xiàng)目,并刪除它。這樣就可以清除安裝暫掛項(xiàng)目。
在J2ME程序開(kāi)發(fā)過(guò)程中,為了一定的需要,經(jīng)常需要來(lái)獲得用戶(hù)的手機(jī)號(hào)碼,但是這個(gè)功能卻在標(biāo)準(zhǔn)的J2ME類(lèi)庫(kù)中沒(méi)有提供。
在使用中國(guó)移動(dòng)的CMWAP方式連接網(wǎng)絡(luò)時(shí),中國(guó)移動(dòng)會(huì)將用戶(hù)的手機(jī)號(hào)碼放在一個(gè)名稱(chēng)為x-up-calling-line-id的頭信息中,可以通過(guò)讀取該頭信息,獲得用戶(hù)的手機(jī)號(hào)碼,具體代碼如下:
String usermphone = http.getHeader("x-up-calling-line-id");
偽手機(jī)號(hào),用戶(hù)在移動(dòng)夢(mèng)網(wǎng)的ID:
String usermphone = http.getHeader("MISC_MID");
其中http是HttpConnction類(lèi)型的對(duì)象。
[color=Green]注意:必須要是CNWAP聯(lián)網(wǎng)才行。 [/color]
原來(lái)獲取用戶(hù)手機(jī)號(hào)碼很簡(jiǎn)單,關(guān)鍵是通信營(yíng)運(yùn)商給不給你送。如果給你送的話(huà),手機(jī)號(hào)碼是在Http請(qǐng)求頭里獲取,通常在x-up-calling-line-id項(xiàng)里,如果通過(guò)此項(xiàng)得不到的話(huà)。可采用循環(huán)讀出所有的Http頭里的信息,號(hào)碼在哪一個(gè)頭里就一目了然了。
String userPhone = request.getHeader("x-up-calling-line-id");一般通過(guò)這句就能獲取到手機(jī)號(hào)碼。
如果號(hào)碼不在上面這條請(qǐng)求頭里,采用下面方法讀取看號(hào)碼在哪一條請(qǐng)求頭里。
Enumeration headers = request.getHeaderNames() ;
while(headers.hasMoreElements())
{
String head = (String)headers.nextElement();
out.println(head+":"+request.getHeader(head));
}
這樣就可以將所有的信息打印出來(lái),看到號(hào)碼的位置了。注意獲取號(hào)碼的前提是跟營(yíng)運(yùn)商有合作或者跟他們申請(qǐng)。同意給你送,否則程序?qū)崿F(xiàn)了也沒(méi)有用。
本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/jhjinhua/archive/2008/12/12/3505675.aspx
轉(zhuǎn)載:http://www.host01.com/article/Wap/wap001/05922162843330.htm
JSP下獲取手機(jī)號(hào)碼
//取手機(jī)號(hào)
String mobile = "" ;
String MO="";
String temvit = "";
String version = "";
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
if (headerName.equals("x-up-calling-line-id")) {
temvit=request.getHeader(headerName);
if (temvit.substring(0,3).trim().equals("861")) {
mobile=temvit.substring(2,13);
}
if (temvit.substring(0,2).trim().equals("13")) {
mobile=temvit;
}
}
if (headerName.equals("user-agent")) {
<--ubbcodetab--> <--/ubbcodetab-->MO=request.getHeader(headerName);
}
if (headerName.equals("x-up-calling-line-id")) {
temvit=request.getHeader(headerName);
if (temvit.substring(0,2).trim().equals("13")) {
mobile=temvit;
}
}
}
轉(zhuǎn)載:
http://hi.baidu.com/yashengwh/blog/item/27130edf7ec447156327980b.html
手機(jī)號(hào)碼:Request.ServerVariables("HTTP_X_UP_CALLING_LINE_ID")
手機(jī)型號(hào):request.ServerVariables("HTTP_User-Agent")
補(bǔ)充:
手機(jī)號(hào)碼,要看當(dāng)?shù)氐倪\(yùn)營(yíng)商了
有三種方法獲得(聯(lián)通的)
1.加密的手機(jī)號(hào)碼:被加密的手機(jī)號(hào)碼,與手機(jī)號(hào)碼一一對(duì)應(yīng)。
中國(guó)聯(lián)通WAP平臺(tái)向CP Server(主域或IP地址)傳送加密手機(jī)號(hào)碼,CP Server獲取該加密手機(jī)號(hào)碼的方法為:在每次用戶(hù)發(fā)送的請(qǐng)求http header中取“deviceid”。
2.公開(kāi)的手機(jī)號(hào)碼:中國(guó)聯(lián)通WAP平臺(tái)向CP Server(主域或IP地址)傳送公開(kāi)的手機(jī)號(hào)碼,CP Server獲取該公開(kāi)手機(jī)號(hào)碼的方法為:在每次用戶(hù)發(fā)送的請(qǐng)求http header中取“x-up-calling-line-id”。
以上要和聯(lián)通進(jìn)行申請(qǐng)
3、你可以試這樣的方法獲得手機(jī)號(hào)碼: Mobile = request.ServerVariables("HTTP_X_UP_subno")
Mobile =mid(FromMobile,3,11) ??
asp?lp=27&id=1782582>http://www.blueidea.com/bbs/NewsDetail.asp?lp=27&id=1782582
聲明:第三種方法不保險(xiǎn)
頭文件參考:
答7:
POST /default.asp HTTP/1.0
Host: 211.94.121.3:81
content-type: text/plain
accept-language: zh
accept-charset: ISO-8859-1, UTF-8; Q=0.8, ISO-10646-UCS-2; Q=0.6
profile: http://nds.nokia.com/uaprof/N7210r100.xml
user-agent: Nokia7210/1.0 (3.09) Profile/MIDP-1.0 Configuration/CLDC-1.0
x-wap.tod-coded: Thu, 01 Jan 1970 00:00:00 GMT
accept: */*
content-length: 1
Cookie: ASPSESSIONIDGGGQGAPU=KFHHMHPCHJFPKPEPBEDFHCJL
via: WTP/1.1 wapgw2 (Nokia WAP Gateway 3.1/CD1/3.1.43), HTTP/1.1 httpproxy2[0A0000C3] (Traffic-Server/4.0.9 [uSc ])
X-Network-info: GPRS,10.15.96.127,13810027XXX,211.139.172.70,unsecured
X-Forwarded-For: 10.15.96.127
X-Up-Calling-Line-ID: 13810027XXX
X-Source-ID: 211.139.172.70
X-Nokia-CONNECTION_MODE: CLESS
X-Nokia-BEARER: GPRS
X-Nokia-gateway-id: NAWG/3.1/Build43
Client-ip: 192.168.0.6
Connection: keep-alive
package cn.itcast.bean;
public class Person {
private Integer id;
private String name;
public Person(){
}
public Person(String name) {
this.name=name;
}
getter&&setter方法
}
Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.bean">
<class name="Person" table="person">
<id name="id" type="integer">
<generator class="native"></generator>
</id>
<property name="name" length="10" not-null="true">
</property>
</class>
</hibernate-mapping>
定義業(yè)務(wù)接口
package cn.itcast.service;
import java.util.List;
import cn.itcast.bean.Person;
public interface IPersonService {
/**
* 保存人員信息
* @param person
*/
public abstract void save(Person person);
/**
* 更新信息
* @param person
*/
public abstract void update(Person person);
/**
* 獲取人員
* @param personId
* @return
*/
public abstract Person getPerson(Integer personId);
/**
* 刪除人員信息
* @param personId
*/
public abstract void delete(Integer personId);
/**
* 獲取人員列表
* @return
*/
public abstract List<Person> getPersons();
}
業(yè)務(wù)實(shí)現(xiàn)類(lèi)
package cn.itcast.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import cn.itcast.bean.Person;
import cn.itcast.service.IPersonService;
/**
* 業(yè)務(wù)層,采用注解聲明事務(wù)
*
* @author Administrator
*
*/
@Transactional
public class PersonServiceBean implements IPersonService {
@Resource
private SessionFactory sessionFactory;
public void save(Person person) {
// 從spring 容器中得到正在管理的sessionFactory,persist方法用于保存實(shí)體
sessionFactory.getCurrentSession().persist(person);
}
public void update(Person person) {
sessionFactory.getCurrentSession().merge(person);
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
public Person getPerson(Integer personId) {
return (Person) sessionFactory.getCurrentSession().get(Person.class,
personId);
}
public void delete(Integer personId) {
sessionFactory.getCurrentSession()
.delete(
sessionFactory.getCurrentSession().load(Person.class,
personId));
}
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
@SuppressWarnings("unchecked")
public List<Person> getPersons() {
return sessionFactory.getCurrentSession().createQuery("from Person")
.list();
}
}
hibernate && spring的配置文件
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Application context definition for JPetStore's business layer.
- Contains bean references to the transaction manager and to the DAOs in
- dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<!-- 配置數(shù)據(jù)源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="" />
<!-- 連接池啟動(dòng)時(shí)的初始值 -->
<property name="initialSize" value="1" />
<!-- 連接池的最大值 -->
<property name="maxActive" value="500" />
<!-- 最大空閑值.當(dāng)經(jīng)過(guò)一個(gè)高峰時(shí)間后,連接池可以慢慢將已經(jīng)用不到的連接慢慢釋放一部分,一直減少到maxIdle為止 -->
<property name="maxIdle" value="2" />
<!-- 最小空閑值.當(dāng)空閑的連接數(shù)少于閥值時(shí),連接池就會(huì)預(yù)申請(qǐng)去一些連接,以免洪峰來(lái)時(shí)來(lái)不及申請(qǐng) -->
<property name="minIdle" value="1" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" /><!-- 將datasource注入到sessionFactory -->
<property name="mappingResources">
<list>
<value>cn/itcast/bean/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update hibernate.show_sql=false
hibernate.format_sql=false
</value>
</property>
</bean>
<!-- 通過(guò)事務(wù)管理 管理sessionFactory -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="personServiceBean"
class="cn.itcast.service.impl.PersonServiceBean">
</bean>
</beans>
/**
測(cè)試類(lèi)**/
package junit;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.itcast.bean.Person;
import cn.itcast.service.IPersonService;
public class IPersonServiceTest {
private static IPersonService ipersonservice;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
ipersonservice=(IPersonService)ctx.getBean("personServiceBean");
} catch (RuntimeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void TestSave(){
ipersonservice.save(new Person("小張"));
System.out.println("保存成功");
}
@Test public void testGetPerson(){
Person person=ipersonservice.getPerson(1);
System.out.println(person.getName());
}
@Test public void testUpdate(){
Person person=ipersonservice.getPerson(1);
person.setName("小麗");
ipersonservice.update(person);
}
@Test public void testGetPersons(){
List<Person> persons=ipersonservice.getPersons();
for(Person person : persons){
System.out.println(person.getId()+" :" +person.getName());
}
}
@Test public void testDelete(){
ipersonservice.delete(1);
}
}
table :person
id int
name varchar