java 怎么实现根据传入的数据库表的名字将数据生成XML文件 表名不确定,字段也就不确定 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假设你传入表名时用的参数名称是tableName你去拼一条这样的SQL语句:String sql = "select * from " + tableName然后执行它,你会得到一个ResultSet,假如叫rs通过以下这条语句得到结果集的元数据:ResultSetMetaData rsmd = rs.getMetaData();现在,你可以1、使用 rsmd.getColumnCount() 返回此 ResultSet 对象中的列数。2、使用 rsmd.getColumnName(int column) 返回指定列的列名换句话说,你可以得到你需要的列名然后在循环中,根据查询出来的数据,生成一个XML文档。形如:<tableName> <record> <column_1>colunm1 value</column_1> <column_2>colunm1 value</column_2> ... <column_x>colunm1 value</column_x> <record> <record> <column_1>colunm1 value</column_1> <column_2>colunm1 value</column_2> ... <column_x>colunm1 value</column_x> <record> ...</tableName> [接1楼]如果你不但希望指定表名,还希望指定列名,就设计两个参数tableName及columnList(以逗号分隔的一个字符串,形如:name,age,address)然后这样拼SQL:String sql = "select " + column + " from " + tableName 或者,用一个String[] column去接收列名,然后再自己拼成一个用逗号分隔的字符串。另,1楼的XML有一点小错,关闭标签忘记加“/”杠了,呵呵。应该是:<tableName> <record> <column_1>colunm1 value </column_1> <column_2>colunm1 value </column_2> ... <column_x>colunm1 value </column_x> </record> <record> <column_1>colunm1 value </column_1> <column_2>colunm1 value </column_2> ... <column_x>colunm1 value </column_x> </record> ...</tableName> [接2楼]因为复制粘贴的关系,“colunm1 value”也忘记改了,呵呵。比较罗嗦,希望楼主能明白我的意思。呵呵。 //连接数据库类import java.sql.*;public class DbUtil{ private Connection con; private String url; public DbUtil(String databasName, String userName, String password) { con=Connetions(databasName,userName,password); } private Connection Connetions(String databasName, String userName, String password) { Connection con = null; url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName="+databasName; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection(url, userName, password); } catch (Exception e) { System.out.println("" + e); } return con; } public Statement getQueryStatement(String sql) { Statement stmt=null; try{ stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); }catch(SQLException ex){ } return stmt; }//关闭连接 public void close() { try { if (con != null) { con.close(); con = null; } } catch (Exception e) { System.out.println("数据库关闭出错!"); } }}//GetTableMessageimport java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.sql.Statement;public class GetTableMessage { public static void main(String str[]) { new GetTableMessage().displayTableMessage(); } // private void displayTableMessage(){ String dataBaseName="wkkesdb"; String userName="sa"; String password="sql"; String sql=null; Statement stmt=null; ResultSetMetaData rsmd = null; ResultSet rs; DbUtil dbUtil=new DbUtil(dataBaseName,userName,password); sql="SELECT *FROM userList"; stmt=dbUtil.getQueryStatement(sql); String coloumName[]; String coloumTypeName; try{ rs=stmt.executeQuery(sql); rsmd = rs.getMetaData(); // 获取字段的名称 int columnCounts = rsmd.getColumnCount(); coloumName=new String[columnCounts]; //得到表的字段名与其定义的长度 for (int i = 1; i <=columnCounts; ++i) { coloumName[i-1]=rsmd.getColumnName(i); coloumTypeName="->"+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")"; System.out.print(coloumName[i-1]+coloumTypeName+" "); } System.out.println(""); System.out.println("--------------------------------------------------------"); //表的内容 while(rs.next()){ for(int i=0;i<columnCounts;i++) { System.out.print(rs.getString(coloumName[i])+" "); } System.out.println(); } }catch(SQLException ex){ System.out.println(ex); }finally{ dbUtil.close(); } //查询的结果其它相关信息,查看一下JDK }} 为什么BufferedInputtream继承自过滤字节流,而BufferedReader却并非继承自过滤字符流呢? 如何改变按钮的形状? 请问一下在java中如何保存图像? 在万方数据库中构建元搜索的问题?大虾帮忙 请教一个JTextPanel显示网页的问题 会打字就会建立网站,几分钟就可自动建立大型网站 关于Applet无法显示的问题,急!!! 如何优化程序(在有限的设备资源的情况下程序运行的效率,程序的大小)??? 多谢 anubis 请接分 jdbc运行问题 java内存管理问题 征求此新手代码的执行过程说明及原理分析
你去拼一条这样的SQL语句:
String sql = "select * from " + tableName
然后执行它,你会得到一个ResultSet,假如叫rs
通过以下这条语句得到结果集的元数据:
ResultSetMetaData rsmd = rs.getMetaData();
现在,你可以
1、使用 rsmd.getColumnCount() 返回此 ResultSet 对象中的列数。
2、使用 rsmd.getColumnName(int column) 返回指定列的列名
换句话说,你可以得到你需要的列名然后在循环中,根据查询出来的数据,生成一个XML文档。形如:
<tableName>
<record>
<column_1>colunm1 value</column_1>
<column_2>colunm1 value</column_2>
...
<column_x>colunm1 value</column_x>
<record>
<record>
<column_1>colunm1 value</column_1>
<column_2>colunm1 value</column_2>
...
<column_x>colunm1 value</column_x>
<record>
...
</tableName>
如果你不但希望指定表名,还希望指定列名,就设计两个参数tableName及columnList(以逗号分隔的一个字符串,形如:name,age,address)
然后这样拼SQL:
String sql = "select " + column + " from " + tableName 或者,用一个String[] column去接收列名,然后再自己拼成一个用逗号分隔的字符串。另,1楼的XML有一点小错,关闭标签忘记加“/”杠了,呵呵。应该是:
<tableName>
<record>
<column_1>colunm1 value </column_1>
<column_2>colunm1 value </column_2>
...
<column_x>colunm1 value </column_x>
</record>
<record>
<column_1>colunm1 value </column_1>
<column_2>colunm1 value </column_2>
...
<column_x>colunm1 value </column_x>
</record>
...
</tableName>
因为复制粘贴的关系,“colunm1 value”也忘记改了,呵呵。
比较罗嗦,希望楼主能明白我的意思。呵呵。
import java.sql.*;
public class DbUtil{ private Connection con;
private String url;
public DbUtil(String databasName, String userName, String password) {
con=Connetions(databasName,userName,password);
}
private Connection Connetions(String databasName, String userName, String password) {
Connection con = null;
url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName="+databasName;
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection(url, userName, password);
}
catch (Exception e) {
System.out.println("" + e);
}
return con;
} public Statement getQueryStatement(String sql) {
Statement stmt=null;
try{
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
}catch(SQLException ex){
}
return stmt;
}
//关闭连接
public void close() {
try {
if (con != null) {
con.close();
con = null;
}
}
catch (Exception e) {
System.out.println("数据库关闭出错!");
}
}
}
//GetTableMessage
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;public class GetTableMessage { public static void main(String str[]) {
new GetTableMessage().displayTableMessage();
} //
private void displayTableMessage(){
String dataBaseName="wkkesdb";
String userName="sa";
String password="sql";
String sql=null;
Statement stmt=null;
ResultSetMetaData rsmd = null;
ResultSet rs;
DbUtil dbUtil=new DbUtil(dataBaseName,userName,password);
sql="SELECT *FROM userList";
stmt=dbUtil.getQueryStatement(sql);
String coloumName[];
String coloumTypeName;
try{
rs=stmt.executeQuery(sql);
rsmd = rs.getMetaData(); // 获取字段的名称
int columnCounts = rsmd.getColumnCount();
coloumName=new String[columnCounts];
//得到表的字段名与其定义的长度
for (int i = 1; i <=columnCounts; ++i) {
coloumName[i-1]=rsmd.getColumnName(i);
coloumTypeName="->"+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")";
System.out.print(coloumName[i-1]+coloumTypeName+" ");
}
System.out.println("");
System.out.println("--------------------------------------------------------");
//表的内容
while(rs.next()){
for(int i=0;i<columnCounts;i++)
{
System.out.print(rs.getString(coloumName[i])+" ");
}
System.out.println();
}
}catch(SQLException ex){
System.out.println(ex);
}finally{
dbUtil.close();
}
//查询的结果其它相关信息,查看一下JDK
}
}