设为首页 收藏本站
查看: 741|回复: 0

[经验分享] Java应用之得到Oracle,Mysql数据库表信息

[复制链接]

尚未签到

发表于 2016-8-6 14:56:22 | 显示全部楼层 |阅读模式
  最近在使用公司内部框架生成代码的时候,在思考框架是怎么判断表是否存在,怎样得到表的信息,利用中午的时间找了点资料,现在可以实现判断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表是否存在
//经我测试只能检查当前连接用户下的是否存在
public boolean checkOracleTableExist(String userName, String tableName)
throws Exception {
Connection conn = getOracleConnection();
DatabaseMetaData meta = conn.getMetaData();
userName=userName.toUpperCase();
tableName=tableName.toUpperCase();
// ResultSet rs = meta.getTables(null, userName, tableName, new String[]
// {"TABLE" });
ResultSet rs = meta.getTables(null, userName, tableName, null);
boolean isExist = false;
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;
}
  检查Mysql表是否存在指定的列:
  

//检查Mysql表是否存在指定的列
public boolean checkMysqlTableColumnExist(String db, String tableName,String columnName)
throws Exception{
boolean isExist=false;
Connection conn = getMysqlConnection();
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getTables(db, null, tableName, null);
if (rs.next()) {
rs = meta.getColumns(null, null, tableName, columnName);
if (rs.next()) {
isExist=true;
}
}
closeConnection(rs, null, conn);
return isExist;
}
  检查Oracle表是否存在指定的列
  

//检查Oracle表是否存在指定的列
public boolean checkOracleTableColumnExist(String tableName,String columnName)
throws Exception{
boolean isExist=false;
Connection conn = getOracleConnection();
DatabaseMetaData meta = conn.getMetaData();
tableName=tableName.toUpperCase();
columnName=columnName.toUpperCase();
ResultSet rs = meta.getTables(null, null, tableName, null);
if (rs.next()) {
rs = meta.getColumns(null, null, tableName, columnName);
if (rs.next()) {
isExist=true;
}
}
closeConnection(rs, null, conn);
return isExist;
}
  检查Oracle表是否存在指定的列方法2:
  

public boolean checkOracleTableColumnExistTwo(String tableName,String columnName)
throws Exception{
boolean isExist=false;
Connection conn = getOracleConnection();
ResultSet rs = null;
Statement statement = conn.createStatement();
tableName=tableName.toUpperCase();
columnName=columnName.toUpperCase();
String sql = "select table_name, column_name from cols where  table_name ='"+tableName+"' and column_name ='"+columnName+"'";
rs = statement.executeQuery(sql);
while (rs.next()) {
isExist=true;
}
closeConnection(rs, null, conn);
return isExist;
}
    得到Mysql表信息,如列名,数据类型,长度,注释
  

//得到Mysql表信息,如列名,数据类型,长度,注释
public void getMysqlTableInfo(String dbName,String tableName) throws Exception
{
Connection conn = getMysqlConnection();
ResultSet rs = null;
Statement statement = conn.createStatement();
tableName=tableName.toUpperCase();
String sql = "select column_name,column_type,column_key,column_comment from information_schema.columns where  table_name = '"+tableName+"' and table_schema = '"+dbName+"'";
rs = statement.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("column_name")+"\t"+rs.getString("column_type")+"\t"+rs.getString("column_key")+"\t"+rs.getString("column_comment"));
}
closeConnection(rs, statement, conn);
}
  得到Oralce表信息,如列名,数据类型,长度,注释
  

//得到Oralce表信息,如列名,数据类型,长度,注释
public void getOracleTableInfo(String tableName) throws Exception
{
Connection conn = getOracleConnection();
ResultSet rs = null;
Statement statement = conn.createStatement();
tableName=tableName.toUpperCase();
String sql = "select a.column_name,a.data_type,a.data_length,b.comments from cols a,user_col_comments b  where a.column_name=b.column_name and a.table_name=b.table_name and b.table_name='"+tableName+"'";
rs = statement.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("column_name")+"\t"+rs.getString("data_type")+"\t"+rs.getString("data_length")+"\t"+rs.getString("comments"));
}
closeConnection(rs, statement, conn);
}
  得到Oracle表的主键
  

public void getOracleTablePK(String tableName) throws Exception
{
Connection conn = getOracleConnection();
ResultSet rs = null;
Statement statement = conn.createStatement();
tableName=tableName.toUpperCase();
String sql = "select c.table_name, c.column_name, d.status, d.owner from all_constraints d, all_cons_columns c where d.constraint_type = 'P' and d.constraint_name = c.constraint_name and d.owner = c.owner and c.table_name = '"+tableName+"'";
rs = statement.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString("table_name")+"\t"+rs.getString("column_name")+"\t"+rs.getString("status")+"\t"+rs.getString("owner"));
}
closeConnection(rs, statement, conn);
}
  代码完。
    
      本博文是我自己亲自调试并测试,转载请注明出处,另外如果对我的博文有不同意见,欢迎留言。
      说明:本人不接受任何涉及人格辱骂之类的留言,留言请文明用语。谢谢。
      全文完。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253739-1-1.html 上篇帖子: 用Oracle sqlldr导入文本文件TXT 总结 下篇帖子: ArcGIS 10.1中的Desktop连接ArcSDE——以Oracle为例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表