学习web开发的时候遇到了异常com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 困扰好长时间,百度之后看到有前辈总结数据库的异常,才找到是配置文件的主机名写错了,果断转载。
原文:http://linglxia.iteye.com/blog/1154189
1. 要使用数据库,首先还是要连接数据库的。
连接数据库的步骤:
1加载驱动程序 2.创建指定数据库的URL 才能取得数据库连接对象。
就这个连接老犯错。
2. 这里列几个常犯的错误
①没有引入外部mysql-connector-java-bin.jar包
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver (没有找到这个类)
at java.net.URLClassLoader$1.run(Unknown Source)……
所以在创建工程后,需要引入jar包
②.若加载驱动时,将com.mysql.jdbc.Driver写成com.mysql.jdbc.driver
java.lang.ClassNotFoundException: com.mysql.jdbc.driver
at java.net.URLClassLoader$1.run(Unknown Source)……
注意,以上两个报的是一样的异常
② .端口错误或者服务器没有启动
驱动不存在。。。。
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection refused: connect
STACKTRACE:
java.net.ConnectException: Connection refused: connect……
③ .主机localhost写错
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION **
java.net.UnknownHostException
MESSAGE: locahost(很明显的错误)
STACKTRACE:
java.net.UnknownHostException: locahost(未知的主机号)这个错误还好解决,提示很明显的。
④.加载驱动时,将com.mysql.jdbc.Driver 写成了com.mysql..jdbc.Driver
java.lang.ClassNotFoundException: com/mysql//jdbc/Driver (错误在这里得到提示)
at java.lang.Class.forName0(Naticve Method)
at java.lang.Class.forName(Unknown Source)
驱动不存在。。。。
⑤ 将数据库名写错(如test->tests)使用的是不存在的数据库
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown database 'tests'(提示是未知的数据库)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)……
驱动不存在。。。。
⑥.用户名或者密码错误
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
可以直接检查这两个是哪个的错误
⑦.数据库的url写错。如将
String url="jdbc:mysql:/localhost:3306/test"; 写成了 String url="jdbc:mysql://localhost:3306/test";
错误提示:
java.sql.SQLException: No suitable driver found for jdbc:mysql:/localhost:3306/test驱动不存在。。。。
⑧.表名错误(数据库test中的stusinfo表不存在)
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'test.stusinfo' doesn't exist
⑨.列名错误(age写成了ag,ag是不存在的)
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'ag' in 'field list'
⑩.当取得数据库的结果集时,要获取的列号 6 大于数据库中的总列数5
java.sql.SQLException: Column Index out of range, 6 > 5.
at com.mysql.jdbc.SQLError.createSQLException
(SQLError.java:910)