import java.io.IOException; import java.sql.SQLException;
时间: 2024-12-31 21:47:32 浏览: 11
`import java.io.IOException;` 和 `import java.sql.SQLException;` 这两行代码是在Java程序中引入了两个外部库的声明。`IOException` 是Java I/O流(Input/Output Streams)包下的异常类型,通常在处理文件读写、网络通信等I/O操作时可能会抛出这个异常。如果某个操作过程中发生了错误,如文件找不到或无法连接到数据库,就会捕获并处理这种异常。
`SQLException` 是Java SQL API的一部分,用于处理SQL查询过程中可能出现的问题,比如数据库连接失败、数据操作异常等。当与数据库交互时,如果遇到与SQL语法相关的错误,程序员就需要捕获这个异常进行错误处理。
使用这两个`import`语句可以让开发者直接使用这些异常类型,而不需要在每次调用相关函数或方法时显式地引用它们。例如:
```java
try {
// 数据库操作
} catch (SQLException e) {
e.printStackTrace();
}
try {
// 文件I/O操作
} catch (IOException e) {
e.printStackTrace();
}
```
相关问题
package day0608.utils; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 连接池工具类
这是一个连接池工具类的代码,它使用阿里巴巴的Druid连接池来实现数据库连接的复用,避免频繁地创建和关闭数据库连接。通过读取配置文件中的数据库连接参数,创建Druid数据源,并通过数据源获取数据库连接。在使用完成后,需要将连接关闭并归还给连接池。以下是代码的详细解释:
1. 导入Druid相关的类和接口
```java
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
```
2. 创建连接池工具类
```java
public class ConnectionPoolUtil {
private static DataSource dataSource;
static {
try {
// 读取配置文件
InputStream inputStream = ConnectionPoolUtil.class.getClassLoader().getResourceAsStream("druid.properties");
Properties properties = new Properties();
properties.load(inputStream);
// 创建Druid数据源
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
// 关闭数据库连接
public static void closeConnection(Connection conn, PreparedStatement pstmt, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
```
3. 使用连接池工具类
```java
public class MyDao {
public List<User> getAllUsers() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<User> userList = new ArrayList<>();
try {
// 获取数据库连接
conn = ConnectionPoolUtil.getConnection();
pstmt = conn.prepareStatement("SELECT * FROM user");
rs = pstmt.executeQuery();
// 处理查询结果
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接
ConnectionPoolUtil.closeConnection(conn, pstmt, rs);
}
return userList;
}
}
```
以上是连接池工具类的基本实现,可以在多线程环境下安全地使用。同时,Druid还提供了很多其他的功能,例如监控、防御SQL注入攻击等,可以根据实际需求进行配置和使用。
package servlet; import db.Database; import module.admin; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; @WebServlet(name = "viewServlet",urlPatterns = "/view") public class viewServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String SQL = "select s_id, password from admin"; // 从连接池获取连接 Connection connection = null; PreparedStatement statement = null; ResultSet resultSet = null; ArrayList<admin> admins = new ArrayList<>(); protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { connection = Database.getConnection(); statement = connection.prepareStatement(SQL); resultSet = statement.executeQuery(); System.out.println("连接成功"); while (resultSet.next()) { int s_id = resultSet.getInt("s_id"); String password = resultSet.getString("password"); admin admin = new admin(s_id, password); admins.add(admin); req.setAttribute("message", "数据读取成功"); } req.setAttribute("admins", admins); req.getRequestDispatcher("view.jsp").forward(req, resp); } catch (SQLException e) { e.printStackTrace(); req.setAttribute("message", "操作失败!"); } finally { Database.closeResource(connection, statement, resultSet); } } }
这段代码是一个 Servlet 类,实现了在数据库中查询数据并将结果显示在 JSP 页面上的功能。以下是对代码的逐行解释:
```java
package servlet;
import db.Database;
import module.admin;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
@WebServlet(name = "viewServlet",urlPatterns = "/view")
public class viewServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String SQL = "select s_id, password from admin"; // SQL 查询语句
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
ArrayList<admin> admins = new ArrayList<>();
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
connection = Database.getConnection(); // 获取数据库连接
statement = connection.prepareStatement(SQL); // 创建 PreparedStatement 对象
resultSet = statement.executeQuery(); // 执行 SQL 查询语句
System.out.println("连接成功");
while (resultSet.next()) {
int s_id = resultSet.getInt("s_id"); // 获取查询结果中的 s_id 列
String password = resultSet.getString("password"); // 获取查询结果中的 password 列
admin admin = new admin(s_id, password); // 创建 admin 对象
admins.add(admin); // 将 admin 对象添加到 ArrayList 中
req.setAttribute("message", "数据读取成功"); // 在 request 对象中设置提示信息
}
req.setAttribute("admins", admins); // 在 request 对象中设置查询结果
req.getRequestDispatcher("view.jsp").forward(req, resp); // 将请求转发到 view.jsp 页面
} catch (SQLException e) {
e.printStackTrace();
req.setAttribute("message", "操作失败!");
} finally {
Database.closeResource(connection, statement, resultSet); // 关闭资源
}
}
}
```
以上代码中,我们首先定义了一个 `SQL` 常量,用于存储 SQL 查询语句。在 `doPost` 方法中,我们首先获取了数据库连接,并创建了一个 `PreparedStatement` 对象,用于执行 SQL 查询语句。然后通过 `executeQuery` 方法执行查询,并通过 `while` 循环遍历查询结果,将查询结果中的每一行数据封装为一个 `admin` 对象,并将其添加到一个 `ArrayList` 中。最后,将查询结果和提示信息设置到 `request` 对象中,并通过 `requestDispatcher` 将请求转发到 `view.jsp` 页面。在 `finally` 块中,我们调用了 `closeResource` 方法关闭了数据库连接、`PreparedStatement` 对象和查询结果集对象。
阅读全文