這篇文章給大家分享的是有關(guān)java怎樣創(chuàng)建一個jdbc程序的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
專注于為中小企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)常山免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。JDBC簡介
Java數(shù)據(jù)庫連接(Java Database Connectivity,JDBC),是一種用于執(zhí)行SQL語句的Java API,它由一組用Java編程語言編寫的類和接口組成。
JDBC為數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,使他們能夠用純Java API來編寫數(shù)據(jù)庫應(yīng)用程序。
使用JDBC編寫的程序能夠自動地將SQL語句傳送給相應(yīng)的數(shù)據(jù)庫管理系統(tǒng)。
JDBC擴展了Java的功能,由于Java語言本身的特點,使得JDBC具有簡單、健壯、安全、可移植、獲取方便等優(yōu)勢。
我們在沒有JDBC之前,使用驅(qū)動程序在Java程序與MySQL、Oracle、SQLServer等數(shù)據(jù)庫之間建立連接,驅(qū)動程序就是在該課程中將要學(xué)到的內(nèi)容。那么就存在一個問題:在同一個Java程序與數(shù)據(jù)庫之間建立連接時,驅(qū)動程序是否是共用的呢?如果一樣,很顯然就能節(jié)省代碼量,但是實際上是不一樣的。一定要注意是不一樣的。那么就存在一個問題:當?shù)讓訑?shù)據(jù)庫發(fā)生改變之后,數(shù)據(jù)庫的驅(qū)動程序也會隨之發(fā)生變化,那么該怎么解決該問題呢?于是JDBC出現(xiàn)了,目的是為了減輕開發(fā)人員的工作量,以提高代碼的復(fù)用。
JDBC API
接口/類 | 功能說明 |
---|---|
DriverManager | 數(shù)據(jù)庫驅(qū)動管理類,用于加載和卸載各種驅(qū)動程序,并建立于數(shù)據(jù)庫的連接 |
Connection | 此接口用于連接數(shù)據(jù)庫 |
Statement | 此接口用于執(zhí)行SQL語句并將數(shù)據(jù)檢索到ResultSet中 |
ResultSet | 結(jié)果集接口,提供檢索SQL語句返回數(shù)據(jù)的各種方法 |
PreparedStatement | 此接口用于執(zhí)行預(yù)編譯的SQL語句 |
CallableStatement | 此接口用于執(zhí)行SQL存儲過程的語句 |
JDBC結(jié)構(gòu)
1.JDBC API是Java開發(fā)工具包(JDK)的組成部份:
JDBC驅(qū)動程序管理器
JDBC驅(qū)動程序測試工具包
JDBC-ODBC橋
2.JDBC驅(qū)動程序管理器是JDBC體系結(jié)構(gòu)的支柱,其主要作用是把Java應(yīng)用程序連接到正確的JDBC驅(qū)動程序上。
3.JDBC驅(qū)動程序測試工具包為JDBC驅(qū)動程序的運行提供一定的可信度,只有通過JDBC驅(qū)動程序測試包的驅(qū)動程序才被認為是符合JDBC標準的。
4.JDBC-ODBC橋使ODBC驅(qū)動程序可被用作JDBC驅(qū)動程序。其目標是為方便實現(xiàn)訪問某些不常見的DBMS,它的實現(xiàn)為JDBC的快速發(fā)展提供了一條途徑。
在開始之前,我們先來實現(xiàn)一個簡單的JDBC程序
步驟
1,注冊驅(qū)動;(只需要注冊一次)
2,建立連接;
3,創(chuàng)建執(zhí)行的sql語句;
4,執(zhí)行語句;
5,處理執(zhí)行結(jié)果;
6,釋放資源;
示例
package cn.ccnu; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import com.mysql.jdbc.Statement; public class Demo1 { public static void main(String[] args) throws Exception { test(); } public static void test() throws Exception { //1,注冊驅(qū)動 // DriverManager.registerDriver(new com.mysql.jdbc.Driver()); // System.getProperty("jdbc.driver", "con.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver");//這三種注冊方式,推薦使用這種 //2,建立連接 //url格式 //JDBC:子協(xié)議:子名稱//主機名:端口/數(shù)據(jù)庫名稱 String url = "jdbc:mysql://localhost:3306/test";//如果是本機,也可以將localhost:3306省掉 String user = "root"; String password = "123456"; Connection conn = (Connection)DriverManager.getConnection(url, user, password); //3,創(chuàng)建slq執(zhí)行語句 Statement st = (Statement) conn.createStatement(); //4,執(zhí)行語句 ResultSet rs = st.executeQuery("select * from a"); //5,處理執(zhí)行結(jié)果 while (rs.next()) { System.out.println(rs.getObject(1)); } //6,關(guān)閉連接,釋放資源 rs.close(); st.close(); conn.close(); } }
分析JDBC開發(fā)步驟
使用JDBC訪問數(shù)據(jù)庫的基本步驟一般如下:
加載JDBC驅(qū)動程序
創(chuàng)建數(shù)據(jù)庫連接
創(chuàng)建Statement對象
執(zhí)行SQL語句
處理返回結(jié)果
關(guān)閉創(chuàng)建的對象
開發(fā)第一個JDBC程序
package com.wfu.ch09; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Test1 { public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver");//里面的名字一定不要寫錯,這個也是導(dǎo)入的 //forName(String className) 返回與帶有給定字符串名的類或接口相關(guān)聯(lián)的 Class 對象。 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/k-user","root","123456");//試圖建立到給定數(shù)據(jù)庫 URL 的連接。 Statement stmt=conn.createStatement(); //創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫。 // String insertsql="insert into k_user(userno,username,pwd) values('1002','張三','123')"; // int x=stmt.executeUpdate(insertsql); //executeUpdate 返回一個int 型的數(shù)據(jù) 括號里面是一個字符串數(shù)據(jù)類型,詳細內(nèi)容看文檔 //(1) 對于 SQL 數(shù)據(jù)操作語言 (DML) 語句,返回行計數(shù) //(2) 對于不返回任何內(nèi)容的 SQL 語句,返回 0 // if(x>0){ // System.out.println("插入成功!"); // } // String updateSql="update k_user set pwd='123456' where userno='1002'"; // int x=stmt.executeUpdate(updateSql); // if(x>0){ // System.out.println("更新成功!"); // } String deleteSql="delete from k_user where userno='1002'"; int x=stmt.executeUpdate(deleteSql); if(x>0){ System.out.println("刪除成功!"); } String sql="select * from k_user"; ResultSet rs=stmt.executeQuery(sql); while(rs.next()){ for(int i=1;i<=13;i++){ System.out.print(rs.getString(i)+" "); } System.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.wfu.ch09; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Test2 { public static void main(String[] args) { try { // step1:加載JDBC驅(qū)動程序 Class.forName("com.mysql.jdbc.Driver"); // step2:建立數(shù)據(jù)庫的連接 Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/stock11", "root", "123"); // // step3:創(chuàng)建Statement對象 Statement st = conn.createStatement(); //step4:執(zhí)行SQL語句 String selectSql="select * from k_user"; //step5:處理結(jié)果集 ResultSet rs=st.executeQuery(selectSql); while(rs.next()){ for(int i=1;i<=13;i++){ System.out.print(rs.getString(i)+" "); } System.out.println(); // String x=rs.getString("hometown"); // System.out.println(x); } //step6:關(guān)閉創(chuàng)建的對象 //關(guān)閉結(jié)果集 rs.close(); //關(guān)閉statement對象 st.close(); //關(guān)閉連接 conn.close(); // step4: 執(zhí)行SQL語句 //// String insertSql = "insert into k_user(userno,username,pwd) values('1001','tom','123')"; // int x = st.executeUpdate(insertSql); // if(x>0){ // System.out.println("插入成功!"); // } // String updateSql="update k_user set pwd='123456' where userno='1001'"; // int x=st.executeUpdate(updateSql); // if(x>0){ // System.out.println("更新成功!"); // } // String deleteSql="delete from k_user where userno='1001'"; // int x=st.executeUpdate(deleteSql); // if(x>0){ // System.out.println("刪除成功!"); // } // } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
各個語句說明
加載JDBC驅(qū)動程序
加載驅(qū)動程序的方法:
Class.forName("DriverName")
其中DriverName是要加載的JDBC驅(qū)動程序名稱。驅(qū)動程序名稱根據(jù)數(shù)據(jù)庫廠商提供的JDBC驅(qū)動程序的種類來確定。
加載MySQL數(shù)據(jù)庫驅(qū)動程序的方法為:
Class.forName("com.mysql.jdbc.Driver");
加載Oracle數(shù)據(jù)庫驅(qū)動程序的方法為:
創(chuàng)建數(shù)據(jù)庫連接-1
DriverManager類是JDBC的管理層,作用于用戶和驅(qū)動程序之間,跟蹤可用的驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。該類負責(zé)加載、注冊JDBC驅(qū)動程序,管理應(yīng)用程序和已注冊的驅(qū)動程序的連接。
DriverManager的常用方法:
方法名 | 功能說明 |
---|---|
Static connection getConnection(String url, String user, String password) | 用于建立到指定數(shù)據(jù)庫 URL 的連接。其中url為 提供了一種標識數(shù)據(jù)庫位置的方法,user為用戶名,password為密碼 |
static Driver getDriver(String url) | 用于返回能夠打開url所指定的數(shù)據(jù)庫的驅(qū)動程序 |
使用DriverManager類的getConnection()創(chuàng)建一個數(shù)據(jù)庫連接:
Connection conn = DriverManager.getConnection(String url,String user,String password);
創(chuàng)建數(shù)據(jù)庫連接-2
URL提供了一種標識數(shù)據(jù)庫位置的方法,可以使相應(yīng)的驅(qū)動程序能夠識別該數(shù)據(jù)庫并與它建立連接。
JDBC URL由三個部分組成:
jdbc : < subprotocol> : < subname>
可以根據(jù)子協(xié)議的改變而變化。
是子協(xié)議,指數(shù)據(jù)庫連接的方式。
創(chuàng)建數(shù)據(jù)庫連接-3
對于MySQL驅(qū)動的連結(jié)的URL是:
jdbc:mysql://serverName:port/instance
mysql為子協(xié)議名稱
serverName為MySQL數(shù)據(jù)庫服務(wù)器名稱,可以是一個域名,也可以是IP地址
port為MySQL數(shù)據(jù)庫的端口號,默認為3306
instance是數(shù)據(jù)庫的實例名
示例:
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/haier", "root", "123");
創(chuàng)建SQL 語句
創(chuàng)建完連接之后,可以通過此連接向目標數(shù)據(jù)庫發(fā)送SQL語句。在發(fā)送SQL語句之前,須創(chuàng)建一個Statement類的對象,該對象負責(zé)將SQL語句發(fā)送給數(shù)據(jù)庫。如果SQL語句運行后產(chǎn)生結(jié)果集,Statement對象會將結(jié)果集封裝成ResultSet對象并返回。
通過調(diào)用Connection接口的createStatement方法來創(chuàng)建Statement對象,如:
Statement smt = conn.createStatement();
執(zhí)行SQL語句
在Statement接口中有兩個非常重要的方法,分別是executeUpdate方法和executeQuery方法。使用executeUpdate方法可以執(zhí)行插入、修改和刪除等操作的SQL語句, executeUpdate方法的返回值是一個int類型數(shù)值,表示更新數(shù)據(jù)表的行數(shù)。使用 executeQuery方法可以執(zhí)行數(shù)據(jù)庫查詢操作的SQL語句,他的返回值是實現(xiàn)ResultSet接口的對象,在其中保存從數(shù)據(jù)庫中查詢出來的數(shù)據(jù)。
例如:
int row=stmt.executeUpdate(sql);
寫到這,對于sql命令的展開沒有進行詳細的說明,在上面的例子中的代碼中有很多注釋,都有了詳細的說明,對于如何寫一個jdbc 程序也有了步驟說明,而且都是一個接著一個的,包括聲明的對象類型,還有一個注意的地方就是在最后關(guān)閉程序的時候,也是有順序的,對于有依賴關(guān)系的語句都是依次關(guān)閉的,在程序的代碼中也是有說明的。
感謝各位的閱讀!關(guān)于“java怎樣創(chuàng)建一個jdbc程序”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
文章題目:java怎樣創(chuàng)建一個jdbc程序-創(chuàng)新互聯(lián)
文章起源:http://newbst.com/article10/dihddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、手機網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計、網(wǎng)站營銷、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容