JAVA数据库编程(JDBC技术)-入门笔记
生活随笔
收集整理的這篇文章主要介紹了
JAVA数据库编程(JDBC技术)-入门笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本菜鳥才介入Java,我現(xiàn)在不急著去看那些基本的語法或者一些Java里面的版本的特征或者是一些晉級的知識,因為有一點.Net的OOP編程思想,所以對于Java的這些語法以及什么的在用到的時候在去發(fā)現(xiàn)學(xué)習(xí)一下。我現(xiàn)在很迫不及待用JAVA想來實現(xiàn)以下對數(shù)據(jù)庫的增刪改查。想實現(xiàn)就來看Java是怎么操作數(shù)據(jù)庫的,回想下.Net里你可能會配置web.Config,或者你去寫一些DBhelper類然后調(diào)用里面的自己定義的一些增刪改查的方法,更或者你去配一些數(shù)據(jù)控件等等往往發(fā)現(xiàn)操作基本都是一體化的簡單。現(xiàn)在面對Java呢?
JDBC技術(shù) 百度簡介 : ?JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準(zhǔn),據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序。 JDBC并不能直接訪問數(shù)據(jù)庫,需要借助于數(shù)據(jù)庫廠商提供的JDBC驅(qū)動程序。 JDBC中常用的類和接口可用于我們編程開發(fā),利用這些類和接口可以方便的經(jīng)行數(shù)據(jù)訪問和處理。這些類和接口都位于java.sal包中。具體的下面一一揭曉~~ 廢話一堆后,其實這些廢話都可以去百度找到的有木有發(fā)現(xiàn)百度很強(qiáng)大,很犀利,很友好,很無敵啊~~~~扯遠(yuǎn)了。。。。下面開始JDBC的旅途. 數(shù)據(jù)庫連接 如果要在Java訪問數(shù)據(jù)庫,首先要加載一個數(shù)據(jù)庫驅(qū)動,數(shù)據(jù)庫驅(qū)動只需要在第一次訪問時加載一次。然后再每次訪問數(shù)據(jù)庫時創(chuàng)建一個Connection實例,獲取數(shù)據(jù)庫連接,這樣就可以執(zhí)行操作數(shù)據(jù)庫的SQL語句。最后用完后釋放掉數(shù)據(jù)庫的連接。 數(shù)據(jù)庫驅(qū)動類 不同的數(shù)據(jù)庫實現(xiàn)JDBC接口不同,所以就產(chǎn)生了不同的數(shù)據(jù)庫驅(qū)動包。驅(qū)動包就包含一些負(fù)責(zé)數(shù)據(jù)庫連接的類,把我們要操作的SQL語句傳遞到里面去。因為我上班的PC用的是SQL2012,所以我們要去這里http://www.microsoft.com/zh-cn/search/DownloadResults.aspx?q=jdbc下載下面的驅(qū)動: 可能會有人說為什么下這個呢怎么不是下面的3.0或者2.0的驅(qū)動呢!因為我的SQL版本是2012的所以下載這個,如果你是2008或者2005的話你就可以下載下面的3.0驅(qū)動包!說這么多在不明白就點進(jìn)去看下: 看明白就去下載適合自己SQL版本的驅(qū)動吧! 加載數(shù)據(jù)庫驅(qū)動類 Java加載數(shù)據(jù)庫驅(qū)動的方法是調(diào)用Class類的靜態(tài)方法forName().寫法如下: 1 Class.forName(String driveManager); forName()方法的參數(shù)用于指定要加載的數(shù)據(jù)庫驅(qū)動。加載成功,將會加載驅(qū)動類注冊給DriveManager.失敗的話拋出ClassNotFoundExecption異常。 在扯一點沒必要的閑話:為了把程序的出錯性盡量的排斥掉,我可不希望我第一次用Java的JDBC就出一堆的錯誤,然后對在學(xué)者去用工具然后跳錯。因為操作的是我PC本地的SQL12數(shù)據(jù)庫,我準(zhǔn)備一切都用默認(rèn)(端口)的東西試試先。所以我們要開始就啟動我們SQL網(wǎng)絡(luò)配置協(xié)議TCP/IP設(shè)置為啟動,當(dāng)然已經(jīng)啟動的話就沒必要在此去啟動啦! 連接SQL2012數(shù)據(jù)庫 把我們剛才下的驅(qū)動加載到 MyEclipse中來,如下: 好萌的東西,像個牛奶瓶o(^▽^)o。 下面開始我們SQL2012的數(shù)據(jù)連接操作: package myJava.jdbc; import java.sql.*; public class SelectQuery { Connection conn; ? ?? //創(chuàng)建一個返回值為Connection的方法 public Connection getConnection(){ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("數(shù)據(jù)庫驅(qū)動加載成功"); conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=DB_ShowData","sa","123456"); if(conn!=null){ System.out.println("數(shù)據(jù)庫連接成功"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //返回Connection對象 return conn; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SelectQuery getcon = new ?SelectQuery(); getcon.getConnection(); } } 運行結(jié)果如下: 看到這個應(yīng)該算是一路順風(fēng)吧!沒出什么異常,然后我們趁熱打鐵連接成功啦查詢一下有何不可,我搞一個很簡單的查詢具體代碼如下: package myJava.jdbc; import java.sql.*; public class SelectQuery { Connection conn; ? ?? //創(chuàng)建一個返回值為Connection的方法 public Connection getConnection(){ try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); System.out.println("數(shù)據(jù)庫驅(qū)動加載成功"); conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=DB_ShowData","sa","123456"); if(conn!=null){ System.out.println("數(shù)據(jù)庫連接成功"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //返回Connection對象 return conn; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SelectQuery getcon = new ?SelectQuery(); getcon.getConnection(); //查詢 String sql = "SELECT * FROM [dbo].[User]"; try { PreparedStatement Ps = getcon.conn.prepareStatement(sql); ResultSet Rs = Ps.executeQuery(); while(Rs.next()){ String name = Rs.getString("Name"); String password = Rs.getString("Password"); System.out.println(name); System.out.println(password); } Rs.close(); Ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 運行結(jié)果如下: 結(jié)果出來啦o(^▽^)o不是重點,重點是這個查詢里面我們都用到了JDBC技術(shù)中的那些類和接口,或許你看了上面的代碼還是茫然我說的是和我一樣入門的人,那么下面的解釋后,你就懂得啦! 首先是我們在getConnection中用到的 DriverManager類 DriverManager類是用來管理數(shù)據(jù)庫中所有的驅(qū)動程序,是JDBC的管理層,作用用戶和驅(qū)動程序之間,并在數(shù)據(jù)庫的驅(qū)動之間建立連接。DriverManager類中的方法都是靜態(tài)方法,所以用的時候不需要實例化,直接調(diào)用類名就可以。 DriverManager類的常用方法如下: 方法 功能 getConnection(String url,String user,String password) 指定3個參數(shù),連接數(shù)據(jù)庫的url,數(shù)據(jù)庫用戶名,數(shù)據(jù)庫密碼 setLoginTimeout() 獲取驅(qū)動程序試圖登錄到某一個數(shù)據(jù)庫時可以等待的最長時間 printIn(String Message) 將一條消息打印到當(dāng)前JDBC日志流中 其次我們看到就是Connection接口 Connection接口代表與特定的數(shù)據(jù)庫的連接。要對數(shù)據(jù)表中的數(shù)據(jù)經(jīng)行操作,首先要獲取數(shù)據(jù)庫連接。 Connection接口常用的方法如下: 方法 功能 createStatement() 創(chuàng)建Statement對象 createStatement(int resultSetType,int resultSetConcurrency) 創(chuàng)建一個Statement對象,該對象將生產(chǎn)具有給定類型,并發(fā)性和可保存性的ResultSet對象 prepareStatement() 創(chuàng)建預(yù)處理對象PreparedStatement isReadOnly() 查看當(dāng)前的Connection對象的讀取模式是否為之讀形式 setReadOnly() 設(shè)置當(dāng)前Connection對象的讀寫模式i,默認(rèn)是非只讀模式 commit() 使所有上一次提交,回滾后進(jìn)行的更改成為持久更改 roolback() 取消再當(dāng)前事物中經(jīng)行的所有更改,并釋放此Connection對象當(dāng)前持有的所有數(shù)據(jù)庫鎖 close() 立即釋放Connection對象數(shù)據(jù)庫和JDBC資源 PreparedStatement接口 PreparedStatement接口繼承Statemetn接口,用于執(zhí)行動態(tài)的SQL語句,通過PreparedStatement實例執(zhí)行SQL語句,將被預(yù)編譯并保存到PreparedStatement實例中,從而可以反復(fù)的執(zhí)行SQL語句。可以通過Connection類的prepareStatement()方法獲取PreparedStatement對象。PreparedStatement接口常用的方法: 方法 功能描述 execute() 在此PreparedStatement對象中執(zhí)行SQL語句,該語句可以是任何類型的SQL語句 executeQuery() 在此PreparedStatement對象中SQL查詢語句,返回結(jié)果為查詢結(jié)果集ResultSet對象 executeUpadte() 在此PreparedStatement對象中執(zhí)行SQL語句,該SQL語句必須是個INSET,UPDATE,DELETE語句,或者返回沒有返回值的DDl語句 setByte(int pIndex,byte bt) 將參數(shù)pIndex位置上設(shè)置為給定的byte型參數(shù)值bt setDouble(int pIndex,double dou) 將參數(shù)pIndex位置上設(shè)置為給定的double型參數(shù)值dou setInt(int pInde,int x) 將參數(shù)pIndex位置上設(shè)置為給定的int型參數(shù)值x setObject(int pIndex,Object o) 將參數(shù)pIndex位置上設(shè)置為給定的Object型參數(shù)值o setString(int pIndex,String str) 將參數(shù)pIndex位置上設(shè)置為給定的String型參數(shù)值str ResultSet接口 ResultSet接口類似一張數(shù)據(jù)表,用來暫時存放數(shù)據(jù)庫查詢操作獲得的結(jié)果集。ResultSet實例具有指向當(dāng)前數(shù)據(jù)行的指定,指針開始的位置在查詢的結(jié)果集第一條記錄的前面。在獲取查詢結(jié)果集時,可通過next()方法將指針向下移動。如果存在下一行,還方法返回true,否則返回false. 方法 功能 getInt() 以intt形式獲取ResultSet對象的當(dāng)前行的指定值 getFloat() 以float形式獲取ResultSet對象的當(dāng)前行的指定值 getDate() 以Data形式獲取ResultSet對象的當(dāng)前行的指定值 getBoolean() 以boolean形式獲取ResultSet對象的當(dāng)前行的指定值 getString() 以String形式獲取ResultSet對象的當(dāng)前行的指定值 getObject() 以O(shè)bject形式獲取ResultSet對象的當(dāng)前行的指定值 frist() 將指針移到當(dāng)前記錄的第一行 last() 將指針移到當(dāng)前記錄的最后一行 next() 將指針下移一行 beforeFirst() 將指針移到集合的開頭 afterLast() 將指針移到集合的尾部 absolute(int index) 將指針一到ResultSet指定編號的行 inFist() 判斷指針是否位于當(dāng)前ResultSet集合的第一行 isLast() 判斷指針是否位于當(dāng)前ResultSet集合的最后一行 updateInt() 用指定的int值更新指定列 upadateFloat() 用指定的float值更新指定列 updateLong() 用指定的Long值更新指定列 updateString() 用String值更新指定列 updateObject() 用Object值更新指定列 updateNull() 將指定列的值改為NULL updateDate() 用指定的Date值更新指定列 updateDouble() 用指定的double值更新指定列 getRow() 查看當(dāng)前的索引號 insertRow() 將插入行的內(nèi)容插入到數(shù)據(jù)庫 updateRow() 將當(dāng)前行的內(nèi)容同步到數(shù)據(jù)庫 deleteRow() 刪除當(dāng)前行,但不同步到數(shù)據(jù)庫中,在執(zhí)行close()方法后同步到數(shù)據(jù)庫中
總結(jié)
以上是生活随笔為你收集整理的JAVA数据库编程(JDBC技术)-入门笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javaweb学习总结(七)——Http
- 下一篇: Tomcat系列之Java技术详解