如何在java中用hql或sql查询得到某表的所有字段名?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中用hql或sql查询得到某表的所有字段名?相关的知识,希望对你有一定的参考价值。

希望能够尽量简单些……
虽然很感谢jiest1986的帮助,但是这个方法并不是我想要的……
忘记说明了,希望不要使用select *等这种会去查询表内记录的语句,希望从查询表结构入手。因为如果用select *,如果该表含有的记录有上千条,这样的语句是会把服务器拖死的……select id form tablename where id=1的话,如果id正好没有1,或者该表内就没有记录,这样又要去写if等条件语句来处理,就变得麻烦了,也不好……

我用的是mysql数据库!

参考技术A /**
* 取得某表下的所有字段信息
*
* @param table
* @return
*/
public List getColumnInfoesInTable(String table)
List retval = new ArrayList();

try
Connection connection = getConnection();

// Create a result set
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + table);

// Get result set meta data
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();

// Get the column names; column indices start from 1
for (int i = 1; i < numColumns + 1; i++)
ColumnInfoBean columnInfoBean = new ColumnInfoBean();

// 字段名
columnInfoBean.setName(rsmd.getColumnName(i));

// 字段类型
columnInfoBean.setTypeName(rsmd.getColumnTypeName(i));

// 字段类型对应的java类名
columnInfoBean.setClassName(rsmd.getColumnClassName(i));

// 显示的长度
columnInfoBean.setDisplaySize(String.valueOf(rsmd
.getColumnDisplaySize(i)));

// Precision
columnInfoBean.setPrecision(String
.valueOf(rsmd.getPrecision(i)));

// Scale
columnInfoBean.setScale(String.valueOf(rsmd.getScale(i)));

retval.add(columnInfoBean);

catch (SQLException e)
e.printStackTrace();


return retval;
参考技术B 那就得看用的是什么数据库了,比如mysql可以用describe tablename返回一个resultset,其他数据库没试过,应该也有类似方法的;或者比如oracle,可以用select * from tablename where rownum <= 1来确保只取一条记录,然后用1楼的方法本回答被提问者采纳 参考技术C 楼上正解,建议将 ResultSet rs = stmt.executeQuery("SELECT * FROM " + table); 改成 ResultSet rs = stmt.executeQuery("SELECT * FROM " + table + " where 1=2");

SQL查询字段的说明

比如我添了个字段dex,说明为“敏捷”

如果获得?
速度~~
Microsoft SQL SERVER 2000
我在企业管理器里面添加了一个字段,
在下面有一栏“说明”(就是在“默认值”上面一栏),我在里面写了几个字,如何通过T-SQL语句查询获得这几个字?

难不成分不够?+

查出表的各个字段的所有属性

SELECT
表名 = case when a.colorder=1 then d.name else '' end,
表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end,
字段序号 = a.colorder,
字段名 = a.name,
标识 = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
主键 = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,
类型 = b.name,
占用字节数 = a.length,
长度 = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
小数位数 = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
允许空 = case when a.isnullable=1 then '√'else '' end,
默认值 = isnull(e.text,''),
字段说明 = isnull(g.[value],'')
FROM
syscolumns a
left join
systypes b
on
a.xusertype=b.xusertype
inner join
sysobjects d
on
a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
left join
syscomments e
on
a.cdefault=e.id
left join
sysproperties g
on
a.id=g.id and a.colid=g.smallid
left join
sysproperties f
on
d.id=f.id and f.smallid=0
where
d.name='要查询的表' --如果只查询指定表,加上此条件
order by
a.id,a.colorder
参考技术A 把问题描述清楚,,

补充问题吧..

lz想想去的字段说明的吧

sqlserver 2000

SELECT
[Table Name] = i_s.TABLE_NAME,
[Column Name] = i_s.COLUMN_NAME,
[Description] = s.value
FROM
INFORMATION_SCHEMA.COLUMNS i_s
LEFT OUTER JOIN
sysproperties s
ON
s.id = OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME)
AND s.smallid = i_s.ORDINAL_POSITION
AND s.name = 'MS_Description'
WHERE
OBJECTPROPERTY(OBJECT_ID(i_s.TABLE_SCHEMA+'.'+i_s.TABLE_NAME), 'IsMsShipped')=0
AND i_s.TABLE_NAME = 'table_name'
-- 这里加上你的表名字....
ORDER BY
i_s.TABLE_NAME, i_s.ORDINAL_POSITION

在SQL Server 2005 中 sysproperties 表已被废弃,所以上面的代码都不能用。幸运的是他们还是增加了一个系统表给我们 sys.extended_properties,这张表和 sysproperties基本上相似。

SELECT
[Table Name] = OBJECT_NAME(c.object_id),
[Column Name] = c.name,
[Description] = ex.value
FROM
sys.columns c
LEFT OUTER JOIN
sys.extended_properties ex
ON
ex.major_id = c.object_id
AND ex.minor_id = c.column_id
AND ex.name = 'MS_Description'
WHERE
OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0
AND OBJECT_NAME(c.object_id) = 'your_table'
-- 这里加上你的表名字,,
ORDER
BY OBJECT_NAME(c.object_id), c.column_id
参考技术B 先用
select id from sysobjects where name='你的表名字' and xtype='u'
获取你表的ID

select value from sysproperties where id='你表的ID' and name='MS_Description' 就可以获取你要的说明文字了
参考技术C select * from tablename where dex='" & 敏捷 &“‘”

以上是关于如何在java中用hql或sql查询得到某表的所有字段名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有的 Hql 或 SQL 查询中应用“With UR”子句?如何在我的查询为字符串格式的 Java 文件中附加它

请问:mybatis查询某表的某个字段的最大值并返回,该如何写mapper的配置文件?

将列表传递给 HQL 或 SQL 中的 IN 子句?

(hibernate)如果我想查询表的总记录数,HQL语句应该怎么写?又如何获得值呢?

如何得到hibernate显示在控制台的hql或sql语句?

JAVA中用Hql语句从数据库中读取数据,字符拼接问题