資料庫:MySQL
在編寫應用程式的時候,為了調試程式方便,可以在異常處理程式碼中把異常訊息顯示出來,這樣可以根據錯誤提示來調試程式碼。異常處理程式碼通常可以寫成這樣:
try{
…
}catch(Exception e){
System.out.println(e.toString());
}
以下是一些常見的錯誤訊息:
(1)驅動程式不存在提示的錯誤訊息如下:
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
後半部是您在程式中寫的驅動程式的名字。
解決方法:仔細檢查類別名稱是否寫錯,如果類別名稱沒有寫錯,則是驅動程式所在的壓縮包沒有引入工程,想辦法引入。
(2)URL寫錯提示的錯誤訊息如下:
java.sql.SQLException: No suitable driver
解決方法:仔細檢查URL的格式是否正確,不同資料庫的URL格式不同。
(3)主機IP位址不正確或網路不通提示的錯誤訊息如下:
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)
在 test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看IP位址是否正確,網路是否有問題。
(4)連接埠錯誤或資料庫伺服器沒有啟動提示的錯誤訊息如下:
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)
在 test.JDBCTest.main(JDBCTest.java:12)
** END NESTED EXCEPTION **
解決方法:查看連接埠是否正確,資料庫伺服器是否啟動。
(5)資料庫名字不正確提示的錯誤訊息如下:
java.sql.SQLException: Unknown database 'test2'
解決方法:查看資料庫是否存在。
(6)使用者名稱或口令不正確提示的錯誤訊息如下:
java.sql.SQLException: Access denied for user 'roo'@'localhost' (using password: YES)
解決方法:確認使用者名稱和口令是否正確。
(7)表名錯誤提示的錯誤訊息如下:
java.sql.SQLException: Table 'test.student1' doesn't exist
解決方法:查看表是否存在,表名是否寫錯。
(8)列名錯誤提示的錯誤訊息如下:
java.sql.SQLException: Unknown column 'sid' in 'field list'
解決方案:仔細查看資料庫表中的列名。
(9)處理結果集的時候,要取得的列的序號大於列數,或小於0
提示的錯誤訊息如下:
java.sql.SQLException: Column Index out of range, 4 > 3.
這個錯誤產生的背景是:資料庫表中只有3列,而在取資訊的時候使用了rs.getString(4),尤其是在使用循環處理的時候容易犯這樣的錯誤。
(10)執行insert語句的時候,表中的列數與插入語句中的不相同提示的錯誤訊息如下:
java.sql.SQLException: Column count doesn't match value count at row 1
這個錯誤產生的背景是:資料庫表中有3列,而插入的時候給了4個值,SQL語句如下:
insert into student values('0011323','李旭',22,99)。
(11)執行insert語句的時候,主鍵重複。
提示的錯誤訊息如下:
java.sql.SQLException: Duplicate entry '0011323' for key 1
這個錯誤產生的背景是:1條SQL語句連續執行了兩遍,第二遍就出錯了。
(12)執行insert語句的時候,值過長提示的錯誤訊息如下:
java.sql.SQLException: Data too long for column 'id' at row 1
解決方案,查看資料庫中列的長度。