日期:2014-05-18  浏览次数:20733 次

在列名不知道的情况下,如何将其显示在网页中?
SQL= "select "+name+ "from   aa ";
name是用来存放传递过来的列名,假如说aa表中有id,name,city,country...这些列,但是经选择name中存放的可能是city,country这两个。
该如何用re.getString( " "),显示出来呢。

------解决方案--------------------
re.getString(1),
re.getString(2),
------解决方案--------------------
比较麻烦!!!如果是ID的话那么用re.getString还会错误
不如你在数据库查询之前就判断NAME这个字符串,如NAME的值是city,country那么用String[]分开,name[0]= "city ",name[1]= "country ",这样到数据库取出后就可以根据这个来判断了
if(name[0].equals( "city "))
{
String pstrcity=re.getString(1);
}
if(name[0].equals( "country "))
{
String pstrcountry=re.getString(1);
}
------解决方案--------------------
select语句都知道了还会不知道列名?反向解析name。

另外你这个实现太糟糕了。怎么可以直接把 "city, country "这样赤裸裸的列名连接着传进来。
你直接传String[]之类的结构代替name不就完了。
------解决方案--------------------
getMetaData
ResultSetMetaData getMetaData()
throws SQLException检索此 ResultSet 对象的列的编号、类型和属性。

返回:
此 ResultSet 对象的列的描述
抛出:
SQLException - 如果发生数据库访问错误
------解决方案--------------------
给你个思路,把NAME用数组写,然后取的时候用循环取就可以了,我就是这么做的
------解决方案--------------------
select name,city,country from aa ;
如果是这样,怎么显示,前题是不知道是name,city,country,这三项。
====================
name,city,country这三个是name字符串里的啊
String[] name1=name.split( ", ");
这样
name1[0]就是name
name1[1]就是city
name1[2]就是country
------解决方案--------------------
楼上,name相当于一个字符串化的数据了(类似于对象的toString()),反向解析往往是一个繁琐而糟糕的反模式(除非有精确的文本化协议的定义)。比如你直接name.split( ", ")并不能强制保证成功——考虑空格、引号。所以结构化属性参数才是最好的方法,可以强制客户指定列名的序列,比如最简单的数组。
------解决方案--------------------
?

getMetaData
ResultSetMetaData getMetaData()
throws SQLException检索此 ResultSet 对象的列的编号、类型和属性。

返回:
此 ResultSet 对象的列的描述
抛出:
SQLException - 如果发生数据库访问错误
------------------------------------


这是正解
------解决方案--------------------
重命名一下 可以吗?
select "+name+ " as mydate1 from aa ";
rs.getstring( "mydate1 ")

------解决方案--------------------
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData rsm = rs.getMetaData();
String[] cols = new String[rsm.getColumnCount()];
for (int i = 0; i < cols.length; i++)
cols[i] = rsm.getColumnName(i + 1);