實(shí)習(xí)中接觸到的數(shù)據(jù)庫(kù)知識(shí)

在數(shù)據(jù)庫(kù)方面朋鞍,主要是涉及到之前沒(méi)有接觸或者接觸很少的知識(shí)點(diǎn)。比如存儲(chǔ)過(guò)程迫横、select top實(shí)現(xiàn)數(shù)據(jù)分頁(yè)番舆、短路表達(dá)式。下面使用簡(jiǎn)單的例子來(lái)說(shuō)明

首先在數(shù)據(jù)庫(kù)中簡(jiǎn)單建立一個(gè)數(shù)據(jù)表矾踱,如圖


users表.PNG

對(duì)于上表恨狈,只是截取部分,數(shù)據(jù)遠(yuǎn)不止7個(gè)呛讲,建表時(shí)采用循環(huán)插入數(shù)據(jù)的方法共插入99條數(shù)據(jù)
<pre>declare @i int,@j int;
set @i=1;
set @j=10;
while @i < 100
begin insert into test.dbo.users(id,name,password) values(@i,@j+1,@j+2);
set @i=@i+1;
set @j=@j+1;
end </pre>

在實(shí)際開(kāi)發(fā)中建表時(shí)需要注意的問(wèn)題:相似數(shù)據(jù)類(lèi)型的區(qū)別
char:使用時(shí)需固定長(zhǎng)度禾怠,如char(10),表示它占有10個(gè)字節(jié)贝搁,如果實(shí)際數(shù)據(jù)并未達(dá)到10字節(jié)吗氏,則差的部分會(huì)以空格來(lái)填補(bǔ)
varchar:使用時(shí)雖然設(shè)置有長(zhǎng)度,如varchar(10),但是實(shí)際占位以實(shí)際數(shù)據(jù)為準(zhǔn)雷逆,若數(shù)據(jù)只有5個(gè)字節(jié)則只占5個(gè)字節(jié)
text:不需要定義長(zhǎng)度弦讽,一般用來(lái)存儲(chǔ)文本數(shù)據(jù)
nchar、nvarchar膀哲、ntext:與char往产、varchar和text的區(qū)別在于存儲(chǔ)數(shù)據(jù)的方式不同,nchar某宪、nvarchar和ntext采用unicode字符存儲(chǔ)數(shù)據(jù)仿村,所有字符都是使用兩個(gè)字節(jié)表示,因此存儲(chǔ)總量(都是存儲(chǔ)英文的情況下)char兴喂、varchar和text為8000蔼囊,ncahr、nvarchar和ntext則只有4000

1.存儲(chǔ)過(guò)程:在數(shù)據(jù)庫(kù)中進(jìn)行sql代碼編寫(xiě)衣迷,類(lèi)似java中的一個(gè)方法畏鼓,可以接收參數(shù),在java代碼中可以直接調(diào)用這個(gè)方法獲取數(shù)據(jù)蘑险,避免在java代碼中編寫(xiě)sql語(yǔ)句(只是舉例滴肿,并不是只有java可以使用)
建立存儲(chǔ)過(guò)程

新建存儲(chǔ)過(guò)程.png

右鍵新建存儲(chǔ)過(guò)程,會(huì)得到下面的頁(yè)面
存儲(chǔ)過(guò)程示例.PNG

本例中先使用簡(jiǎn)單的查詢(xún)?nèi)繑?shù)據(jù)佃迄,稍后會(huì)進(jìn)行參數(shù)的添加
存儲(chǔ)過(guò)程getUsers.PNG

如圖:設(shè)置方法名為getUsers,查詢(xún)?nèi)繑?shù)據(jù)
然后在java代碼中進(jìn)行調(diào)用
<pre>Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test","xxx","xxx");
CallableStatement cs = conn.prepareCall("{call getUsers()}"); //調(diào)用getUser()方法
ResultSet rs = cs.executeQuery(); //查詢(xún)結(jié)果保存在ResultSet中
while(rs.next()){ //讀取ResultSet中的數(shù)據(jù)
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("name is " + name + "and password is" + password);
}</pre>
打印結(jié)果:
部分?jǐn)?shù)據(jù).PNG

2.select top實(shí)現(xiàn)數(shù)據(jù)分頁(yè)
select top在數(shù)據(jù)庫(kù)中是讀取前多少條數(shù)據(jù)泼差。
新建存儲(chǔ)過(guò)程贵少,如下

存儲(chǔ)過(guò)程getUsersByIndex.PNG

