我对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驱动程序,但这似乎也没有帮助。我正在运行Windows 8笔记本电脑,我打开了telnet客户端。我在这一点上最好的猜测是,我在某种程度上错过了初始设置中的一个步骤,但我找不到要回去修复它。任何帮助都会很棒。
答案 0 :(得分:2)
您可能只是缺少项目库部分中的Derby JDBC驱动程序jar(我假设您创建了一个标准的Netbeans项目,而不是Maven类型的项目)。 jar被称为derbyclient.jar。
解决此问题的最简单方法:
有效地将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