gpt4 book ai didi

java - 为什么我不能在 JDBC 中分析 SHOW TABLES 结果?

转载 作者:行者123 更新时间:2023-11-29 02:18:05 27 4
gpt4 key购买 nike

以下代码导致异常 SQLException: Column index out of range.

import java.sql.*;

public class ListingTablesTest {

public static void main(String[] args) throws ClassNotFoundException, SQLException {


Connection conn = null;
Statement stmt = null;

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://localhost/library","java","");

stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SHOW TABLES;");

ResultSetMetaData md = rs.getMetaData();

String columnName = "";

for(int i=0; i<md.getColumnCount(); ++i) {
columnName = md.getColumnName(i);
System.out.println(String.format("Column #%d is %s", i, columnName));
}


int j = 0;
while(rs.next()){
System.out.println(String.format("Table #%d is %s", j, rs.getString(columnName)));
j++;
}

}
}

为什么?

更新

固定列编号后:

  for(int i=1; i<=md.getColumnCount(); ++i) {
columnName = md.getColumnName(i);
System.out.println(String.format("Column #%d is %s", i, columnName));
}

我有一个名为“TABLE_NAME”的列,这个名称在下一个循环中不起作用,提示 SQLException: Column 'TABLE_NAME' not found。

在 MySQL 控制台中,列名为 Tables_in_library,而不是 TABLE_NAME:

mysql> use library;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_library |
+-------------------+
| author |
+-------------------+
1 row in set (0.00 sec)

最佳答案

JDBC 中的列检索使用从 1 开始的索引。您正在尝试获取不存在的第 0 列。

你需要使用:

for (int i = 1; i <= md.getColumnCount(); i++) {
columnName = md.getColumnName(i);
System.out.println(String.format("Column #%d is %s", i, columnName));
}

你问题的第二部分是重复的 The method getColumnName in ResultSetMeta can't return right name of column (jdbc) (TL;DR 版本:您需要使用 getColumnLabel(..) 而不是 getColumnName(..))。

关于java - 为什么我不能在 JDBC 中分析 SHOW TABLES 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203048/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com