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

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

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

    BlogJava 聯(lián)系 聚合 管理  

    Blog Stats

    隨筆檔案

    exams


    java世界

    世界Java

    已動態(tài)創(chuàng)建表為例

    (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;
                                 // 創(chuàng)建表語句中的表名變量
            String columnName;
                                 // 列名變量
            String sqlType;
                                 // 數(shù)據(jù)類型變量
                                 // 以上三個變量都是為了創(chuàng)建建表語句服務(wù)的
           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"),
            };
            //創(chuàng)建一個數(shù)組用用jdbc SQl數(shù)據(jù)類型的代碼和名字初始化,其它為null
            //注意,以上出現(xiàn)的名字全部都是Types類中出現(xiàn)的
                   DatabaseMetaData dbmd = con.getMetaData();
            //創(chuàng)建DatabaseMetaData對象,用來獲取數(shù)據(jù)庫的屬性
            ResultSet rs = dbmd.getTypeInfo();
            //獲取數(shù)據(jù)庫支持的SQL數(shù)據(jù)類型
            while (rs.next()){
             int codeNumber = rs.getInt("DATA_TYPE");
             String dbmsName = rs.getString("TYPE_NAME");
             String createParams = rs.getString("CREATE_PARAMS");
            // 以下是本地數(shù)據(jù)庫支持的數(shù)據(jù)類型在jdbc中的映射號,本地名,參數(shù)
            //System.out.println(codeNumber+" "+dbmsName+" "+createParams);
            for (int i = 0; i < typeArray.length; i++) {
              if (typeArray[i].getCode() == codeNumber) {
              // 如果typeArray中的元素代碼等于本地數(shù)據(jù)庫類型的代碼,
              // 就可以把typeArray中的類型名設(shè)成從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());
             }
              // 設(shè)定數(shù)組中的數(shù)據(jù)庫中的類型名和參數(shù),打印出所有匹配的
             }
              // 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 = "輸入列名 " +"或不輸入任何數(shù)據(jù)然后回車: ";
             columnName = getInput(columnNamePrompt);
             if (firstTime) {
              if (columnName.length() == 0) {
               System.out.print("至少需要一列;");
               System.out.println(" 請重試");
               continue;
              } else {
               createTableString += columnName + " ";
               // 繼續(xù)形成創(chuàng)建表的字符串
               firstTime = false;
              }
             } else if (columnName.length() == 0) {
               break;
               // 不輸入列時那么創(chuàng)建語句的過程結(jié)束
             } else {
              createTableString += commaAndSpace
               + columnName + " ";
             }
             // 在成功接收到列名后,以下顯示可用的類型名
             System.out.println("");
             System.out.println("可用的類型名為:  ");
             for (int i = 0; i < typeArray.length; i++) {
              if (! typeArray[i].needsToBeSet()) {
              // 如果設(shè)置了本地數(shù)據(jù)庫中的名和參數(shù),說明這個jdbc類型可以用
               System.out.println(typeArray[i].getSQLType());
              // 返回jdbc中對應(yīng)的SQL類型名
              } 
             }
             System.out.println("");
          int index;
             while (true) {//循環(huán)直到輸入可用的類型
              String typePrompt = "從列表中輸入列的類型 " +
                "并回車";
              sqlType = getInput(typePrompt);
              for (index = 0; index < typeArray.length; index++) {
               if (typeArray[index].getSQLType().
                equalsIgnoreCase(sqlType)){
               // 比較兩個字符串是否相等,不區(qū)分大小寫
               // 如果有相等的說明輸入的類型是jdbc允許的類型,就跳出
                break;
               }
              }
              if (index < typeArray.length) {
               // 如果index小于typeArray數(shù)組的個數(shù),說明有匹配的
               break;
               // 跳出while(true)循環(huán)
              }
              System.out.println("");
              System.out.print(sqlType + " 與允許的類型不匹配");
             
              System.out.println("");
             }
             String params;
             String localTypeName;
             params = typeArray[index].getParams();
               // 獲取類型的參數(shù),此時的index是輸入的類型在數(shù)組中的索引
             localTypeName = typeArray[index].getLocalType();
               // 獲取數(shù)據(jù)庫中這種類型名
             String paramString;
                 String parameterPrompt = "輸入 " + params + ":  ";
              paramString = "(" + getInput(parameterPrompt) + ")";
             createTableString += localTypeName + paramString;
               // 注意,形成創(chuàng)建表字符串的是用本地類型名,不是用jdbc中的類型名
               // 前面輸入的時候用的是jdbc中的名字
            }
               // 創(chuàng)建語句輸入部分結(jié)束
            createTableString += ")";
            System.out.println("");
            System.out.print("你輸入的創(chuàng)建表的語句是:");
           
            System.out.println(createTableString);
            System.out.println("");
               stmt.execute(createTableString);
               // 執(zhí)行創(chuàng)建表的語句
              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;
        //創(chuàng)建從字符輸入流中讀取文本的對象
             bin = new java.io.BufferedReader(
        //字符流為參數(shù)
              new java.io.InputStreamReader(System.in));
        //字節(jié)流為參數(shù),轉(zhuǎn)化成字符流
                 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 閱讀(1290) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲精品高清在线| 国产片AV片永久免费观看 | 免费在线视频你懂的| 亚洲国产成人久久综合一| 国产免费阿v精品视频网址| 国产精品亚洲片在线| a级片免费观看视频| 亚洲AV无码成人精品区天堂| 爱丫爱丫影院在线观看免费| 亚洲av无码片在线播放| 无码国产精品一区二区免费16| 亚洲综合自拍成人| 免费观看激色视频网站(性色) | 免费国产成人高清视频网站| 特级毛片免费观看视频| 国产福利电影一区二区三区,亚洲国模精品一区 | A片在线免费观看| 亚洲色图黄色小说| 性做久久久久久免费观看| 亚洲国产区男人本色| 亚洲国产成人久久一区WWW| a视频免费在线观看| 亚洲国产人成在线观看| 日韩成人免费aa在线看| 国产黄在线观看免费观看不卡| 亚洲国产精品线在线观看| 我们的2018在线观看免费高清 | 亚洲中文字幕久久精品无码VA| 免费看国产一级特黄aa大片| 国产一级高青免费| 亚洲国产精品综合久久2007| 国产免费小视频在线观看| 爱丫爱丫影院在线观看免费| 亚洲自偷自偷在线成人网站传媒| 亚洲国产成人精品女人久久久| 精品熟女少妇a∨免费久久| 亚洲av无码专区在线观看下载 | 51精品视频免费国产专区| 亚洲AV无码专区在线观看成人| 亚洲福利在线视频| 国产一级淫片免费播放电影|