<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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品国产日韩无码AV永久免费网| 亚洲免费在线视频播放| 亚洲av网址在线观看| 国产92成人精品视频免费| 亚洲爆乳无码专区www| 亚洲人成网77777亚洲色| 波多野结衣免费在线观看| 男女猛烈激情xx00免费视频| 99久久亚洲综合精品成人网| 免费一看一级毛片人| 久久ww精品w免费人成| 特色特黄a毛片高清免费观看| 亚洲视频免费在线观看| 免费一看一级毛片全播放| 在线永久看片免费的视频| 一级毛片a女人刺激视频免费| 亚洲国产成人超福利久久精品| 亚洲人成网站18禁止一区| 一二三四视频在线观看中文版免费| 成人福利在线观看免费视频| 亚洲一级毛片在线观| 亚洲精品成人无限看| 国产伦一区二区三区免费| 18禁成人网站免费观看| 精品免费久久久久国产一区| 亚洲永久网址在线观看| 亚洲国产综合精品中文第一区 | 国产精品国产免费无码专区不卡| 最好免费观看高清在线| 黄色免费网址大全| 最新国产成人亚洲精品影院| 亚洲AV无码一区二区乱孑伦AS| 免费中文字幕在线观看| 成人毛片免费播放| 18未年禁止免费观看| 亚洲a一级免费视频| 91成人免费福利网站在线| 人妖系列免费网站观看| 爱爱帝国亚洲一区二区三区| 中文无码亚洲精品字幕| 亚洲欧洲精品国产区|