Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
首次连接到Netbeans SQL数据库-java.SQL.SQLException:未找到合适的驱动程序0 08001_Java_Database_Netbeans - Fatal编程技术网

首次连接到Netbeans SQL数据库-java.SQL.SQLException:未找到合适的驱动程序0 08001

首次连接到Netbeans SQL数据库-java.SQL.SQLException:未找到合适的驱动程序0 08001,java,database,netbeans,Java,Database,Netbeans,我对Java相当陌生,所以我买了一本书来学习。在我进入SQL一章之前,一切都进行得很顺利。我正在使用示例数据库在NetBeans中工作,但无法使数据库与程序连接 以下是我从书中忠实复制的代码: import java.sql.*; public class SysTableReporter { public static void main(String[] arguments) { String data = "jdbc:derby://localhost:1527/

我对Java相当陌生,所以我买了一本书来学习。在我进入SQL一章之前,一切都进行得很顺利。我正在使用示例数据库在NetBeans中工作,但无法使数据库与程序连接

以下是我从书中忠实复制的代码:

import java.sql.*;

public class SysTableReporter {
    public static void main(String[] arguments) {
        String data = "jdbc:derby://localhost:1527/sample";
        try (
            Connection conn = DriverManager.getConnection(
                    data, "app", "APP");
            Statement st = conn.createStatement()) {
                System.out.println("TABLEID:\t" );

            Class.forName("org.apache.derby.jdbc.ClientDriver");

            ResultSet rec = st.executeQuery(
                    "select * " + 
                    "from SYS.SYSTABLES " + 
                    "order by TABLENAME");
            while(rec.next()) {
                System.out.println("TABLEID:\t" + rec.getString(1));
                System.out.println("TABLENAME:\t" + rec.getString(2));
                System.out.println("TABLETYPE:\t" + rec.getString(3));
                System.out.println("SCHEMAID:\t" + rec.getString(4));
                System.out.println();
            }
            st.close();
        } catch (SQLException s) {
            System.out.println("SQL Error: " + s.toString() + " " 
                    + s.getErrorCode() + " " + s.getSQLState());
        } catch (Exception e) {
            System.out.println("Error: " + e.toString() + e.getMessage());
        }
    }
}
以下是“我的服务”面板的外观:

以下是我的输出:

SQL Error: java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/sample 0 08001

起初我以为我只是有一些打字错误,但仔细看了看,我找不到。我尝试安装一个新的JDBC驱动程序,但这似乎也没有帮助。我正在运行一台Windows8笔记本电脑,我已经打开了telnet客户端。在这一点上,我最好的猜测是,我在初始设置中不知何故错过了一个步骤,但我无法找到它来返回并修复它。任何帮助都很好。

您可能只是缺少了项目库部分中的Derby JDBC驱动程序jar(我假设您创建了一个标准的Netbeans项目,而不是Maven类型的项目)。这个jar称为derbyclient.jar

解决此问题的最简单方法是:

  • 使用资源管理器查找derbyclient.jar eg
  • 在Netbeans中,右键单击项目窗格中的项目节点
  • 选择属性,然后选择库
  • 单击“添加JAR/文件夹”,导航到derbyclient.JAR
  • 这将有效地将jar添加到您的项目中。只要重新编译、运行,一切都应该按预期进行

    编辑:除了@BobKuhar的发现之外,给定代码的另一个问题是它没有使用Java更强大的调试机制stacktrace。在最基本的形式上,在屏幕上显示它们很简单,不超过

        } catch (SQLException s) {
            System.out.println("SQL Error: " + s.toString() + " " 
                    + s.getErrorCode() + " " + s.getSQLState());
            // and show us the stacktrace
            s.printStackTrace();
        } catch (Exception e) {
            System.out.println("Error: " + e.toString() + e.getMessage());
            // and show us the stacktrace
            e.printStackTrace();
        }
    
    堆栈跟踪不仅会向您显示错误发生的确切位置,还会显示异常的轨迹(程序是如何到达的),这在更复杂的程序中非常重要。绝对是你想要学习使用的东西


    这里有很多关于堆栈跟踪的信息:

    我认为您真正遇到的只是排序问题。forName调用将驱动程序注册到DriverManager(我想)。这需要在尝试通过DriverManager建立连接之前进行

    Class.forName( "org.apache.derby.jdbc.ClientDriver" ).newInstance();
    Connection conn = DriverManager.getConnection( data, "app", "APP");
    
    如果这给了您一些“ClassNotFound”异常,那么fvu关于类路径上没有Derby JDBC Jar的断言就是下一个问题


    Derby文档有一个例子:

    +1个漂亮的捕获。现在,如果代码是像书中那样逐字逐句的,那么最好去掉这本书:)