如何使用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,密码是“”。
Connection connection = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test?serverTimezone=UTC”, “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()如下ColumnName ColumnType Value id int 4 Name varchar 12 AvailableDays varchar 12 consultation_fees int 4 qualification varchar 12 experience int 4 gender varchar 12
在代码中,让我们使用步骤,它们作为注释给出
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;
}
}
}
在执行程序时,我们将得到如下输出。即类似于上面显示的表值