用JSP导出ORACLE的数据表DDL

这几天忙着整理搞ISO的文档,也不知道自己维护的数据库手册是否齐全,算了干脆写个程序全给导出来算了;)。下面的程序expddl.jsp可导出当前连接数据库的用户下的所有数据表的DDL.

EXPDDL.JSP:

<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "oracle.jdbc.OracleDatabaseMetaData" %>
<%@ page import = "oracle.jdbc.OracleResultSetMetaData" %>
<%@ page import = "javax.sql.*,javax.naming.Context" %>
<%@ page import = "javax.naming.InitialContext" %>
<div align="center">
<%
 DataSource ds = null;
 
 Context ic = new InitialContext();
 ds = (DataSource) ic.lookup("java:comp/env/jdbc/mydb");
 
 Connection conn = ds.getConnection();
 
 OracleDatabaseMetaData odmd = (OracleDatabaseMetaData) conn.getMetaData();
 String us = odmd.getUserName();
 String[] types = new String[1];
    types[0]  = "TABLE";
 ResultSet rs = odmd.getTables(null,us,"%",types);
 while(rs.next()) {
   //取表名
   String tname = rs.getString(3);
 %>
   <div align="center">表名:<%= tname%></div>
   <table width="483" height="50" border="1"  cellpadding="2" cellspacing="0">
     <tr>
       <td><div align="center">序号</div></td>
       <td><div align="center">标识</div></td>
       <td><div align="center">类型/精度</div></td>
          <td><div align="center">标识说明</div></td>
     </tr>
 <%
   Statement st = conn.createStatement();
   ResultSet rs1 = st.executeQuery("select * from " + tname);
   OracleResultSetMetaData ormd = (OracleResultSetMetaData) rs1.getMetaData();
   //取列总数
   int colcnt = ormd.getColumnCount();
   //列序号
      int num = 1;
   for(int j=0;j<colcnt;j++) {
  String s = ormd.getColumnTypeName(j+1).toLowerCase();
  //只处理varchar2 char date number类型(根据需要添加相应的处理)
  if(s.equals("varchar2") || s.equals("char") || s.equals("date") || s.equals("number")) {
    if(s.equals("varchar2") || s.equals("char"))
      s = s + "(" + ormd.getColumnDisplaySize(j+1) + ")";
    if(s.equals("number"))
      s = s + "(" + ormd.getPrecision(j+1) + "," + ormd.getScale(j+1) + ")";
  %>
   <tr>
      <td width="40"><div align="center"><%= num++ %></div></td>
   <td width="98"><%=ormd.getColumnName(j+1)%></td><td width="144"><%= s %></td>
   <td width="173">&nbsp;</td> </tr>
 <%
     }
   }
   rs1.close();
   st.close();
 %>
  </table>
  <br>
  <%
 }
 rs.close();
 conn.close();
  %>
</div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值