13 Ocak 2022 Perşembe

JDBC SQLException

Giriş
Şu satırı dahil ederiz
import java.sql.SQLException;
JDBC işlemlerinde çoğunlukla bu exception fırlatılır. Daha özelleştirilmiş exceptionlar da mevcut. Açıklaması şöyle
SQLNonTransientException: This type of exception will be thrown when an instance where a retry of the same operation would fail unless the cause of the SQLException has been corrected.

SQLTransientException: This type of exception will be thrown when a previously failed operation is able to succeed when we re-tried the operation again without any change/intervention.

SQLRecoverableException: This type of exception will be thrown when a previously failed operation can succeed when we re-tried the operation again with any change/intervention by the application. While doing that the current connection should be closed and the new connection should be opened.

BatchUpdateException: This type of exception will be thrown if any error has occurred while doing the batch update operation. Besides the SQLException information, BatchUpdateException provides the status of the statements which have been executed/updated before the error has occurred.

SQLClientInfoException: This type of exception will be thrown if one or more information properties could not be set on a connection. Besides the SQLException information, SQLClientInfoException a list of client information properties that were not been set.
SQLNonTransientException
Örneğin tabloda tek bir satır olmasını bekliyoruz, ancak daha fazla satır varsa bu exception fırlatılabilir. Çünkü işlemi tekrarlasak bile tablodaki satırlar silinmediği müddetçe aynı hatayı elde edeceğizdir.

getSQLState metodu
Veri tabanları getErrorCode() için int tipinden farklı değerler dönerler. Daha portable kod için String dönen getSQLState() metodu kullanılabilir. Mapping MySQL Error Numbers to JDBC SQLState Codes yazısına bakılabilir.

Örnek
Şöyle yaparız
import com.mysql.cj.exceptions.MysqlErrorNumbers;

if (sqlException.getErrorCode() == MysqlErrorNumbers.ER_LOCK_WAIT_TIMEOUT || 
sqlException.getSQLState() == MysqlErrorNumbers.SQL_STATE_ROLLBACK_SERIALIZATION_FAILURE) {
    ...
}


Hiç yorum yok:

Yorum Gönder