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

[经验分享] java 读取postgresql数据库结构生成XML格式

[复制链接]

尚未签到

发表于 2016-11-20 12:03:22 | 显示全部楼层 |阅读模式
 

import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;

publicclass getDBStructure {
/**
* @param args
* @throws SQLException
* @throws ClassNotFoundException
*/
publicstaticvoid main(String[] args)throws SQLException, ClassNotFoundException {
//TODO Auto-generated method stub
DataBaseUtil db = new DataBaseUtil();
DatabaseMetaData dbmt;

dbmt = db.getConn().getMetaData();
Statement st = db.getConn().createStatement();
ResultSet tableSet = dbmt.getTables(null,"%", "%",new String[]{"TABLE"});
Element root = new Element("POSTGIS_DB_XML");
root.setAttribute("VERSION","1.0");
Document Doc = new Document(root);
Element elements = new Element("Tables");
Element elementtable =null;
while (tableSet.next()){

String tableName = tableSet.getString(3);//获取数据库中表名称
elementtable = new Element("table");
elementtable.setAttribute("tableName",tableName );
ResultSet columnSet = dbmt.getColumns(null,"%", tableName,"%");
ResultSetMetaData rsmd = columnSet.getMetaData();
intnumberOfColumns = rsmd.getColumnCount();//表中列个数
Element elementcolumn =null;
while(columnSet.next()){
String columnName = columnSet.getString("COLUMN_NAME");//获取列名称
String TYPE_NAME = columnSet.getString("TYPE_NAME");//列字段类型
elementcolumn = new Element("column");
elementcolumn.setAttribute("columnName", columnName);
elementcolumn.setAttribute("TYPE_NAME", TYPE_NAME);
elementtable.addContent(elementcolumn);
}
elements.addContent(elementtable);
}
root.addContent(elements);
XMLOutputter XMLOut = new XMLOutputter();
String xml = XMLOut.outputString(Doc);
System.out.println(xml);

}
}
  
在这里依赖一个类DatabaseMetaData,这个对象可以从数据库连接来获取。有了它万事大吉了,想知道什么问它即可:
//获取所有表
ResultSet tableSet = databaseMetaData.getTables(null, "%", "%", new String[]{"TABLE"});

//获取所有列
  ResultSet columnSet = dbmt.getColumns(null,"%", tableName,"%");
//获取列个数
  intnumberOfColumns = rsmd.getColumnCount();
下面就是如何从数据库读取表信息了。
引入 jdom2的相关JAR文件,数据库自己选择(这里我用的是PostgreSQL数据库)
//数据库连接

publicclass DataBaseUtil {
privatestatic Connectionconn =null;
@SuppressWarnings("unchecked")
publicstatic Connection getConn()throws ClassNotFoundException, SQLException
{
if (conn==null)
{
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/postgis" ;
conn = DriverManager.getConnection(url,"postgres" , "12345" );
}
returnconn;
}
}

  


  //生成XML格式

运维网声明 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-302913-1-1.html 上篇帖子: 用xmin当作表的时间戳(postgresql) 下篇帖子: 升级PostgreSQL到8.2.4及其他
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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