如何使用Java统计Access数据表的字段数量?
获取Access数据表字段数量的Java实现修正
先修正你代码里的两处基础错误:
- 变量
data声明为int却赋值字符串,应该初始化为int data = 0; PreparedStatement的executeQuery()不需要传入SQL参数,直接调用无参方法即可,否则会触发参数不匹配的异常。
接下来实现获取字段数量的逻辑:通过ResultSet的getMetaData()方法获取结果集元数据,再调用getColumnCount()就能得到数据表的字段总数。
修正后的完整代码如下:
package DatabaseEditor; import java.sql.*; public class DatabaseOptions { Connection con; String url = "jdbc:ucanaccess://databases\\Saves.mdb"; public int getFields() { int data = 0; // 修正类型匹配问题 try { con = DriverManager.getConnection(url); String sql = "SELECT * FROM Workers"; PreparedStatement stat = con.prepareStatement(sql); ResultSet rs = stat.executeQuery(); // 修正executeQuery调用方式 // 获取字段数量的逻辑 ResultSetMetaData metaData = rs.getMetaData(); data = metaData.getColumnCount(); // 手动关闭资源 rs.close(); stat.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return data; } }
额外建议:使用try-with-resources语法自动关闭数据库连接、Statement和ResultSet,避免手动关闭时遗漏导致的资源泄漏,优化后的代码更安全简洁:
package DatabaseEditor; import java.sql.*; public class DatabaseOptions { String url = "jdbc:ucanaccess://databases\\Saves.mdb"; public int getFields() { int data = 0; try (Connection con = DriverManager.getConnection(url); PreparedStatement stat = con.prepareStatement("SELECT * FROM Workers"); ResultSet rs = stat.executeQuery()) { ResultSetMetaData metaData = rs.getMetaData(); data = metaData.getColumnCount(); } catch (Exception e) { e.printStackTrace(); } return data; } }
内容的提问来源于stack exchange,提问作者youssif farid
相关产品推荐
相关产品推荐

