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

时间:2013-12-11 18:49:12

标签: java database netbeans

我对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());
        }
    }
}

这是我的服务面板的样子:

Click to view Image

这是我的输出:

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

起初我觉得我只是有一些错字,但仔细看过去我找不到它。我尝试安装新的JDBC驱动程序,但这似乎也没有帮助。我正在运行Windows 8笔记本电脑,我打开了telnet客户端。我在这一点上最好的猜测是,我在某种程度上错过了初始设置中的一个步骤,但我找不到要回去修复它。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

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

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

  1. 找到derbyclient.jar,例如使用资源管理器
  2. 在Netbeans中
  3. ,右键单击“项目”窗格中的项目节点。
  4. 选择“属性”,然后选择库
  5. 点击“添加JAR /文件夹”,导航至derbyclient.jar
  6. 有效地将jar添加到您的项目中。只需重新编译,运行,一切都应按预期工作。

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

        } 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();
        }
    

    堆栈跟踪不仅会显示错误发生的确切行,还会显示异常的轨迹(程序如何到达),在更复杂的程序中非常有用。绝对是你想要学习使用的东西!

    有关堆栈跟踪的大量信息:What is a stack trace, and how can I use it to debug my application errors?

答案 1 :(得分:1)

我认为你真正拥有的只是一个排序问题。 Class.forName调用使用DriverManager注册驱动程序(我认为)。这需要在尝试通过DriverManager建立连接之前发生。

Class.forName( "org.apache.derby.jdbc.ClientDriver" ).newInstance();
Connection conn = DriverManager.getConnection( data, "app", "APP");

如果这给你一些“ClassNotFound”异常,那么fvu断言你在类路径上没有Derby JDBC Jar是你的下一个问题。

Derby文档有一个例子:http://db.apache.org/derby/integrate/plugin_help/derby_app.html