Pagharap sa mga bug

Available

Luha at sakit

Maaaring mangyari ang mga error habang nagpapatakbo ng isang Java program. Kapag nagtatrabaho sa database, magaganap ang mga error . Ang lahat ay tungkol sa kung alin sa mga ito ang maaari mong hulaan at mag-alok ng sapat na solusyon.

Ang unang malaking pangkat ng mga error ay maghihintay para sa iyo kapag isinasagawa ang linyang ito:

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

Ano ang maaari mong asahan dito?

Error 1. Hindi nakita ang driver .

Kung nakuha mo ang error na "Walang nahanap na angkop na driver para sa ..." , nangangahulugan ito na hindi maintindihan ng DriverManager kung anong uri ng DBMS ang nasa likod ng iyong URL. Halimbawa, isinulat mo ang jdbc_mysql: sa halip na jdbc:mysql:

Error 2. Error sa koneksyon .

Kung nagkamali ka sa pangalan ng host, malamang na makakatanggap ka ng mensahe tulad ng "Walang ganoong host ang kilala" o "Pagkabigo ng link ng komunikasyon."

Error 3. Mali ang pangalan ng database .

Kung mali ang spelling mo sa pangalan ng database o kumonekta sa ibang server kung saan wala ito, makakatanggap ka ng mensahe tulad ng “Hindi kilalang database 'supershop3'” .

Error 4. Maling login o password .

Kung nakalimutan mo ang password ng database o naipasok ito nang hindi tama, malamang na makakatanggap ka ng mensahe tulad ng "Tinanggihan ang pag-access para sa user 'root'@'localhost' (gamit ang password: YES)" .

SQL Exception

Kung ang koneksyon sa base ay itinatag, kung gayon ito ay magiging mas kawili-wili pa. Sa kaso ng mga error kapag nagtatrabaho sa database, ang JDBC ay may espesyal na pagbubukod - java.sql.SQLException . Pati na rin ang ilan sa mga varieties nito.

Ang pagbubukod na ito ay mayroon lamang isang karagdagang pamamaraan (kumpara sa klase ng Exception) - ang getSQLState() na pamamaraan, na nagbabalik ng status code (string) na ibinalik dito ng SQL server. Mukhang ganito ang paghawak ng error:

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();
 }

Mayroong daan-daang mga error code. Maaari mong makita ang buong listahan dito .

Ngunit kung minsan ang mga error code ay tumutulong sa JDBC na maunawaan ang error nang mas mahusay at pagkatapos ay itinapon nito hindi lamang ang SQLException, ngunit ang dalubhasang SQLException:

BatchUpdateException Error sa paghiling ng pangkat
DataTruncation Madalas na nangyayari kapag pinuputol ang mahabang data
SQLClientInfoException Nagpasa ang kliyente ng mga parameter na hindi maitakda sa koneksyon: Koneksyon
SQLDataException Error sa data, ang mga detalye ay nakadepende sa uri ng DBMS
SQLException Error sa pag-access sa database o iba pang pangkalahatang error
SQLFeatureNotSupportedException Hindi sinusuportahan ng DBMS ang pagpapaandar na ito
SQLIntegrityConstraintViolationException Lahat ng mga error na may para sa SQLState ==22
SQLInvalidAuthorizationSpecException Error sa pag-access at/o pagpapahintulot
SQLNonTransientConnectionException Lahat ng mga error na may para sa SQLState ==08
SQLRecoverableException Mayroong isang error, ngunit maaari itong maayos sa pamamagitan ng interbensyon ng aplikasyon
SQLSyntaxErrorException Error sa query syntax
SQLTimeoutException Masyadong matagal ang kahilingan
SQLTransactionRollbackException Error sa panahon ng rollback ng transaksyon
SQLWarning Babala na ibinigay ng DBMS

Mga halimbawa ng error

Kung may naganap na error sa yugto ng application ng server, kadalasan ay maaari lamang itong mai-log at pagkatapos ay haharapin nang mas detalyado. Ngunit kung nangyari ito habang tumatakbo ang application sa computer ng programmer, kailangan mong maingat na siyasatin ang dahilan nito.

Mayroong dalawang pinakamalaking klase ng mga error kapag nagtatrabaho sa isang database:

  • Humiling ng error sa text
  • Error habang nagtatrabaho sa ResultSet

Ang isang error sa text ng kahilingan ay maaaring mangyari nang napakadalas. Ang query ay maaaring napakahaba, naglalaman ng ilang mga talahanayan (sinalihan sa pamamagitan ng JOIN) at mga subquery (SUBSELECT). Hindi madaling makahanap ng error sa naturang kahilingan. Bilang karagdagan, ang mga kahilingan ay madalas na nakadikit mula sa mga bahagi, ang data ay idinagdag doon.

Ang pinakaunang error na dapat mong malaman ay SQLSyntaxErrorException . Ang ganitong error ay karaniwang nangangahulugan na mayroon kang typo sa katawan ng kahilingan.

Kunin natin ang paborito nating halimbawa:

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

At "hindi sinasadya" tanggalin ang asterisk sa katawan ng kahilingan:

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

Pagkatapos ay makakakuha tayo ng isang pagbubukod:

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)

Sinasabi sa amin ng SQL server na nagkaroon ng syntax error bago ang FROM.

Maingat naming tinitingnan ang kahilingan at iniisip. Kung walang naiisip, at madalas itong nangyayari, kailangan mong hilingin sa isang tao na tingnan kung ano ang mali.

Ang isa pang tanyag na pagkakamali ay hindi tamang trabaho sa ResultSet - ang resulta ng kahilingan. Ipagpalagay na nakalimutan mo na bago basahin ang data, ang "kasalukuyang hilera" ng ResultSet object ay nauuna sa unang hilera, pagkatapos ay magkakaroon ka ng sumusunod na code:

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

Makukuha mo ang error na ito:


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)

Maingat nating tinitingnan ang pagkakamali at iniisip. Pagkatapos ay mag-google kami at maghanap ng ilang mga halimbawa at subukang maunawaan ang solusyon.

Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito