一、 通过SqlRowSetMetaData类
使用到的类或接口有如下几个:
orgspringframeworkjdbcsupportrowsetSqlRowSet接口:该对象和javaxsqlRowSet类相对应,它和RowSet的区别是SqlRowSet中的方法从来不会抛出SQLException异常,通过jdbcTemplate可以获得该对象的实例;
orgspringframeworkjdbcsupportrowsetSqlRowSetMetaData接口:是对应于SqlRowSet的元数据接口,和javasqlResultSetMetaData相一致,也只是从来不会抛出SQLException异常,通过SqlRowSet可以获得该类的实例;
具体使用实例如下:
SqlRowSet rowSet = jdbcTemplatequeryForRowSet("select from user limit 0");SqlRowSetMetaData metaData = rowSetgetMetaData();
int columnCount = metaDatagetColumnCount();
for (int i = 1; i <= columnCount; i++) {
Map<String,String> fieldMap = new HashMap<String,String>();
fieldMapput("ColumnName", metaDatagetColumnName(i));
fieldMapput("ColumnType", StringvalueOf(metaDatagetColumnType(i)));
fieldMapput("ColumnTypeName", metaDatagetColumnTypeName(i));
fieldMapput("CatalogName", metaDatagetCatalogName(i));
fieldMapput("ColumnClassName", metaDatagetColumnClassName(i));
fieldMapput("ColumnLabel", metaDatagetColumnLabel(i));
fieldMapput("Precision", StringvalueOf(metaDatagetPrecision(i)));
fieldMapput("Scale", StringvalueOf(metaDatagetScale(i)));
fieldMapput("SchemaName", metaDatagetSchemaName(i));
fieldMapput("TableName", metaDatagetTableName(i));
fieldMapput("SchemaName", metaDatagetSchemaName(i));
Systemoutprintln(fieldMap);
}
上述所用的信息都应列出来了,发现只有一些简单的信息,并没有涉及索引和其他约束等的信息。
二、通过RowCountCallbackHandler类
使用到的类或接口有如下几个:
orgspringframeworkjdbccoreRowCallbackHandler接口:用于处理结果集中的每一行数据;
orgspringframeworkjdbccoreRowCountCallbackHandler类:实现了RowCallbackHandler接口,其中简单的实现了对结果集元数据的获取,包括行数、列数、列名、列的类型等信息,顺便说一下这个类的实例只可以用一次;
在源代码中给出了简单的使用方式,如下:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // reusable object
RowCountCallbackHandler countCallback = new RowCountCallbackHandler(); // not reusable
jdbcTemplatequery("select from user", countCallback);
int rowCount = countCallbackgetRowCount();
所有能获得的信息如下:
String sql = "select from user";RowCountCallbackHandler rcch = new RowCountCallbackHandler();
jdbcTemplatequery(sql, rcch);
Systemoutprintln("column count :" + rcchgetColumnCount());
Systemoutprintln("column count :" + rcchgetRowCount());
for(int i=0; i<rcchgetColumnCount(); i++){
Systemoutprintln("column name :" + rcchgetColumnNames()[i]);
Systemoutprintln("column type :" + rcchgetColumnTypes()[i]);
}
输出如下:
从输出可以看出有一个问题,列的类型只能用数字来标识,这与javasqlTypes相对应,我们可以通过一下的程序来获得字符串的形式:
String getTypeName(int type) throws SQLException {
switch (type) {
case TypesARRAY:
break;
case TypesBIGINT:
return "BIGINT";
case TypesBINARY:
return "BINARY";
case TypesBIT:
return "BIT";
case TypesBLOB:
return "BLOB";
case TypesBOOLEAN:
return "BOOLEAN";
//
}
由以上可知,该类的方法有限,也只能获得列名和列的类型的信息,关于索引和约束等也没有涉及
1、在后台写一个JDBC方法,从数据库中查询出数据来,封装到一个集合中,比如List或Map,然后放到request中,在前台直接从request获取即可。
2、直接在前台写一个JDBC *** 作的脚本方法,从数据库中查询出数据,封装到集合中,然后根据需要迭代显示。
Java获取数据库的表中各字段的字段名,代码如下:
import javasqlConnection;import javasqlDriverManager;
import javasqlResultSet;
import javasqlPreparedStatement;
import javasqlResultSetMetaData;
import javasqlSQLException;
public class TestDemo {
public static Connection getConnection() {
Connection conn = null;
try {
ClassforName("commysqljdbcDriver");
String url = "jdbc:mysql://数据库IP地址:3306/数据库名称";
String user = "数据库用户名";
String pass = "数据库用户密码";
conn = DriverManagergetConnection(url, user, pass);
} catch (ClassNotFoundException e) {
eprintStackTrace();
} catch (SQLException e) {
eprintStackTrace();
}
return conn;
}
public static void main(String[] args) {
Connection conn = getConnection();
String sql = "select from AccessType";
PreparedStatement stmt;
try {
stmt = connprepareStatement(sql);
ResultSet rs = stmtexecuteQuery(sql);
ResultSetMetaData data = rsgetMetaData();
for (int i = 1; i <= datagetColumnCount(); i++) {
// 获得所有列的数目及实际列数
int columnCount = datagetColumnCount();
// 获得指定列的列名
String columnName = datagetColumnName(i);
// 获得指定列的列值
int columnType = datagetColumnType(i);
// 获得指定列的数据类型名
String columnTypeName = datagetColumnTypeName(i);
// 所在的Catalog名字
String catalogName = datagetCatalogName(i);
// 对应数据类型的类
String columnClassName = datagetColumnClassName(i);
// 在数据库中类型的最大字符个数
int columnDisplaySize = datagetColumnDisplaySize(i);
// 默认的列的标题
String columnLabel = datagetColumnLabel(i);
// 获得列的模式
String schemaName = datagetSchemaName(i);
// 某列类型的精确度(类型的长度)
int precision = datagetPrecision(i);
// 小数点后的位数
int scale = datagetScale(i);
// 获取某列对应的表名
String tableName = datagetTableName(i);
// 是否自动递增
boolean isAutoInctement = dataisAutoIncrement(i);
// 在数据库中是否为货币型
boolean isCurrency = dataisCurrency(i);
// 是否为空
int isNullable = dataisNullable(i);
// 是否为只读
boolean isReadOnly = dataisReadOnly(i);
// 能否出现在where中
boolean isSearchable = dataisSearchable(i);
Systemoutprintln(columnCount);
Systemoutprintln("获得列" + i + "的字段名称:" + columnName);
Systemoutprintln("获得列" + i + "的类型,返回SqlType中的编号:"+ columnType);
Systemoutprintln("获得列" + i + "的数据类型名:" + columnTypeName);
Systemoutprintln("获得列" + i + "所在的Catalog名字:"+ catalogName);
Systemoutprintln("获得列" + i + "对应数据类型的类:"+ columnClassName);
Systemoutprintln("获得列" + i + "在数据库中类型的最大字符个数:"+ columnDisplaySize);
Systemoutprintln("获得列" + i + "的默认的列的标题:" + columnLabel);
Systemoutprintln("获得列" + i + "的模式:" + schemaName);
Systemoutprintln("获得列" + i + "类型的精确度(类型的长度):" + precision);
Systemoutprintln("获得列" + i + "小数点后的位数:" + scale);
Systemoutprintln("获得列" + i + "对应的表名:" + tableName);
Systemoutprintln("获得列" + i + "是否自动递增:" + isAutoInctement);
Systemoutprintln("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
Systemoutprintln("获得列" + i + "是否为空:" + isNullable);
Systemoutprintln("获得列" + i + "是否为只读:" + isReadOnly);
Systemoutprintln("获得列" + i + "能否出现在where中:"+ isSearchable);
}
} catch (SQLException e) {
eprintStackTrace();
}
}
}
以上就是关于Spring JdbcTemplate怎样获得表中的所有字段全部的内容,包括:Spring JdbcTemplate怎样获得表中的所有字段、jsp页面前台用jdbc如何获取sql数据库里的数据。、java如何获得数据库表中各字段的字段名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)