溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行MySQL實(shí)施JDBC 2.0/3.0 的新特性實(shí)踐

發(fā)布時(shí)間:2021-11-29 10:48:54 來源:億速云 閱讀:127 作者:柒染 欄目:MySQL數(shù)據(jù)庫

這篇文章將為大家詳細(xì)講解有關(guān)如何進(jìn)行MySQL實(shí)施JDBC 2.0/3.0 的新特性實(shí)踐,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

昨天一天都沒有調(diào)試出上傳圖像到數(shù)據(jù)庫中的程序,雖然查了CSDN,但所查資料都不好使。今天想起了幾個(gè)關(guān)鍵點(diǎn)沒有仔細(xì)的試到,主要是JDBC API新功能到底對(duì)MySql有沒有作用,如果不行,為什么MySQL Driver包中的ResultSet類中有新的API方法?另外,upload包的幾個(gè)類對(duì)添加圖像到數(shù)據(jù)庫中到底行不行。不管行還是不行,我得再仔細(xì)試一下。因昨天曾測(cè)試通過了JDBC API新的更新方法,所以計(jì)劃今天先調(diào)試上傳圖像到數(shù)據(jù)庫中程序,經(jīng)過一小段時(shí)間的調(diào)試,終于通過,調(diào)用圖像顯示程序一試,圖像出來了,試試jpg格式的圖像,也成功了,真是大快人心。數(shù)據(jù)庫保存圖像功能調(diào)試成功為我調(diào)試JDBC API新的插入功能增加了信心,幾經(jīng)周折也成功了,為了記住這一過程,我想想還是寫下來。

  原定目標(biāo):通過網(wǎng)絡(luò),把客戶端的gif或jpg圖像文件存到服務(wù)器端的MySQL數(shù)據(jù)庫中。
  設(shè)計(jì)思路:做一個(gè)供客戶使用的表單,客戶通過該表單可查找客戶端的圖像文件,并提取該文件的文件名于表單輸入框中??蛻籼峤槐韱魏螅瑢⒓せ罘?wù)器端的insertpic.jsp,通過insertpic.jsp保存圖像文件的數(shù)據(jù)到數(shù)據(jù)庫中。
  在實(shí)施過程中又遇到和攻克了新的難題:JDBC新的API插入、更新、刪除指令如何使用;upload包如何使用,學(xué)習(xí)和演示了《Java Servlets編程指南》上提供的連接池,圖像顯示程序。
  具體編程思路、遇到的問題,小結(jié):
  1、數(shù)據(jù)庫表名:javadoc;保存圖像數(shù)據(jù)的字段用Blob或MediumBlob或LongBlob類型的。
  建立數(shù)據(jù)表的SQL語句如下:

  SQL = "CREATE TABLE javadoc (" +
    "gid int(11) NOT NULL auto_increment," +
    "gheading varchar(100)," +
    "gimage longblob," +
    "PRIMARY KEY (gid))";

  2、表單上的查找并提取圖像文件名的輸入框用下面的語句實(shí)現(xiàn):
    

圖像


  3、表單的

要加入下面的屬性和屬性值:
    enctype="multipart/form-data"
  加入該屬性后,該表單就不能再同時(shí)作為傳輸其他數(shù)據(jù)字段的表單了,如不能再傳送串字段。
  4、啟用upload包,內(nèi)含F(xiàn)ile.class、Files.class、Request.class、SmartUpload.class、SmartUploadException.class,來協(xié)助保存圖像,以降低開發(fā)難度。
  幾個(gè)類的原代碼見相關(guān)文件,F(xiàn)ile類公用方法已粘在相關(guān)的jsp文件中。
  5、JDBC新的API插入、更新、刪除功能,具體步驟如下:
  插入一個(gè)記錄的步驟:
    (1)準(zhǔn)備一個(gè)空記錄:MoveToInsertRow();
    (2)填入數(shù)據(jù):updateXXX();
    (3)實(shí)施插入:insertRow();
  更新一個(gè)記錄步驟:
    (1)定位記錄:用absolute()或relative()等方法;
    (2)填入新值:updateXXX();
    (3)實(shí)施更新:updateRow();
  刪除一個(gè)記錄的步驟:
    (1)定位記錄:用absolute()或relative()等方法;
    (2)實(shí)施刪除:deleteRow();
  6、插入數(shù)據(jù)遇到的問題:我在保存圖像的表中設(shè)計(jì)了一個(gè)自動(dòng)增量的gid字段,并定義為NOT NULL。在通常用SQL語句插入新值的情況下,可以忽略對(duì)該字段插值,數(shù)據(jù)庫會(huì)自動(dòng)賦值。但在使用JDBC API插入記錄的過程中發(fā)現(xiàn),對(duì)該字段不能不管,必須調(diào)用rs.updateLong("gid" ..)賦值,否則系統(tǒng)會(huì)出現(xiàn)異常。我也想到并試過申請(qǐng)一個(gè)不包含該字段的游標(biāo),然后對(duì)該游標(biāo)執(zhí)行上面的幾個(gè)插入記錄的步驟,但也出現(xiàn)異常。另外,我的表中還有一個(gè)gheading的字段,該字段缺省值沒定義,建立一個(gè)不包含該字段的游標(biāo)然后執(zhí)行插入新記錄的操作是可以通過的,即執(zhí)行插入操作對(duì)gheading這類字段可以忽略不用管它。由此我推斷,只要是被說明為NOT NULL的字段,你在使用JDBC新的API進(jìn)行插入記錄編程時(shí)不能忽略它,必須要顯式的賦值,否則系統(tǒng)會(huì)出現(xiàn)異常。
  7、對(duì)自動(dòng)增量的字段在進(jìn)行插入記錄編程時(shí)如何為其賦新值?
  我的方案是這樣:
  (1)使用select * form tablename order by gid 申請(qǐng)游標(biāo),其中g(shù)id為自動(dòng)增量并不能為NULL的字段,為了簡(jiǎn)單,假設(shè)該游標(biāo)不會(huì)為空;
  (2)對(duì)游標(biāo)last()一下,到游標(biāo)的底部;
  (3)取gid字段的值賦給一個(gè)臨時(shí)變量mid;
  (4)mid++;
  (5)對(duì)gid字段實(shí)行 updateLong("gid",mid);
  ...
  8、對(duì)自動(dòng)增量的字段插入記錄編程按上述步驟賦新值還要考慮的問題?
  我認(rèn)為要考慮為記錄上鎖,否則仍有出現(xiàn)異常的潛在問題。

關(guān)于如何進(jìn)行MySQL實(shí)施JDBC 2.0/3.0 的新特性實(shí)踐就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI