???? 最近在使用公司内部框架生成代码的时候,在思考框架是怎么判断表是否存在,怎样得到表的信息,利用中午的时间找了点资料,现在可以实现判断Oracle,Mysql表是否存在,表内是否存在某个字段,得到表的字段信息,如字段名称,字段类型,长度,以及注释,首先带上我参考的信息:
???
http://stackoverflow.com/questions/205736/get-list-of-all-tables-in-oracle http://dev.mysql.com/doc/refman/5.0/en/columns-table.html http://stackoverflow.com/questions/9016578/how-to-get-primary-key-column-in-oracle
??? 数据库及版本:Oracle 10g,Mysql 5.6.14。
??? 废话不多说,上代码:
??? 首先是公共方法:
???
public Connection getMysqlConnection() { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/test";// 要操作的数据库名称 String username = "root";// 数据库用户名 String password = "123";// 密码 return getConnection(driver, url, username, password); } public Connection getOracleConnection() { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:xe";// 要操作的数据库名称 String username = "tmd";// 数据库用户名 String password = "tmd";// 密码 return getConnection(driver, url, username, password); } public Connection getConnection(String driver, String url, String userName, String passwd) { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, userName, passwd); } catch (Exception e) { e.printStackTrace(); } return conn; } public void closeConnection(ResultSet rs, Statement statement, Connection conn) { try { if (rs != null) { rs.close(); } if (statement != null) { statement.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } }
??? 得到Mysql指定数据库所有表名:
???
//得到Mysql指定数据库所有表名 public void getMysqlDataBaseTables(String database) throws Exception { Connection conn = getMysqlConnection(); ResultSet rs = null; Statement statement = conn.createStatement(); String sql = "select table_name from information_schema.tables where table_schema='" + database + "'"; rs = statement.executeQuery(sql); System.out.println("-------------DB[" + database + "] All Tables---------------"); while (rs.next()) { System.out.println(rs.getString("table_name")); } closeConnection(rs, statement, conn); }
??? Oracle当前用户下所有表名:
???
public void getOracleDataBaseTables() throws Exception { Connection conn = getOracleConnection(); ResultSet rs = null; Statement statement = conn.createStatement(); String sql = "select table_name from user_tables"; rs = statement.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString("table_name")); } closeConnection(rs, statement, conn); }
?? 检测Mysql表是否存在:
??
//检查Mysql表是否存在 public boolean checkMysqlTableExist(String db, String tableName) throws Exception { Connection conn = getMysqlConnection(); DatabaseMetaData meta = conn.getMetaData(); boolean isExist = false; // types -要包括的表类型组成的列表,可设为null,表示所有的 // ResultSet rs = meta.getTables(db, null, tableName,new String[] { // "TABLE" }); ResultSet rs = meta.getTables(db, null, tableName, null); System.out .println("TABLE_CAT \t TABLE_SCHEM \t TABLE_NAME \t TABLE_TYPE"); while (rs.next()) { System.out.println(rs.getString("TABLE_CAT") + "\t" + rs.getString("TABLE_SCHEM") + "\t" + rs.getString("TABLE_NAME") + "\t" + rs.getString("TABLE_TYPE")); isExist = true; } closeConnection(rs, null, conn); return isExist; }
?? 检查Oracle表是否存在
???
//检查Oracle表是否存在 //经我测试只能检查当前连接用户下的是