java - 如何修复 "unreported exception InstantiationException; must be caught or declared to be thrown"

标签 java mysql jdbc connector-j

<分区>

我正在 NetBeans 8.1 中构建一个简单的 HelloWorld 应用程序。 它必须工作简单,一旦编译和运行,它将使用 MySQL 加载数据库帐户中表 acc 的所有数据。

我已将 Connector/J jar 文件包含在我的项目库中并与 MySQL 建立了连接,但 Class.forName(com.mysql.jdbc.Driver).newInstance();一段代码中的行显示“未报告的异常 InstantiationException;必须被捕获或声明为抛出”,我完全不知道该怎么做。我有点被困在这里。

这是我的代码

package learning_jdbc;

import java.sql.*;

public class Hello {
    Connection connection;
    private void displaySQLErrors(SQLException e) {
        System.out.println("SQLException: " + e.getMessage());
        System.out.println("SQLState: " + e.getSQLState());
        System.out.println("VendorError: " + e.getErrorCode());
    }

    public Hello() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found.");
        }
    }

    public void connectToDB() {
        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/accounts","root","thejoker");
        } catch(SQLException e) {
            displaySQLErrors(e);
        }
    }

    public void executeSQL() {
        try (Statement statement = connection.createStatement();
                    ResultSet rs = statement.executeQuery("SELECT * FROM acc")) {
            while (rs.next()) {
                System.out.println(rs.getString(1));
            }
            connection.close();
        } catch(SQLException e) {
            displaySQLErrors(e);
        }
    }

    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.connectToDB();
        hello.executeSQL();
    }

}

最佳答案

如果您调用 .newInstance(),被调用的构造函数可能会抛出一些异常。由于这是通过反射进行的,因此不知道该构造函数是否抛出已检查异常,反射 .newInstance() 调用无论如何都会抛出已检查异常,您必须处理构造函数的情况可能抛出异常。

但是为什么要执行 .newInstance() 调用呢?据我所知,一个 Class.forName 应该足够了,因为然后类被加载并且它的静态初始化程序将在 DriverManager 中注册该类。

关于java - 如何修复 "unreported exception InstantiationException; must be caught or declared to be thrown",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36955462/

相关文章:

Spring @Transactional 和 JDBC 自动提交

java - 登录页面输入正确的用户名和密码

java - 对象 B 属于对象 A

php - MySQL:快速字数统计

mysql - 删除交叉引用数据

php - 当总行数超过一个数字时,从表中删除所有行

tomcat - 在所有 servlet 之间共享 JDBC 数据源连接

java - 任何类的实例作为java中方法的输入

java - 错误 - trustAnchors 参数必须非空

java - 在java程序中获取SVN工作副本的当前修订号