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

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

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

    BlogJava 聯系 聚合 管理  

    Blog Stats

    隨筆檔案

    exams


    java世界

    世界Java

    已動態創建表為例

    (1)
        public class DataType {
          private int code;
          private String SQLType;
          private String localType = null;
          private String params = null;
          private boolean needsSetting = true;
          public DataType(int code, String SQLType) {
           this.code = code;
           this.SQLType = SQLType;
           }
           public boolean needsToBeSet() {
           return needsSetting;
          }
           public int getCode() {
           return code;
          }
           public String getSQLType() {
           return SQLType;
          }
           public String getLocalType() {
           return localType;
          }
           public String getParams() {
           return params;
          }
         public void setLocalTypeAndParams(String local, String p) {
           if (needsSetting) {
            localType = local;
            params = p;
            needsSetting = false;
           }
          }
         }

    (2)
       import java.sql.*;
       public class SQLTypesCreate {
          public static void main(String [ ] args) {
           String url="jdbc:oracle:thin:@localhost:1521:oral";
             String user="SYSTEM";
             String pass="manager";
           try {
            Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
           } catch(Exception e){System.out.println(e);}
           try {
            Connection con = DriverManager.getConnection(url, user,pass);
            Statement     stmt = con.createStatement();
            String tableName;
                                 // 創建表語句中的表名變量
            String columnName;
                                 // 列名變量
            String sqlType;
                                 // 數據類型變量
                                 // 以上三個變量都是為了創建建表語句服務的
           DataType [ ] typeArray = {
       new DataType(java.sql.Types.BIT, "BIT"),
       new DataType(java.sql.Types.TINYINT, "TINYINT"),
       new DataType(java.sql.Types.SMALLINT, "SMALLINT"),
       new DataType(java.sql.Types.INTEGER, "INTEGER"),
       new DataType(java.sql.Types.BIGINT, "BIGINT"),
       new DataType(java.sql.Types.FLOAT, "FLOAT"),
       new DataType(java.sql.Types.REAL, "REAL"),
       new DataType(java.sql.Types.DOUBLE, "DOUBLE"),
       new DataType(java.sql.Types.NUMERIC, "NUMERIC"),
       new DataType(java.sql.Types.DECIMAL, "DECIMAL"),
       new DataType(java.sql.Types.CHAR, "CHAR"),
       new DataType(java.sql.Types.VARCHAR, "VARCHAR"),
       new DataType(java.sql.Types.LONGVARCHAR, "LONGVARCHAR"),
       new DataType(java.sql.Types.DATE, "DATE"),
       new DataType(java.sql.Types.TIME, "TIME"),
       new DataType(java.sql.Types.TIMESTAMP, "TIMESTAMP"),
       new DataType(java.sql.Types.BINARY, "BINARY"),
       new DataType(java.sql.Types.VARBINARY, "VARBINARY"),
       new DataType(java.sql.Types.LONGVARBINARY, "LONGVARBINARY"),
       new DataType(java.sql.Types.NULL, "NULL"),
       new DataType(java.sql.Types.OTHER, "OTHER"),
            };
            //創建一個數組用用jdbc SQl數據類型的代碼和名字初始化,其它為null
            //注意,以上出現的名字全部都是Types類中出現的
                   DatabaseMetaData dbmd = con.getMetaData();
            //創建DatabaseMetaData對象,用來獲取數據庫的屬性
            ResultSet rs = dbmd.getTypeInfo();
            //獲取數據庫支持的SQL數據類型
            while (rs.next()){
             int codeNumber = rs.getInt("DATA_TYPE");
             String dbmsName = rs.getString("TYPE_NAME");
             String createParams = rs.getString("CREATE_PARAMS");
            // 以下是本地數據庫支持的數據類型在jdbc中的映射號,本地名,參數
            //System.out.println(codeNumber+" "+dbmsName+" "+createParams);
            for (int i = 0; i < typeArray.length; i++) {
              if (typeArray[i].getCode() == codeNumber) {
              // 如果typeArray中的元素代碼等于本地數據庫類型的代碼,
              // 就可以把typeArray中的類型名設成從DatabaseMetaData獲得的本地名
               typeArray[i].setLocalTypeAndParams(
                 dbmsName, createParams);
                 System.out.println("匹配的code,SQLType,localType,params有:");
                 System.out.println(typeArray[i].getCode()+" "+
                                typeArray[i].getSQLType()+" "+
                                typeArray[i].getLocalType()+" "+
                                typeArray[i].getParams());
             }
              // 設定數組中的數據庫中的類型名和參數,打印出所有匹配的
             }
              // end for
            }//end while
            String tableNamePrompt = "輸入表名 " +  "并回車 ";
            tableName = getInput(tableNamePrompt);
            String createTableString = "create table " + tableName + " (";
            String commaAndSpace = ", ";
            boolean firstTime = true;
            while (true){
                  System.out.println("");
                  String columnNamePrompt = "輸入列名 " +"或不輸入任何數據然后回車: ";
             columnName = getInput(columnNamePrompt);
             if (firstTime) {
              if (columnName.length() == 0) {
               System.out.print("至少需要一列;");
               System.out.println(" 請重試");
               continue;
              } else {
               createTableString += columnName + " ";
               // 繼續形成創建表的字符串
               firstTime = false;
              }
             } else if (columnName.length() == 0) {
               break;
               // 不輸入列時那么創建語句的過程結束
             } else {
              createTableString += commaAndSpace
               + columnName + " ";
             }
             // 在成功接收到列名后,以下顯示可用的類型名
             System.out.println("");
             System.out.println("可用的類型名為:  ");
             for (int i = 0; i < typeArray.length; i++) {
              if (! typeArray[i].needsToBeSet()) {
              // 如果設置了本地數據庫中的名和參數,說明這個jdbc類型可以用
               System.out.println(typeArray[i].getSQLType());
              // 返回jdbc中對應的SQL類型名
              } 
             }
             System.out.println("");
          int index;
             while (true) {//循環直到輸入可用的類型
              String typePrompt = "從列表中輸入列的類型 " +
                "并回車";
              sqlType = getInput(typePrompt);
              for (index = 0; index < typeArray.length; index++) {
               if (typeArray[index].getSQLType().
                equalsIgnoreCase(sqlType)){
               // 比較兩個字符串是否相等,不區分大小寫
               // 如果有相等的說明輸入的類型是jdbc允許的類型,就跳出
                break;
               }
              }
              if (index < typeArray.length) {
               // 如果index小于typeArray數組的個數,說明有匹配的
               break;
               // 跳出while(true)循環
              }
              System.out.println("");
              System.out.print(sqlType + " 與允許的類型不匹配");
             
              System.out.println("");
             }
             String params;
             String localTypeName;
             params = typeArray[index].getParams();
               // 獲取類型的參數,此時的index是輸入的類型在數組中的索引
             localTypeName = typeArray[index].getLocalType();
               // 獲取數據庫中這種類型名
             String paramString;
                 String parameterPrompt = "輸入 " + params + ":  ";
              paramString = "(" + getInput(parameterPrompt) + ")";
             createTableString += localTypeName + paramString;
               // 注意,形成創建表字符串的是用本地類型名,不是用jdbc中的類型名
               // 前面輸入的時候用的是jdbc中的名字
            }
               // 創建語句輸入部分結束
            createTableString += ")";
            System.out.println("");
            System.out.print("你輸入的創建表的語句是:");
           
            System.out.println(createTableString);
            System.out.println("");
               stmt.execute(createTableString);
               // 執行創建表的語句
              rs=dbmd.getColumns(null,"SYSTEM",tableName.toUpperCase(),"%");
              System.out.println("表的信息為:表名,列名,類型號,類型名");
              while(rs.next()) {
              System.out.print(rs.getString("TABLE_NAME")+" ");
              System.out.print(rs.getString("COLUMN_NAME")+" ");
              System.out.print(rs.getInt("DATA_TYPE")+" ");
              System.out.println(rs.getString("TYPE_NAME"));
              }
                rs.close();
            stmt.close();
            con.close();
           } catch(SQLException ex) {
            System.err.println("SQLException: " + ex.getMessage());
           } 
          }
          public static String getInput(String prompt) throws SQLException {
            System.out.print(prompt);
            System.out.flush();
        //清除所有字符
            try {
             java.io.BufferedReader bin;
        //創建從字符輸入流中讀取文本的對象
             bin = new java.io.BufferedReader(
        //字符流為參數
              new java.io.InputStreamReader(System.in));
        //字節流為參數,轉化成字符流
                 String result = bin.readLine();
            return result;
        //返回 HP0-X02 1Y0-327 字符串
           } catch(Exception e) {
            System.out.println(e);
            return "";
         }
          }
         }

    posted on 2007-11-05 16:50 java2java 閱讀(1288) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品熟女少妇a∨免费久久| 国产成人免费高清在线观看| 亚洲制服丝袜第一页| 日产国产精品亚洲系列| 久久成人a毛片免费观看网站| 亚洲高清有码中文字| 亚洲日韩中文字幕日韩在线| 无码日韩精品一区二区免费暖暖 | 亚洲精品亚洲人成在线观看麻豆 | 亚洲一级黄色视频| 免费国产作爱视频网站| 特级毛片爽www免费版| 亚洲人成影院77777| 91麻豆精品国产自产在线观看亚洲 | 亚洲男人天堂av| 又粗又大又硬又爽的免费视频| 久久免费精彩视频| 美女羞羞喷液视频免费| 91亚洲精品视频| 久久亚洲精品无码观看不卡| 一本无码人妻在中文字幕免费 | 精品国产污污免费网站| 大桥未久亚洲无av码在线| 亚洲综合视频在线观看| 国产成人精品久久亚洲高清不卡 | 在线看片v免费观看视频777| 中文字幕av无码不卡免费| 久久久久亚洲AV无码去区首| 久久亚洲国产精品成人AV秋霞 | 亚洲国产成人超福利久久精品 | 美美女高清毛片视频黄的一免费 | 久久久久亚洲AV无码专区体验| 免费人成年轻人电影| 成人免费看吃奶视频网站| 麻豆高清免费国产一区| 99久久国产精品免费一区二区| 日本免费精品一区二区三区| 亚洲综合偷自成人网第页色| 久久精品a亚洲国产v高清不卡| 国内精品久久久久久久亚洲| 亚洲福利视频一区二区|