A hibák kezelése

Elérhető

Könnyek és fájdalom

Java programok futtatása közben hibák léphetnek fel. Az adatbázissal való munka során hibák lépnek fel. Minden azon múlik, hogy melyikükről tudod megjósolni és megfelelő megoldást kínálni.

A hibák első nagy csoportja vár rád a sor végrehajtásakor:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");

Mire számíthatsz itt?

1. hiba. Az illesztőprogram nem található .

Ha a „Nem található megfelelő illesztőprogram a következőhöz” hibaüzenetet kapja , az azt jelenti, hogy a DriverManager nem tudta megérteni, milyen típusú DBMS van az URL mögött. Például azt írtad, hogy jdbc_mysql: a jdbc:mysql helyett:

Hiba 2. Csatlakozási hiba .

Ha hibázik a gazdagépnévben, akkor nagy valószínűséggel a következő üzenet jelenik meg: „Nem ismert ilyen gazdagép” vagy „Kommunikációs kapcsolathiba”.

3. hiba. Az adatbázisnév helytelen .

Ha hibásan írta le az adatbázis nevét, vagy csatlakozik egy másik kiszolgálóhoz, ahol az nem létezik, akkor a következő üzenet jelenik meg: „Ismeretlen adatbázis 'supershop3'” .

Hiba 4. Rossz bejelentkezési név vagy jelszó .

Ha elfelejtette az adatbázis jelszavát, vagy hibásan adta meg, akkor valószínűleg olyan üzenetet fog kapni, mint „A 'root'@'localhost' felhasználó hozzáférése megtagadva (jelszó használatával: IGEN)” .

SQL kivétel

Ha ennek ellenére létrejön a kapcsolat a bázissal, akkor a továbbiakban érdekesebb lesz. Az adatbázissal való munka során fellépő hibák esetén a JDBC-nek van egy speciális kivétele - java.sql.SQLException . Valamint több fajtája.

Ennek a kivételnek csak egy további metódusa van (az Exception osztályhoz képest) - a getSQLState() metódus, amely visszaadja az SQL-kiszolgáló által visszaküldött állapotkódot (karakterláncot). A hibakezelés így néz ki:

Connection connection  = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",  "root", "secret");
try {
   int rowsCount = statement.executeUpdate("DELETE FROM ‘Unemployees’");
} catch (SQLException ex) {
  // If table doesn't exist
   if (ex.getSQLState().compareTo("X0Y32") != 0) {
  	throw ex;
  }
 } finally {
  connection.close();
 }

Több száz hibakód létezik. A teljes listát itt tekintheti meg .

De néha a hibakódok segítenek a JDBC-nek jobban megérteni a hibát, és nem csak SQLExceptiont, hanem speciális SQLExceptiont is dob:

BatchUpdateException Hiba a csoportos kérés során
DataTruncation Gyakran előfordul hosszú adatok csonkolásakor
SQLClientInfoException Az ügyfél olyan paramétereket adott át, amelyek nem állíthatók be a kapcsolaton: Kapcsolat
SQLDataException Hiba az adatokkal, a részletek a DBMS típusától függenek
SQLException Adatbázis-hozzáférési hiba vagy egyéb általános hibák
SQLFeatureNotSupportedException A DBMS nem támogatja ezt a funkciót
SQLIntegrityConstraintViolationException Minden hiba a következővel: SQLState ==22
SQLInvalidAuthorizationSpecException Hozzáférési és/vagy engedélyezési hiba
SQLNonTransientConnectionException Minden hiba a következővel: SQLState ==08
SQLRecoverableException Hiba van, de alkalmazás beavatkozásával javítható
SQLSyntaxErrorException Hiba a lekérdezés szintaxisában
SQLTimeoutException A kérés túl sokáig tartott
SQLTransactionRollbackException Hiba a tranzakció visszaállítása közben
SQLWarning A DBMS figyelmeztetést adott ki

Példák a hibákra

Ha hiba történt a szerveralkalmazás szakaszában, akkor azt általában csak naplózni, majd részletesebben lehet kezelni. De ha ez akkor történt, amikor az alkalmazás futott a programozó számítógépén, akkor alaposan meg kell vizsgálnia ennek okát.

Az adatbázisokkal végzett munka során két legnagyobb hibaosztály létezik:

  • Kérjen szöveges hibát
  • Hiba a ResultSet használata közben

Nagyon gyakran előfordulhat hiba a kérés szövegében. A lekérdezés lehet nagyon hosszú, több táblát (JOIN-on keresztül csatlakozva) és allekérdezést (SUBSELECT) tartalmazhat. Nem könnyű hibát találni egy ilyen kérésben. Ráadásul a kéréseket gyakran alkatrészekből ragasztják össze, ott adják hozzá az adatokat.

A legelső hiba, amellyel tisztában kell lennie, az SQLSyntaxErrorException . Az ilyen hiba általában azt jelenti, hogy a kérés törzsében elírás van.

Vegyük kedvenc példánkat:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
results.next();
    int count = results.getInt(1);

És „véletlenül” törölje a csillagot a kérés törzséből:

ResultSet results = statement.executeQuery("SELECT Count() FROM user");
results.next();
    int count = results.getInt(1);

Akkor kivételt kapunk:

Exception in thread "main" java.sql.SQLSyntaxErrorException:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') FROM task' at line 1

           	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

Az SQL szerver azt mondja, hogy szintaktikai hiba volt a FROM előtt.

Gondosan megvizsgáljuk a kérést és gondolkodunk. Ha semmi sem jut eszedbe, és ez nagyon gyakran megtörténik, akkor meg kell kérned valakit, hogy nézze meg, mi a baj.

Egy másik népszerű hiba a ResultSet - a kérés eredménye - nem megfelelő munka. Tegyük fel, hogy elfelejtette, hogy az adatok beolvasása előtt a ResultSet objektum „aktuális sora” az első sor elé kerül, akkor a következő kódot kapja:

ResultSet results = statement.executeQuery("SELECT Count(*) FROM user");
//    results.next();
    int count = results.getInt(1);

Ezt a hibát fogja kapni:


2012 12:55:48 AM jButton5ActionPerformed
SEVERE: null
java.sql.SQLException: Before start of result set
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
    at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5650)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)

Alaposan megvizsgáljuk a hibát és gondolkodunk. Utána keresünk google-t és találunk pár példát, és megpróbáljuk megérteni a megoldást.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései