需求:给定数据库信息和表名,扫描表的字段名、字段类型和注释。

要使用Java JDBC获取数据库表名、字段名和注释信息,你需要连接到数据库并执行适当的SQL查询。以下是一些示例代码,展示如何获取这些信息。请注意,这些示例代码假定你已经建立了数据库连接。你需要根据你的数据库类型和连接方式进行适当的修改。

注:数据库可以是Oracle、Mysql、DB2、SqlServer等。

解决方法:利用JDBC的DatabaseMetaData来获取数据库的元信息。

用法如下:

package util; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Properties; public class DbInfoUtil {/** * 根据数据库的连接参数,获取指定表的基本信息:字段名、字段类型、字段注释 * @param driver 数据库连接驱动 * @param url 数据库连接url * @param user数据库登陆用户名 * @param pwd 数据库登陆密码 * @param table表名 * @return Map集合 */public static List getTableInfo(String driver,String url,String user,String pwd,String table){List result = new ArrayList();Connection conn = null;DatabaseMetaData dbmd = null;try {conn = getConnections(driver,url,user,pwd);dbmd = conn.getMetaData();ResultSet resultSet = dbmd.getTables(null, "%", table, new String[] { "TABLE" });while (resultSet.next()) {String tableName=resultSet.getString("TABLE_NAME");System.out.println(tableName);if(tableName.equals(table)){ResultSet rs = conn.getMetaData().getColumns(null, getSchema(conn),tableName.toUpperCase(), "%"); while(rs.next()){//System.out.println("字段名:"+rs.getString("COLUMN_NAME")+"--字段注释:"+rs.getString("REMARKS")+"--字段数据类型:"+rs.getString("TYPE_NAME"));Map map = new HashMap();String colName = rs.getString("COLUMN_NAME");map.put("code", colName);String remarks = rs.getString("REMARKS");if(remarks == null || remarks.equals("")){remarks = colName;}map.put("name",remarks);String dbType = rs.getString("TYPE_NAME");map.put("dbType",dbType);map.put("valueType", changeDbType(dbType));result.add(map);}}}} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally{try {conn.close();} catch (SQLException e) {e.printStackTrace();}}return result;}private static String changeDbType(String dbType) {dbType = dbType.toUpperCase();switch(dbType){case "VARCHAR":case "VARCHAR2":case "CHAR":return "1";case "NUMBER":case "DECIMAL":return "4";case "INT":case "SMALLINT":case "INTEGER":return "2";case "BIGINT":return "6";case "DATETIME":case "TIMESTAMP":case "DATE":return "7";default:return "1";}} //获取连接private static Connection getConnections(String driver,String url,String user,String pwd) throws Exception {Connection conn = null;try {Properties props = new Properties();props.put("remarksReporting", "true");props.put("user", user);props.put("password", pwd);Class.forName(driver);conn = DriverManager.getConnection(url, props);} catch (Exception e) {e.printStackTrace();throw e;}return conn;}//其他数据库不需要这个方法 oracle和db2需要private static String getSchema(Connection conn) throws Exception {String schema;schema = conn.getMetaData().getUserName();if ((schema == null) || (schema.length() == 0)) {throw new Exception("ORACLE数据库模式不允许为空");}return schema.toUpperCase().toString(); } 

执行main测试函数:

public static void main(String[] args) {//这里是Oracle连接方法String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@192.168.11.11:1521:orcl";String user = "bdc";String pwd = "bdc123";//String table = "FZ_USER_T";String table = "FZ_USER_T";//mysql/*String driver = "com.mysql.jdbc.Driver";String user = "root";String pwd = "123456";String url = "jdbc:mysql://localhost/onlinexam"+ "?useUnicode=true&characterEncoding=UTF-8";String table = "oe_student";*/List list = getTableInfo(driver,url,user,pwd,table);System.out.println(list);}}

注意:获取注释信息的可移植性有限,因为不同的数据库管理系统可能以不同的方式存储注释。有些数据库可能不会存储列注释。在这种情况下,你可能需要查阅数据库文档,了解如何获取列注释信息。

确保将代码中的数据库连接部分替换为你实际使用的数据库连接方式。此外,确保在使用JDBC之前,你已经引入了适当的数据库驱动程序。

此工具类无需修改,适用于Oracle、Mysql、DB2、SqlServer数据库。