Таким образом, проблема Unhandled Exception
напрямую не связана с .toCharArray()
и SerialClob
. Скорее проблема в том, что Проверенные Исключения должны быть либо перехвачены, либо объявлены как часть метода.
Итак (Пример 1):
try {
...
Clob clob = new SerialClob(stringData.toCharArray());
...
}
catch (SQLException e) {
// do handle better than this, however
e.printStackTrace();
}
Или (Пример 2):
/**
@throws SQLException If there is an issue with creating the data, or
inserting into the DB
*/
private void storeData(StringData stringData) throws SQLException
{
...
Clob clob = new SerialClob(stringData.toCharArray());
...
}
Конечно, с последним, какой-то другой метод должен будет перехватить исключение SQLException.
По сути, SQLException
является CheckedException. Из JLS 11,2
Язык программирования Java требует, чтобы программа содержала обработчики для проверенных исключений, которые могут возникнуть в результате выполнения метода или конструктора. Для каждого проверенного исключения, которое является возможным результатом, предложение throws для метода (§8.4.6) или конструктора (§8.8.5) должно упоминать класс этого исключения или один из суперклассов класса этого исключения (§ 11.2.3).
Таким образом, либо SQLException
должен быть перехвачен (пример 1), либо добавлен в предложение throws
для метода (пример 2).
Причина, по которой вы получили проблему времени компиляции, находится в
JLS, 11.2.3 Проверка исключений :
Ошибка времени компиляции, если тело метода или конструктора может выбросить некоторый класс исключений E, когда E является проверенным классом исключений, а E не является подклассом некоторого класса, объявленного в предложении throws метода или конструктора.
Существует также обсуждение в принятом ответе на этого вопроса о проверенных и непроверенных исключениях