import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /*** * 2014-07-21日: * oracle數據庫, 表結構查詢 ,字段信息查詢,字段註釋查詢 * 表字段查詢 all_tab_columns * 表字段註釋查詢 all_col_comments * @author 王華榮 * */ public class OracleTable { private static final String DRIVER_CLASS = "oracle.jdbc.driver.OracleDriver"; private static final String DATABASE_URL = "jdbc:oracle:thin:@192.168.1.10:1521:orcl"; private static final String DATABASE_USER = "dev"; private static final String DATABASE_PASSWORD = "dev"; private static Connection con = null; public static Connection getConnection() { try { Class.forName(DRIVER_CLASS); con=DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD); return con; } catch (Exception ex) { System.out.println("2:"+ex.getMessage()); } return con; } /*** * 打印test * @throws SQLException */ public static void sysoutStrTablePdmCloumns(String Table,String Owner) throws SQLException{ getConnection(); List<HashMap<String,String>> columns = new ArrayList<HashMap<String,String>>(); try{ Statement stmt = con.createStatement(); String sql= "select "+ " comments as \"Name\","+ " a.column_name \"Code\","+ " a.DATA_TYPE as \"DataType\","+ " b.comments as \"Comment\","+ " decode(c.column_name,null,'FALSE','TRUE') as \"Primary\","+ " decode(a.NULLABLE,'N','TRUE','Y','FALSE','') as \"Mandatory\","+ " '' \"sequence\""+ " from "+ " all_tab_columns a, "+ " all_col_comments b,"+ " ("+ " select a.constraint_name, a.column_name"+ " from user_cons_columns a, user_constraints b"+ " where a.constraint_name = b.constraint_name"+ " and b.constraint_type = 'P'"+ " and a.table_name = '"+Table+"'"+ " ) c"+ " where "+ " a.Table_Name=b.table_Name "+ " and a.column_name=b.column_name"+ " and a.Table_Name='"+Table+"'"+ " and a.owner=b.owner "+ " and a.owner='"+Owner+"'"+ " and a.COLUMN_NAME = c.column_name(+)" + " order by a.COLUMN_ID"; System.out.println(sql); ResultSet rs = stmt.executeQuery(sql); while (rs.next()){ HashMap<String,String> map = new HashMap<String,String>(); map.put("Name", rs.getString("Name")); map.put("Code", rs.getString("Code")); map.put("DataType", rs.getString("DataType")); map.put("Comment", rs.getString("Comment")); map.put("Primary", rs.getString("Primary")); map.put("Mandatory", rs.getString("Mandatory")); columns.add(map); } } catch (SQLException e){ e.printStackTrace(); }finally{ con.close(); } } public static void main(String[] args) throws SQLException{ sysoutStrTablePdmCloumns("CT_INFO_CONTRACT_BORROW","DEV"); } }
testhtml
java獲取數據庫裏表的名字 博客分類: java 一.Java方法 // 獲得當前數據庫下全部的表名 Java代碼 收藏代碼 public void getTableNameByCon(Connection con) { try { DatabaseMetaData meta = con.getMetaData(); ResultSet rs = meta.getTables(null, null, null, new String[] { "TABLE" }); while (rs.next()) { System.out.println("表名:" + rs.getString(3)); System.out.println("表所屬用戶名:" + rs.getString(2)); System.out.println("------------------------------"); } con.close(); } catch (Exception e) { try { con.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // TODO Auto-generated catch block e.printStackTrace(); } } 二.經過sql語句獲得數據庫裏全部的表名 --MySQL數據庫 Java代碼 收藏代碼 show tables; --Oracle數據庫(當前登陸用戶下的表) Java代碼 收藏代碼 select uo.object_name from user_objects uo where uo.object_type = 'TABLE'; --sql server 2000/2005數據庫 Java代碼 收藏代碼 select name from sysobjects --sybase數據庫 Java代碼 收藏代碼 select name from sysobjects where type='U'; --DB2數據庫 Java代碼 收藏代碼 select tabname from syscat.tables where tabschema = current schema ;// 獲取當前模式下面的全部用戶表 轉自:http://hi.baidu.com/rybwxn/blog/item/1a59502a75a7de25d52af1cc.html
testjava
首先是DatabaseMetaData接口: public static void main(String[] args) { //這裏沒有指定數據庫 String url = "jdbc:mysql://127.0.0.1:3306/"; String user = "root"; String pass = ""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection(url, user, pass); DatabaseMetaData metadata = conn.getMetaData(); System.out.println("數據庫已知的用戶: "+ metadata.getUserName()); System.out.println("數據庫的系統函數的逗號分隔列表: "+ metadata.getSystemFunctions()); System.out.println("數據庫的時間和日期函數的逗號分隔列表: "+ metadata.getTimeDateFunctions()); System.out.println("數據庫的字符串函數的逗號分隔列表: "+ metadata.getStringFunctions()); System.out.println("數據庫供應商用於 'schema' 的首選術語: "+ metadata.getSchemaTerm()); System.out.println("數據庫URL: " + metadata.getURL()); System.out.println("是否容許只讀:" + metadata.isReadOnly()); System.out.println("數據庫的產品名稱:" + metadata.getDatabaseProductName()); System.out.println("數據庫的版本:" + metadata.getDatabaseProductVersion()); System.out.println("驅動程序的名稱:" + metadata.getDriverName()); System.out.println("驅動程序的版本:" + metadata.getDriverVersion()); System.out.println(); System.out.println("數據庫中使用的表類型"); ResultSet rs = metadata.getTableTypes(); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); System.out.println(); /** * 獲取指定的數據庫的全部表的類型,getTables()的第一個參數就是數據庫名 * 由於與MySQL鏈接時沒有指定,這裏加上,剩下的參數就能夠爲null了 * 第二個參數是模式名稱的模式,可是輸出也是什麼都沒有。誰知道告訴我一聲 */ System.out.println("獲取指定的數據庫的全部表的類型"); ResultSet rs1 = metadata.getTables("ssi2bbs", null, null, null); while (rs1.next()) { System.out.println(); System.out.println("數據庫名:"+ rs1.getString(1)); System.out.println("表名: "+rs1.getString(3)); System.out.println("類型: "+rs1.getString(4)); } rs1.close(); System.out.println(); System.out.println("獲取指定的數據庫的表的主鍵"); //獲取指定的數據庫的表的主鍵,第二個參數也是模式名稱的模式,使用null了 ResultSet rs2 = metadata.getPrimaryKeys("mysql", null, "db"); while (rs2.next()) { System.out.println("主鍵名稱: "+ rs2.getString(4)); } rs2.close(); System.out.println(); System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:"); ResultSet rs3 = metadata.getIndexInfo("ssi2bbs", null, "user", false, true); while (rs3.next()) { System.out.println("數據庫名: "+ rs3.getString(1)); System.out.println("表模式: "+ rs3.getString(2)); System.out.println("表名稱: "+ rs3.getString(3)); System.out.println("索引值是否能夠不惟一: "+ rs3.getString(4)); System.out.println("索引類別: "+ rs3.getString(5)); System.out.println("索引名稱: "+ rs3.getString(6)); System.out.println("索引類型: "+ rs3.getString(7)); System.out.println("索引中的列序列號: "+ rs3.getString(8)); System.out.println("列名稱: "+ rs3.getString(9)); System.out.println("列排序序列: "+ rs3.getString(10)); System.out.println("TYPE爲 tableIndexStatistic時它是表中的行數不然它是索引中惟一值的數量: "+ rs3.getString(11)); System.out.println("TYPE爲 tableIndexStatisic時它是用於表的頁數不然它是用於當前索引的頁數: "+ rs3.getString(12)); System.out.println("過濾器條件: "+ rs3.getString(13)); } rs3.close(); } catch (Exception e) { e.printStackTrace(); } } ResultSetMetaData接口, 用於獲取關於ResultSet 對象中列的類型和屬性信息的對象。下面的代碼是把一個表的列信息打印了出來。固然了,這只是一部分。詳細的參考JAVA JDK。 public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ssi2bbs","root",""); PreparedStatement ps = conn.prepareStatement("select * from bbs"); ResultSet rs = ps.executeQuery(); ResultSetMetaData rsme = rs.getMetaData(); int columnCount = rsme.getColumnCount(); System.out.println("ResultSet對象中的列數"+ columnCount); for (int i = 1; i < columnCount ; i++) { System.out.println(); System.out.println("列名稱: "+ rsme.getColumnName(i)); System.out.println("列類型(DB): " + rsme.getColumnTypeName(i)); System.out.println("長度: "+ rsme.getPrecision(i) ); System.out.println("是否自動編號: "+ rsme.isAutoIncrement(i)); System.out.println("是否能夠爲空: "+ rsme.isNullable(i)); System.out.println("是否能夠寫入: "+ rsme.isReadOnly(i)); } } catch (Exception e) { e.printStackTrace(); } }
testmysql