面试题答案
一键面试- SQLException
- 异常说明:这是JDBC操作中最常见的异常,当数据库访问错误、SQL语句执行错误等情况发生时抛出。例如,SQL语句语法错误、数据库连接问题、数据库操作权限不足等都可能引发此异常。
- 处理方式:
- 首先打印异常堆栈信息,方便定位问题,如
e.printStackTrace()
。 - 根据异常的错误码(
e.getErrorCode()
)和错误信息(e.getMessage()
)来具体分析错误原因。例如,如果是权限不足的错误,可以提示用户检查权限;如果是SQL语法错误,检查并修正SQL语句。
- 首先打印异常堆栈信息,方便定位问题,如
- ClassNotFoundException
- 异常说明:当使用
Class.forName()
加载数据库驱动类时,如果指定的驱动类在类路径中找不到,就会抛出此异常。比如在连接MySQL数据库时,如果没有正确添加MySQL驱动的jar包到项目中,就可能出现这种情况。 - 处理方式:
- 确保项目中已经正确添加了相应的数据库驱动依赖。对于Maven项目,在
pom.xml
文件中添加正确的依赖坐标。例如,对于MySQL驱动:
- 确保项目中已经正确添加了相应的数据库驱动依赖。对于Maven项目,在
- 异常说明:当使用
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql - connector - java</artifactId>
<version>8.0.26</version>
</dependency>
- 检查驱动类名是否正确,不同数据库版本驱动类名可能有差异。例如,MySQL 8.0以上版本驱动类名是`com.mysql.cj.jdbc.Driver`,而之前版本可能是`com.mysql.jdbc.Driver`。
3. NullPointerException
- 异常说明:在JDBC编程中,当试图调用一个空对象的方法时会抛出此异常。比如没有正确初始化
Connection
、Statement
或ResultSet
对象,就直接调用它们的方法,就可能引发该异常。例如,没有获取到数据库连接(Connection
为null
)就尝试创建Statement
对象。 - 处理方式:
- 在使用这些对象之前,进行非空检查。例如:
Connection conn = null;
try {
// 获取连接的代码
if (conn!= null) {
Statement stmt = conn.createStatement();
// 后续操作
}
} catch (SQLException e) {
e.printStackTrace();
}
- DataTruncation
- 异常说明:当数据库数据发生截断时抛出,比如将一个过长的字符串插入到数据库中定义长度较短的字段时,就可能触发此异常。
- 处理方式:
- 检查数据库表字段的定义长度,确保插入的数据长度在允许范围内。可以在插入数据前对数据长度进行校验。例如:
String data = "a very long string";
if (data.length() > maxAllowedLength) {
// 进行截断处理或提示用户数据过长
data = data.substring(0, maxAllowedLength);
}
- SQLTimeoutException
- 异常说明:当执行SQL语句超时,即数据库在规定时间内没有返回结果时抛出此异常。这可能是由于SQL语句过于复杂、数据库性能问题或网络问题导致的。
- 处理方式:
- 优化SQL语句,例如添加合适的索引、避免全表扫描等。
- 检查数据库服务器性能,查看是否有资源瓶颈(如CPU、内存、磁盘I/O等)。
- 调整数据库连接的超时设置,适当增加超时时间,但要注意不能设置过长以免影响系统响应。例如,在获取连接时设置连接超时时间:
DriverManager.getConnection(url, username, password, new Properties() {{
setProperty("connectTimeout", "5000");// 连接超时5秒
setProperty("socketTimeout", "10000");// 数据传输超时10秒
}});