posts - 13,  comments - 8,  trackbacks - 0
          JSP中SQL數據庫編程技術
          一,SQL復習
           1,SQL語句分為兩類:DDL(Data Definition Language)和DML(Dat Manipulation Languge,數據操作語言)。前者主要是定義數據邏輯結構,包括定義表、視圖和索引;DML主要是對數據庫進行查詢和更新操作。
           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等等都是用來定義列數據類型的保留字,其中varchar表示可變字符類型。
           3,Select <col1>,<col2>,...,<coln>
            From <tab1>,<tab2>,...,<tabm>
            [Where<條件>]
            
            條件中的子查詢:
             Where Not Exists(
              Select * From tab2 Where col1=col2
             )//當查詢結果為空時,條件為真。
             
           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類用于處理驅動程序的調入并且對新的數據庫連接提供支持。
           java.sql.Connection,指應用程序與特定數據庫的連接。
           java.sql.Statement,用于一般sql語句的執行(可以是查詢、更新甚至可以創建數據庫的執行過程)
           java.sql.ResultSet,查詢所返回的結果保存在此對象中,用它可以瀏覽和存取數據庫內的記錄。
           
           1,通過jdbc-odbc橋使用odbc數據庫(并不需要jdbc Drivers)
           
            先在odbc DSN(Data Source Name)設置處設置pubs sysDSN,sa為username,密碼為空
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載驅動程序
            con=DriverManager.getConnection("jdbc:odbc:pubs","sa","");//jdbc:odbc:pubs   
            con.close();
            //應當catch ClassNotFoundException和SQLException
           
            Connection的getWarning方法返回一個SQLWarning對象,在連接之前應當先檢查。
              使用jdbc-odbc的最大好處是:免費的。但是性能受odbc的限制,而且一般odbc驅動比較昂貴。
           2,使用專門的jdbc驅動程序。//此處是mm jdbc Driver
            先將jar文件放在ClassPath里面。
            Class.forName("org.gjt.mm.mysql.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","");
            con.close();
            
            可見使用何種方式連接何種數據庫與數據庫的操作和連接數據庫是無關的。
          三,查詢數據庫
           Statement stmt=con.createStatement();
           stmt.setMaxRows()可以控制輸出記錄最大數量;
           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驅動程序觸發的
           SQLException是jdbc在執行過程中發生問題時產生。有一個額外的方法getNextException()
            catch(SQLException e){
             out.println(e.getMessage());
             while(e=e.getNextException()){
              out.println(e.getMessage());
             }
            }
             
           一般來說并不建議在jsp中編寫數據庫的訪問程序,可以將數據庫的訪問封裝在一個javabean中。
          四,ResultSet深入
           1,ResultSetMetaData
            ResultSet rs=stmt.executeQuery("select....");
            ResultSetMetaData rsmd=rs.getMetaData(); //獲取ResultSetMateData對象
            int numberOfColumns=rsmd.getColumnCount();//返回列數
            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,存取大字符串和二進制文本
            對于數據庫中longvarchar和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")));//長二進制文本
            //取數據必須在rs.getAsciiStream(), rs.getUnicodeStream(), rs.getBinaryStream()等之后馬上進行
          posted on 2005-10-16 16:26 YangRj 閱讀(536) 評論(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

          好網址

          文學網站

          累了 聽聽歌曲吧

          論壇

          積分與排名

          • 積分 - 25775
          • 排名 - 1514

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 买车| 永靖县| 兰坪| 江永县| 南乐县| 蓝山县| 吉林省| 鄯善县| 于都县| 秀山| 寻乌县| 丹江口市| 湾仔区| 盐池县| 涿鹿县| 特克斯县| 红桥区| 库尔勒市| 玛多县| 刚察县| 平南县| 十堰市| 奉贤区| 松桃| 咸丰县| 高淳县| 犍为县| 嘉善县| 金川县| 建宁县| 盈江县| 湄潭县| 石狮市| 永宁县| 美姑县| 昌平区| 安溪县| 横峰县| 乐陵市| 开阳县| 贵阳市|