常见的JDBC异常有哪些?
在Java数据库连接(JDBC)中,常见的异常主要是由数据库操作引起的。以下是一些常见的JDBC异常及其解释:
SQLException
这是JDBC中最基本的异常类,所有与数据库相关的异常都可以归类为SQLException
。它包含了错误代码、SQL状态和详细信息。
try {
// 数据库操作
} catch (SQLException e) {
System.out.println("SQL错误代码: " + e.getErrorCode());
System.out.println("SQL状态: " + e.getSQLState());
System.out.println("错误信息: " + e.getMessage());
}
SQLTimeoutException
当数据库操作超时时,会抛出此异常。通常在执行查询或更新时,如果超出了设定的时间限制,就会出现此异常。
try {
statement.setQueryTimeout(5); // 设置超时时间为5秒
ResultSet rs = statement.executeQuery("SELECT * FROM users");
} catch (SQLTimeoutException e) {
System.out.println("查询超时: " + e.getMessage());
}
SQLSyntaxErrorException
当SQL语法错误时,会抛出此异常。常见的原因包括拼写错误、缺少关键字等。
try {
ResultSet rs = statement.executeQuery("SELEC * FROM users"); // 拼写错误
} catch (SQLSyntaxErrorException e) {
System.out.println("SQL语法错误: " + e.getMessage());
}
SQLIntegrityConstraintViolationException
当违反数据库完整性约束(如主键、外键约束)时,会抛出此异常。
try {
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'John')");
statement.executeUpdate("INSERT INTO users (id, name) VALUES (1, 'Doe')"); // 主键冲突
} catch (SQLIntegrityConstraintViolationException e) {
System.out.println("完整性约束违反: " + e.getMessage());
}
SQLDataException
当数据不符合数据库要求时,会抛出此异常。例如,尝试将字符串插入到整数字段中。
try {
statement.executeUpdate("INSERT INTO users (age) VALUES ('twenty')"); // 数据类型不匹配
} catch (SQLDataException e) {
System.out.println("数据异常: " + e.getMessage());
}
SQLNonTransientConnectionException
当数据库连接失败时,会抛出此异常。可能的原因包括数据库服务器未启动、网络问题等。
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
} catch (SQLNonTransientConnectionException e) {
System.out.println("连接失败: " + e.getMessage());
}
SQLFeatureNotSupportedException
当尝试使用不被数据库驱动支持的功能时,会抛出此异常。
try {
// 假设某个功能不被支持
statement.setFetchDirection(ResultSet.FETCH_REVERSE);
} catch (SQLFeatureNotSupportedException e) {
System.out.println("功能不被支持: " + e.getMessage());
}
在使用JDBC进行数据库操作时,了解这些常见的异常及其处理方式是非常重要的。通过捕获和处理这些异常,可以提高程序的健壮性和用户体验。建议在实际开发中,结合具体的业务逻辑,合理地捕获和处理这些异常。