ฐานข้อมูล: MySQL
เมื่อเขียนแอปพลิเคชัน เพื่อความสะดวกในการดีบักโปรแกรม ข้อมูลข้อยกเว้นสามารถแสดงได้ในโค้ดการจัดการข้อยกเว้น เพื่อให้สามารถดีบั๊กโค้ดตามข้อความแจ้งข้อผิดพลาด โดยปกติแล้วรหัสการจัดการข้อยกเว้นสามารถเขียนได้ดังนี้:
พยายาม{
-
} จับ (ข้อยกเว้นจ) {
System.out.println(e.toString());
-
ต่อไปนี้เป็นข้อความแสดงข้อผิดพลาดทั่วไป:
(1) ข้อความแสดงข้อผิดพลาดแจ้งเมื่อไม่มีไดรเวอร์เป็นดังนี้:
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
ครึ่งหลังเป็นชื่อของไดรเวอร์ที่คุณเขียนไว้ในโปรแกรม
วิธีแก้ไข: ตรวจสอบอย่างรอบคอบว่าชื่อคลาสเขียนไม่ถูกต้องหรือไม่ แสดงว่าไม่ได้นำแพ็คเกจที่บีบอัดซึ่งเป็นที่ตั้งของไดรเวอร์เข้าสู่โปรเจ็กต์
(2) ข้อความแสดงข้อผิดพลาดแจ้งเมื่อเขียน URL ไม่ถูกต้องเป็นดังนี้:
java.sql.SQLException: ไม่มีไดรเวอร์ที่เหมาะสม
วิธีแก้ไข: ตรวจสอบอย่างรอบคอบว่ารูปแบบของ URL นั้นถูกต้องหรือไม่ รูปแบบ URL ของฐานข้อมูลที่แตกต่างกันนั้นแตกต่างกัน
(3) ข้อความแสดงข้อผิดพลาดแจ้งเมื่อที่อยู่ IP ของโฮสต์ไม่ถูกต้องหรือเครือข่ายไม่พร้อมใช้งานเป็นดังนี้:
com.mysql.jdbc.CommunicationsException: การเชื่อมโยงการสื่อสารล้มเหลวเนื่องจากข้อยกเว้นพื้นฐาน:
** เริ่มต้นข้อยกเว้นที่ซ้อนกัน **
java.net.ConnectException
ข้อความ: หมดเวลาการเชื่อมต่อ: เชื่อมต่อ
สแต็คเทรซ:
java.net.ConnectException: หมดเวลาการเชื่อมต่อ: เชื่อมต่อ
ที่ java.net.PlainSocketImpl.socketConnect (วิธีดั้งเดิม)
ที่ java.net.PlainSocketImpl.doConnect (ไม่ทราบแหล่งที่มา)
ที่ java.net.PlainSocketImpl.connectToAddress (ไม่ทราบแหล่งที่มา)
ที่ java.net.PlainSocketImpl.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.SocksSocketImpl.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.<init>(ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.<init>(ไม่ทราบแหล่งที่มา)
ที่ com.mysql.jdbc.StandardSocketFactory.connect (StandardSocketFactory.java:132)
ที่ com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
ที่ com.mysql.jdbc.Connection.createNewIO (Connection.java:1639)
ที่ com.mysql.jdbc.Connection.<init>(Connection.java:393)
ที่ com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:262)
ที่ java.sql.DriverManager.getConnection (ไม่ทราบแหล่งที่มา)
ที่ java.sql.DriverManager.getConnection (ไม่ทราบแหล่งที่มา)
ที่ test.JDBCTest.oracleTest(JDBCTest.java:25)
ที่ test.JDBCTest.main (JDBCTest.java:12)
** สิ้นสุดข้อยกเว้นที่ซ้อนกัน **
วิธีแก้ไข: ตรวจสอบว่าที่อยู่ IP ถูกต้องและมีปัญหากับเครือข่ายหรือไม่
(4) ข้อความแสดงข้อผิดพลาดหากพอร์ตไม่ถูกต้องหรือเซิร์ฟเวอร์ฐานข้อมูลไม่เริ่มทำงานจะเป็นดังนี้:
com.mysql.jdbc.CommunicationsException: การเชื่อมโยงการสื่อสารล้มเหลวเนื่องจากข้อยกเว้นพื้นฐาน:
** เริ่มต้นข้อยกเว้นที่ซ้อนกัน **
java.net.ConnectException
ข้อความ: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ
สแต็คเทรซ:
java.net.ConnectException: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ
ที่ java.net.PlainSocketImpl.socketConnect (วิธีดั้งเดิม)
ที่ java.net.PlainSocketImpl.doConnect (ไม่ทราบแหล่งที่มา)
ที่ java.net.PlainSocketImpl.connectToAddress (ไม่ทราบแหล่งที่มา)
ที่ java.net.PlainSocketImpl.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.SocksSocketImpl.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.connect (ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.<init>(ไม่ทราบแหล่งที่มา)
ที่ java.net.Socket.<init>(ไม่ทราบแหล่งที่มา)
ที่ com.mysql.jdbc.StandardSocketFactory.connect (StandardSocketFactory.java:132)
ที่ com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)
ที่ com.mysql.jdbc.Connection.createNewIO (Connection.java:1639)
ที่ com.mysql.jdbc.Connection.<init>(Connection.java:393)
ที่ com.mysql.jdbc.NonRegisteringDriver.connect (NonRegisteringDriver.java:262)
ที่ java.sql.DriverManager.getConnection (ไม่ทราบแหล่งที่มา)
ที่ java.sql.DriverManager.getConnection (ไม่ทราบแหล่งที่มา)
ที่ test.JDBCTest.oracleTest(JDBCTest.java:25)
ที่ test.JDBCTest.main (JDBCTest.java:12)
** สิ้นสุดข้อยกเว้นที่ซ้อนกัน **
วิธีแก้ไข: ตรวจสอบว่าพอร์ตถูกต้องและเซิร์ฟเวอร์ฐานข้อมูลเริ่มทำงานหรือไม่
(5) ข้อความแสดงข้อผิดพลาดแจ้งเมื่อชื่อฐานข้อมูลไม่ถูกต้องเป็นดังนี้:
java.sql.SQLException: ฐานข้อมูลที่ไม่รู้จัก 'test2'
วิธีแก้ไข: ตรวจสอบว่ามีฐานข้อมูลอยู่หรือไม่
(6) ข้อความแสดงข้อผิดพลาดแจ้งเมื่อชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้องเป็นดังนี้:
java.sql.SQLException: การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'roo'@'localhost' (โดยใช้รหัสผ่าน: YES)
วิธีแก้ไข: ยืนยันว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง
(7) ข้อความแสดงข้อผิดพลาดที่ได้รับแจ้งจากข้อผิดพลาดชื่อตารางมีดังนี้:
java.sql.SQLException: ไม่มีตาราง 'test.student1'
วิธีแก้ไข: ตรวจสอบว่ามีตารางอยู่หรือไม่และชื่อตารางเขียนไม่ถูกต้องหรือไม่
(8) ข้อความแสดงข้อผิดพลาดที่ได้รับแจ้งจากข้อผิดพลาดชื่อคอลัมน์มีดังนี้:
java.sql.SQLException: คอลัมน์ที่ไม่รู้จัก 'sid' ใน 'รายการฟิลด์'
วิธีแก้ไข: ลองดูชื่อคอลัมน์ในตารางฐานข้อมูลให้ละเอียดยิ่งขึ้น
(9) เมื่อประมวลผลชุดผลลัพธ์ หมายเลขลำดับของคอลัมน์ที่จะได้รับมากกว่าจำนวนคอลัมน์ หรือน้อยกว่า 0
ข้อความแสดงข้อผิดพลาดที่ได้รับแจ้งมีดังนี้:
java.sql.SQLException: ดัชนีคอลัมน์อยู่นอกช่วง 4 > 3
พื้นหลังของข้อผิดพลาดนี้คือตารางฐานข้อมูลมีเพียง 3 คอลัมน์ และใช้ rs.getString(4) เมื่อดึงข้อมูล ข้อผิดพลาดนี้เกิดขึ้นได้ง่าย โดยเฉพาะอย่างยิ่งเมื่อใช้การประมวลผลแบบวนซ้ำ
(10) เมื่อดำเนินการคำสั่ง insert หากจำนวนคอลัมน์ในตารางแตกต่างจากจำนวนในคำสั่ง insert ข้อความแสดงข้อผิดพลาดที่แจ้งจะเป็นดังนี้:
java.sql.SQLException: จำนวนคอลัมน์ไม่ตรงกับจำนวนค่าที่แถว 1
พื้นหลังของข้อผิดพลาดนี้คือ: มี 3 คอลัมน์ในตารางฐานข้อมูลและระบุค่า 4 ค่าเมื่อแทรกคำสั่ง SQL เป็นดังนี้:
แทรกลงในค่านักเรียน('0011323','Li Xu',22,99)
(11) เมื่อดำเนินการคำสั่ง insert คีย์หลักจะถูกทำซ้ำ
ข้อความแสดงข้อผิดพลาดที่ได้รับแจ้งมีดังนี้:
java.sql.SQLException: รายการซ้ำ '0011323' สำหรับคีย์ 1
พื้นหลังของข้อผิดพลาดนี้คือ: คำสั่ง SQL ถูกดำเนินการสองครั้งติดต่อกัน และมีข้อผิดพลาดเกิดขึ้นในครั้งที่สอง
(12) เมื่อดำเนินการคำสั่ง insert ข้อความแสดงข้อผิดพลาดหากค่ายาวเกินไปจะเป็นดังนี้:
java.sql.SQLException: ข้อมูลยาวเกินไปสำหรับคอลัมน์ 'id' ที่แถว 1
วิธีแก้ไข ให้ตรวจสอบความยาวของคอลัมน์ในฐานข้อมูล