📜  如何使用JDBC获取表列的数据类型?

📅  最后修改于: 2022-05-13 01:54:33.525000             🧑  作者: Mango

如何使用JDBC获取表列的数据类型?

Java支持许多数据库,对于每个数据库,我们需要将它们各自的 jar 文件放置在构建路径中以进行 JDBC 连接。

  • MySQL : mysql-connector-java-8.0.22 或具有不同版本的类似 mysql 连接器。在本文中,我们使用 mysql-connector-java-8.0.22
  • SQL 服务器:sqljdbc4.jar
  • 甲骨文:ojdbc14.jar
  • MongoDB (NoSQL 数据库):mongo-java-driver-3.12.7

首先,需要决定我们正在使用哪个数据库,因此,我们需要添加 jars。对于 Progress、Cassandra 等另一个数据库,我们也有 jars,需要将它们包含在构建路径中。对于来自 RDBMS(MySQL、SQL Server 等)的各种与数据处理相关的问题,我们有一个Java.sql 包。要获取ResultSetMetaData对象,我们需要按照以下步骤操作。

1.注册驱动

对于数据库而言,它有所不同。当我们使用 MySQL 时,我们可以通过

Class.forName("com.mysql.cj.jdbc.Driver");
or
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver");

2.获取MySQL的连接方式

  • test是代码中使用的数据库名称。
  • serverTimezone=UTC,如果未提供,我们将有Java.sql.SQLException。服务器时区值xxxx无法识别或代表多个时区。
  • 如果我们想利用时区支持,我们需要通过 serverTimezone 配置属性配置服务器或 JDBC 驱动程序以使用更具体的时区值。
  • 因此,无论是在 MySQL 配置中我们可以设置还是像下面一样,我们可以在此处提供凭据是 root/””,即用户名是 root,密码是“”。

3.创建语句对象

Statement st = connection.createStatement();

4. 执行查询

String query = "Select * from doctorsdetails";
// Executing the query
ResultSet resultSet = statement.executeQuery(query);

5. 获取 ResultSetMetaData 对象:

通过调用 getMetaData() 方法检索当前 ResultSet 的 ResultSetMetadata 对象。下面的方法存在于 ResultSetMetadata 对象中,它们被打印在程序中

  • int getColumnCount():返回表的列数。
  • String getColumnName(int columnNumber):返回索引号作为参数传递的列的名称。
  • int getColumnType(int columnNumber):将列名作为整数值返回,其索引号作为参数传递。

例如,3 表示 DECIMAL,12 表示 VARCHAR,4 表示 INT。

  • 12 表示为Java.sql.Types.VARCHAR
  • 4 表示为Java.sql.Types.INTEGER

以下是Java.sql.Type 的各种数据类型返回的值列表 - 即 getColumnType() 给出了这些结果。

  • 阵列:2003
  • 大整数:-5
  • 二进制:-2
  • 位:-7
  • 斑点:2004
  • 布尔值:16
  • 字符:1
  • 球:2005
  • 日期:91
  • 数据链:70
  • 十进制:3
  • 区别:2001
  • 双人:8
  • 浮动:6
  • 整数:4
  • Java对象:2000
  • 长 var 字符:-16
  • N字符:-15
  • NClob:2011
  • 变量:12
  • 二进制变量:-3
  • 小整数:-6
  • 带时区的时间戳:2014
  • 时间戳:93
  • 时间:92
  • 结构:2002
  • SqlXML:2009
  • 小数:5
  • 行数:-8
  • 参考文献:2012
  • 参考:2006
  • 真实:7
  • Nvarchar:-9
  • 数字:2
  • 空:0
  • 小数:5

让我们通过在 MySQL 中创建一个表来检查,并使用 ResultSetMetaData 查找数据类型

MySQL中的一个名为Doctordetails的表在测试数据库中可用,

CREATE TABLE `doctorsdetails` (
 `id` int(6) unsigned NOT NULL,
 `Name` varchar(50) DEFAULT NULL,
 `AvailableDays` varchar(200) DEFAULT NULL,
 `consultation_fees` int(11) DEFAULT NULL,
 `qualification` varchar(20) DEFAULT NULL,
 `experience` int(11) DEFAULT NULL,
 `gender` varchar(10) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

根据上表,上表各列的getColumnType()如下

ColumnNameColumnTypeValue
idint4
Namevarchar12
AvailableDays varchar12
consultation_fees int4
qualification varchar12
experience int4
gendervarchar12

在代码中,让我们使用步骤,它们作为注释给出

Java
// Java program to get the column type in JDBC
 
import java.sql.*;
 
public class GetColumnTypeInJdbc {
 
    public static void main(String[] args)
    {
        System.out.println(
            "Methods of column to get column type in JDBC");
        Connection con = null;
        try {
            // We need to have mysql-connector-java-8.0.22
            // or relevant jars in build path of project
            // Class.forName("com.mysql.jdbc.Driver");
            // //Earlier these were supported. If we use ,
            // we will be getting warning messages This
            // driver is the latest one
            // 1. Register the driver
 
            Class.forName("com.mysql.cj.jdbc.Driver");
 
            // 2. Get the connection
            con = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test?serverTimezone=UTC",
                "root", "");
            try {
 
                // Create statement so that we can execute
                // all of our queries
                // 3. Create a statement object
                Statement statement = con.createStatement();
 
                // Query to retrieve records
                String query
                    = "Select * from doctorsdetails";
 
                // 4. Executing the query
                ResultSet resultSet
                    = statement.executeQuery(query);
 
                // 5. Get the ResultSetMetaData object
                ResultSetMetaData resultSetMetaData
                    = resultSet.getMetaData();
 
                for (int i = 1;
                     i
                     <= resultSetMetaData.getColumnCount();
                     i++) {
                    System.out.println(
                        "ColumnName = "
                        + resultSetMetaData.getColumnName(
                              i));
                    System.out.println(
                        "ColumnType = "
                        + resultSetMetaData.getColumnType(i)
                        + "   ");
                    System.out.println(
                        "ColumnLabel = "
                        + resultSetMetaData.getColumnLabel(
                              i)
                        + "   ");
                    System.out.println(
                        "ColumnDisplaySize = "
                        + resultSetMetaData
                              .getColumnDisplaySize(i)
                        + "   ");
                    System.out.println(
                        "ColumnTypeName = "
                        + resultSetMetaData
                              .getColumnTypeName(i)
                        + "   ");
                    System.out.println(
                        "------------------");
                }
            }
 
            // in case of any SQL exceptions
            catch (SQLException s) {
                System.out.println(
                    "SQL statement is not executed!");
            }
        }
 
        // in case of general exceptions
        // other than SQLException
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            // After completing the operations, we
            // need to null resultSet and connection
            resultSet = null;
            con = null;
        }
    }
}


在执行程序时,我们将得到如下输出。即类似于上面显示的表值

表的列类型