上圖中select top部分的代碼,pageSize是指每個(gè)頁(yè)面顯示多少數(shù)據(jù)堆缘,pageIndex是指當(dāng)前的頁(yè)面滔灶,@pageSize*(@pageIndex-1)得到的結(jié)果便是當(dāng)前頁(yè)之前已經(jīng)顯示了多少條數(shù)據(jù),第二個(gè)select top就是獲得這些數(shù)據(jù)的id吼肥,然后第一個(gè)select top則是從id不在這些id之中的數(shù)據(jù)開(kāi)始選取前多少條录平,由此實(shí)現(xiàn)分頁(yè)功能
在java代碼中進(jìn)行調(diào)用
<pre>CallableStatement cs = connection.prepareCall("{call getUsersByIndex(?,?)}");
callableStatement.setInt(1, 10); //第一個(gè)參數(shù)指的是pageSize,就是每頁(yè)顯示多少數(shù)據(jù)
callableStatement.setInt(2, 3); //第二個(gè)參數(shù)指的是pageIndex,當(dāng)前的頁(yè)碼
ResultSet rs = callableStatement.executeQuery();
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("id is " + id + " name is" + name + " password is " + password);
}</pre>
綜上就是每頁(yè)顯示10條數(shù)據(jù)缀皱,當(dāng)前顯示第3頁(yè)斗这,打印結(jié)果如下
第3頁(yè)的10條數(shù)據(jù).PNG

3.短路表達(dá)式
在涉及模糊查詢(xún)和全部查詢(xún)時(shí),可以分兩條語(yǔ)句操作啤斗,需要寫(xiě)兩個(gè)方法表箭,但是會(huì)有重復(fù)代碼,使用短路表達(dá)式可以將兩條語(yǔ)句變?yōu)橐粭l钮莲, 只需要一個(gè)方法即可免钻。還是以上表為例,查詢(xún)?nèi)繑?shù)據(jù)崔拥,查詢(xún)name中關(guān)鍵字為0的數(shù)據(jù)(這次不使用存儲(chǔ)過(guò)程)
<pre> keyword = "%" + keyword + "%"; //keyword由調(diào)用該方法時(shí)傳入
String sql = "select * from users where ((0=? and name like '%%') or (name like ?))";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test","huangkunkun","312293");
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1); //第一個(gè)參數(shù)作為判斷條件极舔,這里為了執(zhí)行or后面的語(yǔ)句,直接設(shè)置成1
ps.setString(2, keyword);
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
System.out.println("id is " + id + " name is " + name + " password is " + password);
}
} catch (Exception e) {
e.printStackTrace();
}</pre>
上面代碼中的<pre>select * from users where ((0=? and name like '%%') or (name like ?))</pre> 如果0=?即傳入的參數(shù)若滿(mǎn)足和0相等链瓦,則執(zhí)行or前面的代碼拆魏,且忽略or后面的代碼,如果等式不成立慈俯,則會(huì)執(zhí)行or后面的代碼稽揭。打印結(jié)果如下

name關(guān)鍵字為0的數(shù)據(jù).PNG

主要知識(shí)點(diǎn)就是這些,都是按照自己的理解來(lái)寫(xiě)的肥卡,可能會(huì)有不全面的地方,如果有錯(cuò)誤事镣,歡迎指出共同探討哈步鉴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市璃哟,隨后出現(xiàn)的幾起案子氛琢,更是在濱河造成了極大的恐慌,老刑警劉巖随闪,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳似,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡铐伴,警方通過(guò)查閱死者的電腦和手機(jī)撮奏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)俏讹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人畜吊,你說(shuō)我怎么就攤上這事泽疆。” “怎么了玲献?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)捌年。 經(jīng)常有香客問(wèn)我瓢娜,道長(zhǎng),這世上最難降的妖魔是什么礼预? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任眠砾,我火速辦了婚禮,結(jié)果婚禮上逆瑞,老公的妹妹穿的比我還像新娘荠藤。我一直安慰自己,他們只是感情好获高,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布哈肖。 她就那樣靜靜地躺著,像睡著了一般念秧。 火紅的嫁衣襯著肌膚如雪淤井。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天摊趾,我揣著相機(jī)與錄音币狠,去河邊找鬼。 笑死砾层,一個(gè)胖子當(dāng)著我的面吹牛漩绵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肛炮,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼止吐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了侨糟?” 一聲冷哼從身側(cè)響起碍扔,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秕重,沒(méi)想到半個(gè)月后不同,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年二拐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了服鹅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卓鹿,死狀恐怖菱魔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吟孙,我是刑警寧澤澜倦,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站杰妓,受9級(jí)特大地震影響藻治,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巷挥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一桩卵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倍宾,春花似錦雏节、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至怔锌,卻和暖如春寥粹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背埃元。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工涝涤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岛杀。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓阔拳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親类嗤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衫生,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法土浸,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法彭羹,異常的語(yǔ)法黄伊,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,598評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,805評(píng)論 0 11
  • 迎春花爬滿(mǎn)斜坡, 一片黃色派殷; 春風(fēng)吹皺了湖水还最, 一片綠色墓阀; 蒼穹中飛翔著小鳥(niǎo), 一片蘭色拓轻; 我在小道上走著斯撮, 一身青色。
    秋山秋水閱讀 305評(píng)論 5 5
  • 大前天上午因?yàn)榉咐б彩强蘖撕脦状畏霾妫形缤抟驗(yàn)樘鸸牌艓窍滦^(qū)希望她吹著自然風(fēng),呼吸著外邊新鮮的空氣自主入睡...
    怡倩婷閱讀 219評(píng)論 0 0