怎么用java读取数据库表结构?
比如:有表名,得到该表的字段名,字段类型。
好像DatabaseMetaData可以得到,但是我没有找到例子。
最好sql server 2000 和 Oracle 写一个例子?
比如:有表名,得到该表的字段名,字段类型。
好像DatabaseMetaData可以得到,但是我没有找到例子。
最好sql server 2000 和 Oracle 写一个例子?
解决方案 »
- 一个canvas,为什么画fps会闪烁
- JSP页面动态验证码的问题
- 这是什么意思
- [菜鸟学JAVA]我在网上下了一个《JBuilder程序设计实例》的代码,可它老是说""Frame1.java": Error #: 901 : package ex02_01 stated in s
- 有谁用过文本的自定义格式化器??
- 一个很简单的问题(很急,在线等待)
- 做一个多语言版本的网站该怎么做
- 如何检测到鼠标在弹出菜单上移动的事件?
- 我是一个初学者,有些问题请教...很菜...
- 这个类执行的结果是什么,先考虑再执行,看看是否和你想象的结果的一样?
- 为什么数组元素是从0开始的,result.getstring是从1开始的?
- 菜鸟问题,hashmap 是什么东西,举个例子
<%!
String typeToString(int i)
{
String ret="";
switch(i)
{
case(1):ret="CHAR";break;
case(2):ret="NUMERIC";break;
case(3):ret="DECIMAL";break;
case(4):ret="INTEGER";break;
case(5):ret="SMALLINT";break;
case(6):ret="FLOAT";break;
case(8):ret="DOUBLE";break;
case(12):ret="VARCHAR";break;
case(91):ret="DATE";break;
default:ret="other";
}
return ret;
}
%>
<%!
String getCol(ResultSet rst,int type,int colNum)throws Exception
{
String ret="";
switch(type)
{
case(1):ret=rst.getString(colNum);break;
case(4):ret=String.valueOf(rst.getInt(colNum));break;
case(5):ret=String.valueOf(rst.getInt(colNum));break;
case(6):ret=String.valueOf(rst.getFloat(colNum));break;
case(8):ret=String.valueOf(rst.getDouble(colNum));break;
case(12):ret=rst.getString(colNum);break;
default:ret="not know";
}
return trans(ret);
}
%>
<%! String trans(String chi)
{
String result = null;
byte temp [];
try
{
temp=chi.getBytes("iso-8859-1");
result = new String(temp);
}
catch(UnsupportedEncodingException e)
{
System.out.println (e.toString());
}
return result;
}
%>
<html>
<body>
<center>
<html>
<body>
数据库动态代理v0.5b:<hr>
<form action="proxy.jsp" method=get>
<table><tr><td>数据库的名字:<input type=text name=database></td>
<td>表的名字:<input type=text name=table></td></tr>
<tr> <td colspan=2><input type=submit value=提交></td></tr>
</table>
</form>
<%
String database=(String)request.getParameter("database");
String table=(String)request.getParameter("table");
%>
<table border=1>
<%
try
{
//装载驱动程序
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
//创建连接
Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433","bn","bn");
Statement stmt=con.createStatement();
ResultSet rst=stmt.executeQuery("use "+database+";select * from "+table);
ResultSetMetaData meta=rst.getMetaData() ;
int col=meta.getColumnCount();
out.println("表"+table+"共有:"+col+"个字段,这些字段是:<br>");
out.println("<tr>");
for(int i=1;i<col+1;i++)
{
out.println("<td>字段名:");
out.println(meta.getColumnName(i));
out.println("类型: ");
out.println(typeToString(meta.getColumnType(i)));
out.println("</td>");
}
out.println("</tr>");
while(rst.next())
{
out.println("<tr>");
for(int i=1;i<col+1;i++)
{
out.println("<td>"+getCol(rst,meta.getColumnType(i),i)+"</td>");
}
out.println("</tr>");
}
//关闭连接、释放资源
rst.close();
stmt.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>
</table>
<center>
</body>
</html>
jsp的例子
PreparedStatement pstmt = null;
ResultSetMetaData rsmd = null;
try {
Class.forName("org.gjt.mm.mysql.Driver");
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/PIM", "root", "smyl");
pstmt = connection.prepareStatement("select * from sys_user");
rsmd = pstmt.getMetaData();
for (int i = 1; i < rsmd.getColumnCount() + 1; i++) {
System.out.println(rsmd.getColumnName(i));
}
}
catch (ClassNotFoundException cnfex) {
cnfex.printStackTrace();
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
}
例如:知道tabel名字是“man_info”
得到field名是“manId,name,sex...等”
得到field中文名是“男人ID,姓名,性别....等”
得到field类型名士“NUMERIC,VARCHAR,NUMERIC....等”
各种DBMS中都有系统表,有一些系统表会详细记录
各个表的表名、表结构(表中的列名、列类型...),
所以可以直接查这些表,当然,你的权限要够