JDBC 程序的常見(jiàn)錯(cuò)誤及調(diào)試方法
更新時(shí)間:2009年06月04日 17:44:15 作者:
本文是《Java Web開(kāi)發(fā)教程——入門(mén)與提高篇(JSP+Servlet)》一書(shū)《第9章 JDBC技術(shù)》的補(bǔ)充內(nèi)容。
數(shù)據(jù)庫(kù):MySQL
在編寫(xiě)應(yīng)用的時(shí)候,為了調(diào)試程序方便,可以在異常處理代碼中把異常信息顯示出來(lái),這樣可以根據(jù)錯(cuò)誤提示調(diào)試代碼。異常處理代碼通常可以寫(xiě)成這樣:
try{
…
}catch(Exception e){
System.out.println(e.toString());
}
下面是一些常見(jiàn)的錯(cuò)誤信息:
(1)驅(qū)動(dòng)程序不存在
提示的錯(cuò)誤信息如下:
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
后半部分是您在程序中寫(xiě)的驅(qū)動(dòng)程序的名字。
解決方法:仔細(xì)檢查類(lèi)名是否寫(xiě)錯(cuò),如果類(lèi)名沒(méi)有寫(xiě)錯(cuò),則是驅(qū)動(dòng)程序所在的壓縮包沒(méi)有引入工程,想辦法引入。
(2)URL寫(xiě)錯(cuò)
提示的錯(cuò)誤信息如下:
java.sql.SQLException: No suitable driver
解決方法:仔細(xì)檢查URL的格式是否正確,不同數(shù)據(jù)庫(kù)的URL格式不同。
(3)主機(jī)IP地址不正確或者網(wǎng)絡(luò)不通
提示的錯(cuò)誤信息如下:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection timed out: connect
STACKTRACE:
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)
at com.mysql.jdbc.Connection.<init>(Connection.java:393)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test.JDBCTest.oracleTest(JDBCTest.java:25)
at test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看IP地址是否正確,網(wǎng)絡(luò)是否有問(wèn)題。
(4)端口錯(cuò)誤或者數(shù)據(jù)庫(kù)服務(wù)器沒(méi)有啟動(dòng)
提示的錯(cuò)誤信息如下:
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
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)
at com.mysql.jdbc.Connection.<init>(Connection.java:393)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test.JDBCTest.oracleTest(JDBCTest.java:25)
at test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看端口是否正確,數(shù)據(jù)庫(kù)服務(wù)器是否啟動(dòng)。
(5)數(shù)據(jù)庫(kù)名字不正確
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Unknown database 'test2'
解決方法:查看數(shù)據(jù)庫(kù)是否存在。
(6)用戶(hù)名或者口令不正確
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Access denied for user 'roo'@'localhost' (using password: YES)
解決方法:確認(rèn)用戶(hù)名和口令是否正確。
(7)表名錯(cuò)誤
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Table 'test.student1' doesn't exist
解決方法:查看表是否存在,表名是否寫(xiě)錯(cuò)。
(8)列名錯(cuò)誤
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Unknown column 'sid' in 'field list'
解決方案:仔細(xì)查看數(shù)據(jù)庫(kù)表中的列名。
(9)處理結(jié)果集的時(shí)候,要獲取的列的序號(hào)大于列數(shù),或者小于0
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Column Index out of range, 4 > 3.
這個(gè)錯(cuò)誤產(chǎn)生的背景是:數(shù)據(jù)庫(kù)表中只有3列,而在取信息的時(shí)候使用了rs.getString(4),尤其是在使用循環(huán)處理的時(shí)候容易犯這樣的錯(cuò)誤。
(10)執(zhí)行insert語(yǔ)句的時(shí)候,表中的列數(shù)與插入語(yǔ)句中的不相同
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Column count doesn't match value count at row 1
該錯(cuò)誤產(chǎn)生的背景是:數(shù)據(jù)庫(kù)表中有3列,而插入的時(shí)候給了4個(gè)值,SQL語(yǔ)句如下:
insert into student values('0011323','李旭',22,99)。
(11)執(zhí)行insert語(yǔ)句的時(shí)候,主鍵重復(fù)。
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Duplicate entry '0011323' for key 1
該錯(cuò)誤產(chǎn)生的背景是:1條SQL語(yǔ)句連續(xù)執(zhí)行了兩遍,第二遍就出錯(cuò)了。
(12)執(zhí)行insert語(yǔ)句的時(shí)候,值過(guò)長(zhǎng)
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Data too long for column 'id' at row 1
解決方案,查看數(shù)據(jù)庫(kù)中列的長(zhǎng)度。
在編寫(xiě)應(yīng)用的時(shí)候,為了調(diào)試程序方便,可以在異常處理代碼中把異常信息顯示出來(lái),這樣可以根據(jù)錯(cuò)誤提示調(diào)試代碼。異常處理代碼通常可以寫(xiě)成這樣:
try{
…
}catch(Exception e){
System.out.println(e.toString());
}
下面是一些常見(jiàn)的錯(cuò)誤信息:
(1)驅(qū)動(dòng)程序不存在
提示的錯(cuò)誤信息如下:
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
后半部分是您在程序中寫(xiě)的驅(qū)動(dòng)程序的名字。
解決方法:仔細(xì)檢查類(lèi)名是否寫(xiě)錯(cuò),如果類(lèi)名沒(méi)有寫(xiě)錯(cuò),則是驅(qū)動(dòng)程序所在的壓縮包沒(méi)有引入工程,想辦法引入。
(2)URL寫(xiě)錯(cuò)
提示的錯(cuò)誤信息如下:
java.sql.SQLException: No suitable driver
解決方法:仔細(xì)檢查URL的格式是否正確,不同數(shù)據(jù)庫(kù)的URL格式不同。
(3)主機(jī)IP地址不正確或者網(wǎng)絡(luò)不通
提示的錯(cuò)誤信息如下:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection timed out: connect
STACKTRACE:
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)
at com.mysql.jdbc.Connection.<init>(Connection.java:393)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test.JDBCTest.oracleTest(JDBCTest.java:25)
at test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看IP地址是否正確,網(wǎng)絡(luò)是否有問(wèn)題。
(4)端口錯(cuò)誤或者數(shù)據(jù)庫(kù)服務(wù)器沒(méi)有啟動(dòng)
提示的錯(cuò)誤信息如下:
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
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)
at com.mysql.jdbc.Connection.<init>(Connection.java:393)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test.JDBCTest.oracleTest(JDBCTest.java:25)
at test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看端口是否正確,數(shù)據(jù)庫(kù)服務(wù)器是否啟動(dòng)。
(5)數(shù)據(jù)庫(kù)名字不正確
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Unknown database 'test2'
解決方法:查看數(shù)據(jù)庫(kù)是否存在。
(6)用戶(hù)名或者口令不正確
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Access denied for user 'roo'@'localhost' (using password: YES)
解決方法:確認(rèn)用戶(hù)名和口令是否正確。
(7)表名錯(cuò)誤
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Table 'test.student1' doesn't exist
解決方法:查看表是否存在,表名是否寫(xiě)錯(cuò)。
(8)列名錯(cuò)誤
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Unknown column 'sid' in 'field list'
解決方案:仔細(xì)查看數(shù)據(jù)庫(kù)表中的列名。
(9)處理結(jié)果集的時(shí)候,要獲取的列的序號(hào)大于列數(shù),或者小于0
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Column Index out of range, 4 > 3.
這個(gè)錯(cuò)誤產(chǎn)生的背景是:數(shù)據(jù)庫(kù)表中只有3列,而在取信息的時(shí)候使用了rs.getString(4),尤其是在使用循環(huán)處理的時(shí)候容易犯這樣的錯(cuò)誤。
(10)執(zhí)行insert語(yǔ)句的時(shí)候,表中的列數(shù)與插入語(yǔ)句中的不相同
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Column count doesn't match value count at row 1
該錯(cuò)誤產(chǎn)生的背景是:數(shù)據(jù)庫(kù)表中有3列,而插入的時(shí)候給了4個(gè)值,SQL語(yǔ)句如下:
insert into student values('0011323','李旭',22,99)。
(11)執(zhí)行insert語(yǔ)句的時(shí)候,主鍵重復(fù)。
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Duplicate entry '0011323' for key 1
該錯(cuò)誤產(chǎn)生的背景是:1條SQL語(yǔ)句連續(xù)執(zhí)行了兩遍,第二遍就出錯(cuò)了。
(12)執(zhí)行insert語(yǔ)句的時(shí)候,值過(guò)長(zhǎng)
提示的錯(cuò)誤信息如下:
java.sql.SQLException: Data too long for column 'id' at row 1
解決方案,查看數(shù)據(jù)庫(kù)中列的長(zhǎng)度。
您可能感興趣的文章:
- java中JDBC實(shí)現(xiàn)往MySQL插入百萬(wàn)級(jí)數(shù)據(jù)的實(shí)例代碼
- jsp+servlet+jdbc實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查
- 詳解poi+springmvc+springjdbc導(dǎo)入導(dǎo)出excel實(shí)例
- MyEclipse通過(guò)JDBC連接MySQL數(shù)據(jù)庫(kù)基本介紹
- sqlserverdriver配置方法 jdbc連接sqlserver
- Java使用JDBC連接數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
- 基于Java回顧之JDBC的使用詳解
- Java開(kāi)發(fā)Oracle數(shù)據(jù)庫(kù)連接JDBC Thin Driver 的三種方法
- 詳解JDBC使用
- Spring 數(shù)據(jù)庫(kù)連接池(JDBC)詳解
相關(guān)文章
springboot訪問(wèn)請(qǐng)求404的原因及解決辦法
在使用Spring Boot開(kāi)發(fā)應(yīng)用程序時(shí),有時(shí)可能會(huì)遇到訪問(wèn)請(qǐng)求出現(xiàn)404錯(cuò)誤的情況,即請(qǐng)求的資源未找到,這篇文章主要給大家介紹了關(guān)于springboot訪問(wèn)請(qǐng)求404的原因及解決辦法,需要的朋友可以參考下2023-09-09
一種新的日期處理方式之JavaScript Temporal API
JavaScript Temporal API是一種為Web開(kāi)發(fā)人員提供了一種新的處理日期和時(shí)間數(shù)據(jù)類(lèi)型的方式。它的目的是使操作日期和時(shí)間更加簡(jiǎn)單和可靠,而且不用擔(dān)心歷史時(shí)區(qū)問(wèn)題或全球化協(xié)調(diào)時(shí)間(UTC)之類(lèi)的問(wèn)題,感興趣的同學(xué)可以參考閱讀2023-05-05
Java基于JDBC連接數(shù)據(jù)庫(kù)及顯示數(shù)據(jù)操作示例
這篇文章主要介紹了Java基于JDBC連接數(shù)據(jù)庫(kù)及顯示數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了Java使用jdbc進(jìn)行mysql數(shù)據(jù)庫(kù)連接與數(shù)據(jù)讀取、顯示等相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
java 全角半角字符轉(zhuǎn)換如何實(shí)現(xiàn)
在java中可能會(huì)用到過(guò)全角半角字符轉(zhuǎn)換問(wèn)題,于是網(wǎng)上搜索整理了一下,曬出來(lái)和大家分享,希望可以幫助你們2012-12-12
三種簡(jiǎn)單排序算法(使用java實(shí)現(xiàn))
下面小編就為大家?guī)?lái)一篇三種簡(jiǎn)單排序算法(使用java實(shí)現(xiàn))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
java調(diào)用FFmpeg實(shí)現(xiàn)視屏壓縮功能的詳細(xì)步驟
這篇文章主要介紹了java調(diào)用FFmpeg實(shí)現(xiàn)視屏壓縮功能,本文簡(jiǎn)單的展示了java調(diào)用FFmpeg命令實(shí)現(xiàn)視屏的壓縮的詳細(xì)步驟,需要的朋友可以參考下2021-09-09
Java實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的三種方法
在Java中實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的方法,通常我們會(huì)使用java.util.Random類(lèi)來(lái)生成隨機(jī)數(shù),然后基于這些隨機(jī)數(shù)來(lái)選擇中獎(jiǎng)?wù)?以下將給出幾種常見(jiàn)的隨機(jī)抽獎(jiǎng)實(shí)現(xiàn)方式,需要的朋友可以參考下2024-09-09
Java中StringRedisTemplate和RedisTemplate的區(qū)別及使用方法
本文主要介紹了Java中StringRedisTemplate和RedisTemplate的區(qū)別及使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

