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

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

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

    posts - 13,  comments - 8,  trackbacks - 0
    JSP中SQL數(shù)據(jù)庫編程技術(shù)
    一,SQL復習
     1,SQL語句分為兩類:DDL(Data Definition Language)和DML(Dat Manipulation Languge,數(shù)據(jù)操作語言)。前者主要是定義數(shù)據(jù)邏輯結(jié)構(gòu),包括定義表、視圖和索引;DML主要是對數(shù)據(jù)庫進行查詢和更新操作。
     2,Create Table(DDL):
      Create Table tabName(
       colName1 colType1 [else],
       colName2 colType2 [else],
       ...,
       colNamen colTypen [else]
      );
      例如:Cteate Table pJoiner(
       pno char(6) not null,
       eno char(6) nut null
       );
      char int varchar等等都是用來定義列數(shù)據(jù)類型的保留字,其中varchar表示可變字符類型。
     3,Select <col1>,<col2>,...,<coln>
      From <tab1>,<tab2>,...,<tabm>
      [Where<條件>]
      
      條件中的子查詢:
       Where Not Exists(
        Select * From tab2 Where col1=col2
       )//當查詢結(jié)果為空時,條件為真。
       
     4,INSERT INTO <tab1> VALUES(<col1>, ...<coln>)
     5,DELETE FROM <tab1> [WHERE<條件>]
     6,UPDATE <tab1>
      SET <tab1>=<vlu1>
      ...
      <tabn>=<vlun>
      [WHERE<條件>]
      例如:
       Update exployee
       Set age=27
       Where name='趙一'
    二,JDBC 主要接口:
     java.sql.DriverManager類用于處理驅(qū)動程序的調(diào)入并且對新的數(shù)據(jù)庫連接提供支持。
     java.sql.Connection,指應用程序與特定數(shù)據(jù)庫的連接。
     java.sql.Statement,用于一般sql語句的執(zhí)行(可以是查詢、更新甚至可以創(chuàng)建數(shù)據(jù)庫的執(zhí)行過程)
     java.sql.ResultSet,查詢所返回的結(jié)果保存在此對象中,用它可以瀏覽和存取數(shù)據(jù)庫內(nèi)的記錄。
     
     1,通過jdbc-odbc橋使用odbc數(shù)據(jù)庫(并不需要jdbc Drivers)
     
      先在odbc DSN(Data Source Name)設置處設置pubs sysDSN,sa為username,密碼為空
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載驅(qū)動程序
      con=DriverManager.getConnection("jdbc:odbc:pubs","sa","");//jdbc:odbc:pubs   
      con.close();
      //應當catch ClassNotFoundException和SQLException
     
      Connection的getWarning方法返回一個SQLWarning對象,在連接之前應當先檢查。
        使用jdbc-odbc的最大好處是:免費的。但是性能受odbc的限制,而且一般odbc驅(qū)動比較昂貴。
     2,使用專門的jdbc驅(qū)動程序。//此處是mm jdbc Driver
      先將jar文件放在ClassPath里面。
      Class.forName("org.gjt.mm.mysql.Driver");
      con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","");
      con.close();
      
      可見使用何種方式連接何種數(shù)據(jù)庫與數(shù)據(jù)庫的操作和連接數(shù)據(jù)庫是無關(guān)的。
    三,查詢數(shù)據(jù)庫
     Statement stmt=con.createStatement();
     stmt.setMaxRows()可以控制輸出記錄最大數(shù)量;
     ResultSet rs=stmt.executeQuery("select .....");
     
     ResultSet指向當前記錄:
      int userId=rs.getInt("userid");
      String userName=rs.getString("username");
      ...或者用序號(從1開始的)
      int userId=rs.getInt(1);
      Stirng userName=rs.getString(2);
     
     ClassNotFoundException是由于Class.forName()無法載入jdbc驅(qū)動程序觸發(fā)的
     SQLException是jdbc在執(zhí)行過程中發(fā)生問題時產(chǎn)生。有一個額外的方法getNextException()
      catch(SQLException e){
       out.println(e.getMessage());
       while(e=e.getNextException()){
        out.println(e.getMessage());
       }
      }
       
     一般來說并不建議在jsp中編寫數(shù)據(jù)庫的訪問程序,可以將數(shù)據(jù)庫的訪問封裝在一個javabean中。
    四,ResultSet深入
     1,ResultSetMetaData
      ResultSet rs=stmt.executeQuery("select....");
      ResultSetMetaData rsmd=rs.getMetaData(); //獲取ResultSetMateData對象
      int numberOfColumns=rsmd.getColumnCount();//返回列數(shù)
      boolean b=rsmd.isSearchable(int i);//返回第i列是否可以用于where子句
      String c=rsmd.getColumnLabel(int i);//獲取第i列的列標
      Objcet obj=rs.getObject();
      if(obj!=null)out.println(obj.toString());
      else println("");
     2,SQL類型與ResultSet的getObject返回類型及對應的XXX getXXX()方法
      SQL類型  JSP類型   對應的getXXX()方法
      ????????????????????????????????????????????
      CHAR                         String                                            String getString()
      VARCHAR                 String                                            String getString()
      LONGVARCHAR      String                                            InputStream getAsciiStream()/getUnicodeStream()
      NUMERIC                  java.math.BigDecimal              java.math.BigDecimal getBigDecimal()
      DECIMAL                   同上
      BIT                              Boolean                                       boolean getBoolean()
      TINYINT                     Integer                                          byte getByte()
      SMALLINT                 Integer                                          short getShort()
      INTEGER                  Integer                                          int getInt()
      BIGINT                       Long                                             long getLong()
      REAL                         Float                                              float getFloat()
      FLOAT                       Double                                          double getDouble()
      DOUBLE                   Double                                          double getDouble()
      BINARY                     byte[]                                              byte[] getBytes()
      VARBINARY              byte[]                                              byte[] getBytes()
      LONGVARBINARY   byte[]                                              InputStream getBinaryStream()
      DATE                          java.sql.Date                               java.sql.Date getDate()
      TIME                           java.sql.Time                               java.sql.Time getTime()
      TIMESTAMP              java.sql.Timestamp                   java.sql.Timestamp getTimestamp()
      
     3,null 
      int i=rs.getInt("age");
      if(!rs.wasNull())....//RecordSet::wasNull()用來檢查null
     4,存取大字符串和二進制文本
      對于數(shù)據(jù)庫中l(wèi)ongvarchar和langvarbinary進行流操作
      ResultSet rs=stmt.executeQueryString("select ...");
      BufferedReader br=new BufferedReader(new InputStream(rs.getAsciiStream("vol1")));//長文本串
      BufferedReader br=new BufferedReader(new InputStream(rs.getUnicodeStream("vol1")));
      BufferedReader br=new BufferedReader(new InputStream(rs.getBinaryStream("vol2")));//長二進制文本
      //取數(shù)據(jù)必須在rs.getAsciiStream(), rs.getUnicodeStream(), rs.getBinaryStream()等之后馬上進行
    posted on 2005-10-16 16:26 YangRj 閱讀(532) 評論(0)  編輯  收藏 所屬分類: J2EE
    <2005年10月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(2)

    隨筆分類(5)

    隨筆檔案(13)

    文章分類(14)

    文章檔案(34)

    Apache - Tech Online

    BLOG 收集

    BLOG地址

    DB2

    Eclipse

    IBM - Tech Online

    JAVA

    ORACLE

    OS

    好網(wǎng)址

    文學網(wǎng)站

    累了 聽聽歌曲吧

    論壇

    積分與排名

    • 積分 - 25610
    • 排名 - 1515

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 337P日本欧洲亚洲大胆精品| 成人黄色免费网址| 日韩精品免费电影| 亚洲H在线播放在线观看H| 1000部拍拍拍18勿入免费视频下载 | 亚洲国产aⅴ成人精品无吗| 亚洲AⅤ男人的天堂在线观看| 国产成人自产拍免费视频| 亚洲第一网站男人都懂| 亚洲黄色中文字幕| 亚洲免费电影网站| 亚洲一区二区三区播放在线| 九九九精品成人免费视频| 亚洲精品无码成人片久久不卡| 免费看男人j放进女人j免费看| 国产精品免费视频一区| 美女又黄又免费的视频| 蜜桃AV无码免费看永久| 亚洲国产精品综合久久20| 妞干网免费视频在线观看| 亚洲日本一线产区和二线产区对比| 日韩免费的视频在线观看香蕉| 国产小视频在线免费| 一个人看www免费高清字幕| 国产亚洲精品资源在线26u| 57pao国产成视频免费播放| 亚洲免费人成视频观看| 拔擦拔擦8x华人免费久久| 亚洲国产日韩女人aaaaaa毛片在线 | 精品香蕉在线观看免费| 亚洲欧好州第一的日产suv| 亚洲精品无码99在线观看| 免费av一区二区三区| 在线观看亚洲成人| 亚洲一区在线免费观看| 亚洲AV日韩AV一区二区三曲| 毛片A级毛片免费播放| 免费看一级高潮毛片| 免费国产人做人视频在线观看| 亚洲人成77777在线播放网站不卡| 免费A级毛片av无码|