<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    完整java開發(fā)中JDBC連接數(shù)據(jù)庫代碼和步驟

    1. JDBC連接數(shù)據(jù)庫   
    2. •創(chuàng)建一個(gè)以JDBC連接數(shù)據(jù)庫的程序,包含7個(gè)步驟:   
    3.  1、加載JDBC驅(qū)動(dòng)程序:   
    4.     在連接數(shù)據(jù)庫之前,首先要加載想要連接的數(shù)據(jù)庫的驅(qū)動(dòng)到JVM(Java虛擬機(jī)),   
    5.     這通過java.lang.Class類的靜態(tài)方法forName(String  className)實(shí)現(xiàn)。   
    6.     例如:   
    7.     try{   
    8.     //加載MySql的驅(qū)動(dòng)類   
    9.     Class.forName("com.mysql.jdbc.Driver") ;   
    10.     }catch(ClassNotFoundException e){   
    11.     System.out.println("找不到驅(qū)動(dòng)程序類 ,加載驅(qū)動(dòng)失敗!");   
    12.     e.printStackTrace() ;   
    13.     }   
    14.    成功加載后,會(huì)將Driver類的實(shí)例注冊(cè)到DriverManager類中。   
    15.  2、提供JDBC連接的URL   
    16.    •連接URL定義了連接數(shù)據(jù)庫時(shí)的協(xié)議、子協(xié)議、數(shù)據(jù)源標(biāo)識(shí)。   
    17.     •書寫形式:協(xié)議:子協(xié)議:數(shù)據(jù)源標(biāo)識(shí)   
    18.     協(xié)議:在JDBC中總是以jdbc開始   
    19.     子協(xié)議:是橋連接的驅(qū)動(dòng)程序或是數(shù)據(jù)庫管理系統(tǒng)名稱。   
    20.     數(shù)據(jù)源標(biāo)識(shí):標(biāo)記找到數(shù)據(jù)庫來源的地址與連接端口。   
    21.     例如:(MySql的連接URL)   
    22.     jdbc:mysql:   
    23.         //localhost:3306/test?useUnicode=true&characterEncoding=gbk ;   
    24.    useUnicode=true:表示使用Unicode字符集。如果characterEncoding設(shè)置為   
    25.    gb2312或GBK,本參數(shù)必須設(shè)置為true 。characterEncoding=gbk:字符編碼方式。   
    26.  3、創(chuàng)建數(shù)據(jù)庫的連接   
    27.     •要連接數(shù)據(jù)庫,需要向java.sql.DriverManager請(qǐng)求并獲得Connection對(duì)象,   
    28.      該對(duì)象就代表一個(gè)數(shù)據(jù)庫的連接。   
    29.     •使用DriverManager的getConnectin(String url , String username ,    
    30.     String password )方法傳入指定的欲連接的數(shù)據(jù)庫的路徑、數(shù)據(jù)庫的用戶名和   
    31.      密碼來獲得。   
    32.      例如:   
    33.      //連接MySql數(shù)據(jù)庫,用戶名和密碼都是root   
    34.      String url = "jdbc:mysql://localhost:3306/test" ;    
    35.      String username = "root" ;   
    36.      String password = "root" ;   
    37.      try{   
    38.     Connection con =    
    39.              DriverManager.getConnection(url , username , password ) ;   
    40.      }catch(SQLException se){   
    41.     System.out.println("數(shù)據(jù)庫連接失敗!");   
    42.     se.printStackTrace() ;   
    43.      }   
    44.  4、創(chuàng)建一個(gè)Statement   
    45.     •要執(zhí)行SQL語句,必須獲得java.sql.Statement實(shí)例,Statement實(shí)例分為以下3  
    46.      種類型:   
    47.       1、執(zhí)行靜態(tài)SQL語句。通常通過Statement實(shí)例實(shí)現(xiàn)。   
    48.       2、執(zhí)行動(dòng)態(tài)SQL語句。通常通過PreparedStatement實(shí)例實(shí)現(xiàn)。   
    49.       3、執(zhí)行數(shù)據(jù)庫存儲(chǔ)過程。通常通過CallableStatement實(shí)例實(shí)現(xiàn)。   
    50.     具體的實(shí)現(xiàn)方式:   
    51.         Statement stmt = con.createStatement() ;   
    52.        PreparedStatement pstmt = con.prepareStatement(sql) ;   
    53.        CallableStatement cstmt =    
    54.                             con.prepareCall("{CALL demoSp(? , ?)}") ;   
    55.  5、執(zhí)行SQL語句   
    56.     Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery 、executeUpdate   
    57.    和execute   
    58.     1、ResultSet executeQuery(String sqlString):執(zhí)行查詢數(shù)據(jù)庫的SQL語句   
    59.         ,返回一個(gè)結(jié)果集(ResultSet)對(duì)象。   
    60.      2int executeUpdate(String sqlString):用于執(zhí)行INSERT、UPDATE或   
    61.         DELETE語句以及SQL DDL語句,如:CREATE TABLE和DROP TABLE等   
    62.      3、execute(sqlString):用于執(zhí)行返回多個(gè)結(jié)果集、多個(gè)更新計(jì)數(shù)或二者組合的   
    63.         語句。   
    64.    具體實(shí)現(xiàn)的代碼:   
    65.           ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
    66.     int rows = stmt.executeUpdate("INSERT INTO ...") ;   
    67.     boolean flag = stmt.execute(String sql) ;   
    68.  6、處理結(jié)果   
    69.     兩種情況:   
    70.      1、執(zhí)行更新返回的是本次操作影響到的記錄數(shù)。   
    71.      2、執(zhí)行查詢返回的結(jié)果是一個(gè)ResultSet對(duì)象。   
    72.     • ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法提供了對(duì)這些   
    73.       行中數(shù)據(jù)的訪問。   
    74.     • 使用結(jié)果集(ResultSet)對(duì)象的訪問方法獲取數(shù)據(jù):   
    75.      while(rs.next()){   
    76.          String name = rs.getString("name") ;   
    77.     String pass = rs.getString(1) ; // 此方法比較高效   
    78.      }   
    79.     (列是從左到右編號(hào)的,并且從列1開始)   
    80.  7、關(guān)閉JDBC對(duì)象    
    81.      操作完成以后要把所有使用的JDBC對(duì)象全都關(guān)閉,以釋放JDBC資源,關(guān)閉順序和聲   
    82.      明順序相反:   
    83.      1、關(guān)閉記錄集   
    84.      2、關(guān)閉聲明   
    85.      3、關(guān)閉連接對(duì)象   
    86.           if(rs != null){   // 關(guān)閉記錄集   
    87.         try{   
    88.             rs.close() ;   
    89.         }catch(SQLException e){   
    90.             e.printStackTrace() ;   
    91.         }   
    92.           }   
    93.           if(stmt != null){   // 關(guān)閉聲明   
    94.         try{   
    95.             stmt.close() ;   
    96.         }catch(SQLException e){   
    97.             e.printStackTrace() ;   
    98.         }   
    99.           }   
    100.           if(conn != null){  // 關(guān)閉連接對(duì)象   
    101.          try{   
    102.             conn.close() ;   
    103.          }catch(SQLException e){   
    104.             e.printStackTrace() ;   
    105.          }   
    106.           }  
    posted on 2013-03-06 21:03 Alter 閱讀(134) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 操美女视频免费网站| 亚洲AV无码成H人在线观看| 日韩亚洲产在线观看| 免费人妻av无码专区| 午夜免费福利视频| 亚洲日韩AV一区二区三区中文 | 久久亚洲精品无码VA大香大香| 毛片基地免费视频a| 国产又黄又爽胸又大免费视频 | 亚洲图片中文字幕| 国产一区二区视频免费| 国产精品免费观看调教网| 亚洲中文字幕久久无码| 亚洲国产精品无码久久久秋霞2| 免费人成在线视频| 在线观看黄片免费入口不卡| 亚洲av无码久久忘忧草| 亚洲色无码专区在线观看| 成人在线视频免费| 日本免费人成网ww555在线| 亚洲字幕AV一区二区三区四区 | 一级毛片在播放免费| 亚洲国产亚洲片在线观看播放| 亚洲国产成人VA在线观看| av无码国产在线看免费网站| 免费无码作爱视频| 老司机亚洲精品影院在线观看| 亚洲天堂中文资源| 亚洲一级特黄无码片| 波多野结衣久久高清免费 | 人人狠狠综合久久亚洲高清| 999国内精品永久免费观看| 久久一区二区三区免费| 亚洲av无码专区亚洲av不卡| 亚洲欧洲日韩国产| 亚洲av成人无码久久精品| 亚洲精品国产精品乱码不卡| 青青草国产免费久久久下载| 黄色成人免费网站| 无码人妻久久一区二区三区免费| 一级毛片试看60分钟免费播放|