Spring JdbcTemplate怎样获得表中的所有字段

Spring JdbcTemplate怎样获得表中的所有字段,第1张

一、 通过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如何获得数据库表中各字段的字段名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10077095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存