java.sql.SQLException: No suitable driver 在线等...

mathematical 2010-11-17 07:43:18
1.mysql-connector-java-5.1.13-bin.jar路径添写入classpath
2.mysql-connector-java-5.1.13-bin.jar复制粘贴到jdk\jre\lib\ext下
以上两种方法都尝试了,解决不了,而且我已看贴无数,折腾半天了
以下是书上的一段代码(就一个普通的类),前段时间能运行出来(当时用的是5.1.7的connector/J),今天就编译错误了,下了个最新的(5.1.13版)还是不行


import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

public class DisplayAuthors
{
// database URL
static final String DATABASE_URL = "jdbc:mysql://localhost/books";

// launch the application
public static void main( String args[] )
{
Connection connection = null; // manages connection
Statement statement = null; // query statement
ResultSet resultSet = null; // manages results

// connect to database books and query database
try
{
// establish connection to database
connection = DriverManager.getConnection(
DATABASE_URL, "javafp", "javafp" );

// create Statement for querying database
statement = connection.createStatement();

// query database
resultSet = statement.executeQuery(
"SELECT authorID, firstName, lastName FROM authors" );

// process query results
ResultSetMetaData metaData = resultSet.getMetaData();
int numberOfColumns = metaData.getColumnCount();
System.out.println( "Authors Table of Books Database:\n" );

for ( int i = 1; i <= numberOfColumns; i++ )
System.out.printf( "%-8s\t", metaData.getColumnName( i ) );
System.out.println();

while ( resultSet.next() )
{
for ( int i = 1; i <= numberOfColumns; i++ )
System.out.printf( "%-8s\t", resultSet.getObject( i ) );
System.out.println();
} // end while
} // end try
catch ( SQLException sqlException )
{
sqlException.printStackTrace();
} // end catch
finally // ensure resultSet, statement and connection are closed
{
try
{
resultSet.close();
statement.close();
connection.close();
} // end try
catch ( Exception exception )
{
exception.printStackTrace();
} // end catch
} // end finally
} // end main
} // end class DisplayAuthors


错误提示:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:545)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at DisplayAuthors.main(DisplayAuthors.java:26)
java.lang.NullPointerException
at DisplayAuthors.main(DisplayAuthors.java:60)
...全文
210 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zerolin1988 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huntor 的回复:]
Java code
unzip -l mysql-connector-java-5.1.13-bin.jar | grep META
0 06-23-10 17:38 META-INF/
2182 06-23-10 17:38 META-INF/MANIFEST.MF
0 06-23-10 17:38 META-INF/servi……
[/Quote]

学习了
huntor 2010-11-17
  • 打赏
  • 举报
回复
unzip -l mysql-connector-java-5.1.13-bin.jar | grep META
0 06-23-10 17:38 META-INF/
2182 06-23-10 17:38 META-INF/MANIFEST.MF
0 06-23-10 17:38 META-INF/services/
21 06-23-10 17:38 META-INF/services/java.sql.Driver
463 06-23-10 17:38 META-INF/INDEX.LIST

[Quote]自动加载驱动

在 JDBC 4.0 之前,编写 JDBC 程序都需要加上以下这句有点丑陋的代码:

清单 7. 注册 JDBC 驱动


Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();


Java.sql.DriverManager 的内部实现机制决定了这样代码的出现。只有先通过 Class.forName 找到特定驱动的 class 文件,DriverManager.getConnection 方法才能顺利地获得 Java 应用和数据库的连接。这样的代码为编写程序增加了不必要的负担,JDK 的开发者也意识到了这一点。从 Java 6 开始,应用程序不再需要显式地加载驱动程序了,DriverManager 开始能够自动地承担这项任务。作为试验,我们可以将 清单 1 中的相关代码删除,重新编译后在 JRE 6.0 下运行,结果和原先的程序一样。

好奇的读者也许会问,DriverManager 为什么能够做到自动加载呢?这就要归功于一种被称为 Service Provider 的新机制。熟悉 Java 安全编程的程序员可能对其已经是司空见惯,而它现在又出现在 JDBC 模块中。JDBC 4.0 的规范规定,所有 JDBC 4.0 的驱动 jar 文件必须包含一个 java.sql.Driver,它位于 jar 文件的 META-INF/services 目录下。这个文件里每一行便描述了一个对应的驱动类。其实,编写这个文件的方式和编写一个只有关键字(key)而没有值(value)的 properties 文件类似。同样地,‘#’之后的文字被认为是注释。有了这样的描述,DriverManager 就可以从当前在 CLASSPATH 中的驱动文件中找到,它应该去加载哪些类。而如果我们在 CLASSPATH 里没有任何 JDBC 4.0 的驱动文件的情况下,调用 清单 8 中的代码会输出一个 sun.jdbc.odbc.JdbcOdbcDriver 类型的对象。而仔细浏览 JDK 6 的目录,这个类型正是在 %JAVA_HOME%/jre/lib/resources.jar 的 META-INF/services 目录下的 java.sql.Driver 文件中描述的。也就是说,这是 JDK 中默认的驱动。而如果开发人员想使得自己的驱动也能够被 DriverManager 找到,只需要将对应的 jar 文件加入到 CLASSPATH 中就可以了。当然,对于那些 JDBC 4.0 之前的驱动文件,我们还是只能显式地去加载了。[/Quote]
genguyige 2010-11-17
  • 打赏
  • 举报
回复
楼上正解 我居然把这个给搞忘了 呵呵
zerolin1988 2010-11-17
  • 打赏
  • 举报
回复
没有加载驱动....请看华丽的分割线..


public static void main( String args[] )
{
Connection connection = null; // manages connection
Statement statement = null; // query statement
ResultSet resultSet = null; // manages results

// connect to database books and query database
try
{
//--------------华丽的分割线--------------
Class.forName("com.mysql.jdbc.Driver");

// establish connection to database
connection = DriverManager.getConnection(
DATABASE_URL, "javafp", "javafp" );

// create Statement for querying database
statement = connection.createStatement();

// query database
resultSet = statement.executeQuery(
"SELECT authorID, firstName, lastName FROM authors" );
......
genguyige 2010-11-17
  • 打赏
  • 举报
回复
想问以下 你有用myeclipse吗 如果用了 建议你把那个jar包放到myeclipse的lib文件夹下试试

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