輔助的寫與數據庫交互的XML文件的類

現在企業級WEB應用中與數據庫交互的XML文件都是通過插件自動生成的,不過有些時候修改比較老的項目的時候也是需要手動的來做這一動作的!如下代碼就是一個實現上述的功能的輔助類,在此記錄一下以備后用!

package com.cn.common.utils;import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import oracle.jdbc.OracleConnection;/*** 這個類主要用于手動的輔助寫與數據庫交互的XML文件,打印一些固定格式的信息,用于寫增刪改查的數據庫SQL語句* @author Administrator**/
public class MetaDataTest {/*** 主方法,獲得表的結構信息* @param args*/public static void main(String[] args){try {Class.forName("oracle.jdbc.driver.OracleDriver");String url = "THE URL";String username="THE USERNAME";String password="THE PASSWORD";try {Properties props =new Properties();props.put("remarksReporting","true");/** 獲得數據庫連接,通過URL/USERNAME/PASSWORD,注意,要確定數據的服務是開啟的*/Connection conn = DriverManager.getConnection(url,username,password);/** 設置連接屬性,使得可獲取到列的REMARK(備注)*/((OracleConnection)conn).setRemarksReporting(true); DatabaseMetaData dmd = conn.getMetaData();System.out.println("=============================================The database infor======================================================");                // 數據庫名:System.out.println("數據庫名稱:" + dmd.getDatabaseProductName());// 數據庫版本號:System.out.println("數據庫版本號  :"+ dmd.getDatabaseProductVersion());// 驅動程序System.out.println("數據庫驅動程序 :" + dmd.getDriverName());// 驅動版本System.out.println("數據庫驅動版本:" + dmd.getDriverVersion());
System.out.println("=============================================The users infor=========================================================");                //打印當前數據庫的所有用戶名稱
                getAllSchemas(dmd);
System.out.println("=============================================The tables infor========================================================");                                //打印當前數據庫用戶下的所有表信息getAllTableList(dmd,"THE SCHEMA");
System.out.println("=============================================The table infor=========================================================");                                //打印當前用戶當前表結構信息getTableColumns(dmd,"THE SCHEMA","THE TABLE");} catch (SQLException e) {e.printStackTrace();}} catch (ClassNotFoundException e) {e.printStackTrace();}}/** * 獲得表或視圖中的列信息*/  public static void getTableColumns(DatabaseMetaData dbMetaData,String schemaName, String tableName){  try{        ResultSet rs = dbMetaData.getColumns(null, schemaName, tableName, "%");              while (rs.next()){  String tableCat = rs.getString("TABLE_CAT");//表目錄(可能為空)              String tableSchemaName = rs.getString("TABLE_SCHEM");//表的架構(可能為空)     String tableName_ = rs.getString("TABLE_NAME");//表名  String columnName = rs.getString("COLUMN_NAME");//列名  int dataType = rs.getInt("DATA_TYPE"); //對應的java.sql.Types類型     String dataTypeName = rs.getString("TYPE_NAME");//java.sql.Types類型名稱  int columnSize = rs.getInt("COLUMN_SIZE");//列大小int decimalDigits = rs.getInt("DECIMAL_DIGITS");//小數位數  int numPrecRadix = rs.getInt("NUM_PREC_RADIX");//基數(通常是10進制的) int nullAble = rs.getInt("NULLABLE");//是否允許為null  String remarks = rs.getString("REMARKS");//列描述String columnDef = rs.getString("COLUMN_DEF");//默認int sqlDataType = rs.getInt("SQL_DATA_TYPE");//sql數據類型  int sqlDatetimeSub = rs.getInt("SQL_DATETIME_SUB");   //SQL日期時間 int charOctetLength = rs.getInt("CHAR_OCTET_LENGTH");   //char類型的列中的字節長度int ordinalPosition = rs.getInt("ORDINAL_POSITION");  //表中列的索引(從1開始)String propName = colNameToPropName(columnName);
System.out.println("=============================================The bean property infor=================================================");                                                    System.out.println("private String " + propName+";");
System.out.println("=============================================The column map infor====================================================");                    System.out.println("<result column=\""+columnName+"\" property=\""+propName+"\" jdbcType=\"NVARCHAR\" />");
System.out.println("=============================================The input property infor==================================================");System.out.println("#"+propName+"#,");
System.out.println("=============================================The map property  infor===============================================");System.out.println(columnName+"=#"+propName+"#,");
System.out.println("=============================================The bean property remarks infor=========================================");System.out.println("<tbl:th width=\"80\" delim=\"true\" field=\""+propName+"\">"+remarks+"</tbl:th>");
System.out.println("=============================================The property map infor==================================================");System.out.println("<tbl:td delim=\"true\">${element."+propName+"}</tbl:td>");/** * ISO規則用來確定某一列的為空性 * YES--如果該參數可以包括空值* NO--如果參數不能包含空值* 空字符串---如果參數為空性是未知的*/  String isNullAble = rs.getString("IS_NULLABLE");  /** * 指示此列是否是自動增長的* 1--如果該列是自動的* 2--如果不是自動遞增的* 空字符串--如果不能確定它是否是自動增長的* 列是自動遞增的參數是未知的*/  
//                    String isAutoincrement = rs.getString("IS_AUTOINCREMENT");     
System.out.println("=============================================The column map infor=====================================================");                      System.out.println(tableCat + "-" + tableSchemaName + "-" + tableName_ + "-" + columnName + "-"    + dataType + "-" + dataTypeName + "-" + columnSize + "-" + decimalDigits + "-" + numPrecRadix     + "-" + nullAble + "-" + remarks + "-" + columnDef + "-" + sqlDataType + "-" + sqlDatetimeSub     + charOctetLength + "-" + ordinalPosition + "-" + isNullAble + "-" +"");     }     } catch (SQLException e){  e.printStackTrace();     }  }  /**   * 獲得數據庫中所有用戶名稱   * @param dbMetaData */    public static void getAllSchemas(DatabaseMetaData dbMetaData){  try{  ResultSet rs = dbMetaData.getSchemas();   while (rs.next()){     String tableSchem = rs.getString("TABLE_SCHEM");     System.out.println(tableSchem);     }     } catch (SQLException e){  e.printStackTrace();     }     }     /** * 獲得指定用戶下面的表信息數據*/  public static void getAllTableList(DatabaseMetaData dbMetaData,String schemaName) {  try {  /** table type. Typical types are "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM".  */String[] types = { "TABLE" };  ResultSet rs = dbMetaData.getTables(null, schemaName, "%", types);  while (rs.next()) {  String tableName = rs.getString("TABLE_NAME");  //表名稱 String tableType = rs.getString("TABLE_TYPE");  //表類型String remarks = rs.getString("REMARKS");       //表備注System.out.println(tableName + "-" + tableType + "-" + remarks);  }  } catch (SQLException e) {  e.printStackTrace();  }  }/*** 將數據庫表中的列名轉換成JavaBean的屬性名稱,轉換規則是采用駝峰式的命名規則* @param columnName* @return*/private static String colNameToPropName(String columnName){String result="";String name = columnName.toLowerCase();String[] data = name.split("_");for(int i=0;i<data.length;i++){if(i==0){result  = data[i];}else{result  += data[i].replaceFirst(data[i].substring(0, 1), data[i].substring(0, 1).toUpperCase());}}return result;}
}

說明

1:此小程序可直接使用,只要拿到對應的項目中或者新建一個小項目就可以啦,當然需要引入ORACLE的JAR包

2:根據自己的需要連接對應的數據庫,并且需要指明那個用戶下的那一張表,程序中紅色字體部分已經明確指明啦!

3:打印對應的信息的時候,可自行選擇打印的部分(建議,循環部分的信息,一類一類的打印這樣更好處理)

轉載于:https://www.cnblogs.com/godtrue/p/4110858.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

160 - 8 Andrnalin.1

環境&#xff1a; Windows xp sp3 打開&#xff0c;就一個Key輸入框&#xff0c;輸入&#xff1a;goodname&#xff0c;點OK&#xff0c;彈出一個 不明文字的框&#xff0c;反正肯定不對。 查殼&#xff0c;無殼的vb程序。OD載入&#xff1a; 查找字串&#xff0c;翻到最下…

C++ 虛函數表解析

C 虛函數表解析 陳皓 http://blog.csdn.net/haoel 前言 C中的虛函數的作用主要是實現了多態的機制。關于多態&#xff0c;簡而言之就是用父類型別的指針指向其子類的實例&#xff0c;然后通過父類的指針調用實際子類的成員函數。這種技術可以讓父類的指針有“多種形態”&#x…

160 - 9 Andrnalin.2

環境&#xff1a; Windows xp sp3 打開&#xff0c;這次升級了&#xff0c;有個Name和一個Key&#xff0c;輸入&#xff1a; Name&#xff1a;goodname Key&#xff1a;12345678 肯定錯誤。拿到錯誤信息的字符串 查殼&#xff0c;無殼的VB程序。 直接OD載入&#xff0c;字…

[PALAPALA] 無題 - 外來的和尚會念經

手機, 現代人響當當的必須品, 尤其在移動App流行的大環境之下顯得更為重要. 我, 并不是一個重度依賴手機的機粉. 但我對手機的差異化敏感度很高... 安卓手機, 我不喜歡, 因為滿大街泛濫&#xff0c;折騰過多... 蘋果手機, 我不喜歡, 因為滿大街泛濫&#xff0c;bug過多..... 相…

HTTP協議 (四) 緩存

HTTP協議 (四) 緩存 閱讀目錄 緩存的概念緩存的好處Fiddler可以方便地查看緩存的header如何判斷緩存新鮮度通過最后修改時間&#xff0c;判斷緩存新鮮度與緩存相關的headerETag瀏覽器不使用緩存直接使用緩存&#xff0c;不去服務器端驗證如何設置IE不使用緩存公有緩存和私有緩存…

160 - 10 Andrénalin.3

環境&#xff1a; Windows xp sp3 打開&#xff0c;是只有一個key&#xff0c;輸入個goodname試試&#xff0c;錯誤。。。記下錯誤信息 查殼&#xff0c;無殼的VB程序。 查找字符串&#xff1a; 00402036 UNICODE "kXy^rO|*yXo*m\kMuOn*" 00402090 UNICODE &qu…

160 - 11 Andrnalin.4

環境&#xff1a; Windows xp sp3 打開&#xff0c;這次的界面炫酷多了&#xff0c;就像輸保險箱密碼。 旁邊一個“UNREGISTRIERT”表示還沒注冊 輸入個666666&#xff0c;沒反應又沒有確認按鈕&#xff0c;可以猜測是用timer來檢測輸入的正確性 查殼&#xff0c;無殼的VB程…

ZooKeeper啟動過程2:FastLeaderElection

前一篇文章中說到&#xff0c;啟動ZooKeeper集群時&#xff0c;需要分別啟動集群中的各個節點&#xff0c;各節點以QuorumPeer的形式啟動&#xff0c;最后到達startLeaderElection和lookForLeader。 先說startLeaderElection 首先&#xff0c;初始化節點自身的currentVote【當前…

C++編程調試秘笈(第1次閱讀)

閱讀時間&#xff1a; 2017-4-17 --- 2017-4-19 第一次閱讀《C編程調試秘笈》&#xff0c;可能是因為對項目開發的經驗不足&#xff08;最近只是在做簡單的五子棋&#xff09;&#xff0c;使得對里面很多的知識點了解得不是很深。 《C編程調試秘笈》講的內容個人覺得與調試的技…

Web Component 文章

周末無意中了解了Web Component的概念。 http://blog.amowu.com/2013/06/web-components.html http://www.v2ex.com/t/69389 http://www.infoq.com/cn/news/2013/06/webcomponents Shadow DOM http://www.toobug.net/article/what_is_shadow_dom.html http://www.html5rocks.co…

遮罩效果 css3

CSS3提供了遮罩效果&#xff0c;這是以前CSS2中比較難實現的一個新特性&#xff0c;配合SVG或者canvas同樣也可以實現遮罩效果&#xff0c;他的效果就如下圖所示: 簡單的說就是在一個層上面加一個過濾層&#xff0c;過濾層透明度越低&#xff0c;底層就顯示的越多&#xff0c;反…

調試九法(第1次閱讀)

閱讀時間&#xff1a; 2017年4月19日 --- 2017年4月22日 第一次看到這本書的時候&#xff0c;是在網上看到它被評論得十分優秀&#xff0c;只要掌握了書中的方法&#xff0c;就能找到所有的BUG。我就是這樣被吸引過來的。 因為是調試9法&#xff0c;所以總共講了調試的時候注意…

Oracle11g密碼區分大小寫導致database link無法連接

Oracle11g的密碼默認是區分大小寫的&#xff0c;該特性通過初始化參數sec_case_sensitive_logon控制&#xff0c;默認TRUE表示區分大小寫。但是Oracle11g之前的版本密碼都是不區分大小寫的&#xff0c;所以在Oracle10g等以前版本創建到Oracle11g的database link時&#xff0c;可…

OC-深淺復制

【OC學習-26】對象的淺拷貝和深拷貝——關鍵在于屬性是否可被拷貝 對象的拷貝分為淺拷貝和深拷貝&#xff0c;淺拷貝就是只拷貝對象&#xff0c;但是屬性不拷貝&#xff0c;拷貝出來的對象和原來的對象共用屬性&#xff0c;即指向同一個屬性地址。深拷貝則相當于不僅拷貝了一個…

計算機科學導論(第一次閱讀)

時間&#xff1a; 2017年4月22日----2017年4月26 這是一本計算機入門書籍&#xff0c;粗略地描述了計算機各個方面的內容。當然對于一些十分復雜的知識&#xff0c;也僅僅是大概描述了這方面知識的一些了解知識。

配置SQLServer,允許遠程連接

需要別人遠程你的數據庫&#xff0c;首先需要的是在一個局域網內&#xff0c;或者連接的是同一個路由器&#xff0c;接下來就是具體步驟&#xff1a; &#xff08;一&#xff09;首先是要檢查SQLServer數據庫服務器中是否允許遠程鏈接。其具體操作為&#xff1a; &#xff08;1…

彈出打開/保存文件對話框 選擇文件夾對話框

打開/保存文件對話框: CFileDialog::CFileDialog(BOOL bOpenFileDialog, //為TRUE則顯示打開對話框&#xff0c;為FALSE則顯示保存對話文件對話框LPCTSTR lpszDefExt NULL, //默認的文件擴展名LPCTSTR lpszFileName NULL, //默認的文件名DWORD dwFlags OFN_HIDEREADONLY | O…

SharePoint 2013的100個新功能之網站管理(一)

一&#xff1a;設置盤 網站操作現在被替換為新的&#xff08;設置&#xff09;盤子。一些新的操作像添加一個應用、添加一個頁面或設計管理器被添加而像創建網站則從菜單中移除了。 二&#xff1a;移除以其他用戶身份登錄 在SharePoint 2013中&#xff0c;從用戶歡迎菜單中移除…

160 - 13 badboy

偷懶了很久也是時候要繼續開始學習了。 環境&#xff1a; windows xp sp3 工具&#xff1a; VB Decompiler v8.3 這次是個vb文件&#xff0c;所以嘗試一下用這個的感覺。 打開文件之后發現有兩個CrackMe選擇&#xff0c;分別是1.0版本和2.0版本。 打開vb decompiler&#…

VBS操作剪切板

VBS操作剪切板 設置剪切板的內容 Dim Form, TextBox Set Form CreateObject("Forms.Form.1") Set TextBox Form.Controls.Add("Forms.TextBox.1").Object TextBox.MultiLine True TextBox.Text "忘記了&#xff0c;喜歡一個人的感覺" TextBo…