写一个Java执行SQL语句,返回结果集的工具类,使用原生的JDBC,在jsp项目中
时间: 2024-03-01 10:50:32 浏览: 82
以下是一个使用原生 JDBC 连接 MySQL 数据库并执行 SQL 语句返回结果集的 Java 工具类示例。请注意,为了避免在 JSP 中直接使用 Java 代码,这个示例使用了 Servlet 作为控制器,用于接收 JSP 页面传来的参数和返回结果。
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class JdbcUtils {
// 数据库连接信息
private static final String URL = "jdbc:mysql://localhost:3306/database_name";
private static final String USER = "username";
private static final String PASSWORD = "password";
/**
* 获取数据库连接
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
/**
* 执行 SQL 查询语句,返回结果集
*/
public static List<Object[]> executeQuery(String sql, Object... params) throws SQLException {
List<Object[]> resultList = new ArrayList<>();
try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) {
// 设置查询参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
// 执行查询并获取结果集
try (ResultSet rs = ps.executeQuery()) {
int columnCount = rs.getMetaData().getColumnCount();
while (rs.next()) {
Object[] row = new Object[columnCount];
for (int i = 0; i < columnCount; i++) {
row[i] = rs.getObject(i + 1);
}
resultList.add(row);
}
}
}
return resultList;
}
}
```
你可以在你的 JSP 项目中使用这个工具类,例如在 Servlet 中调用 `executeQuery` 方法执行 SQL 查询并将结果集传递到 JSP 页面中:
```java
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String sql = "SELECT * FROM table_name WHERE column_name = ?";
String param = request.getParameter("param");
try {
List<Object[]> resultList = JdbcUtils.executeQuery(sql, param);
request.setAttribute("resultList", resultList);
request.getRequestDispatcher("result.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
response.getWriter().println("查询失败:" + e.getMessage());
}
}
}
```
在 `result.jsp` 页面中,你可以使用 JSTL 标签库或者 EL 表达式展示查询结果:
```html
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
</thead>
<tbody>
<c:forEach items="${resultList}" var="row">
<tr>
<td>${row[0]}</td>
<td>${row[1]}</td>
<td>${row[2]}</td>
</tr>
</c:forEach>
</tbody>
</table>
```
这个示例使用了 JSTL 的 `<c:forEach>` 标签循环遍历查询结果集,并使用 EL 表达式 `${row[index]}` 获取每行每列的数据。请注意,这个示例中没有对 SQL 语句和参数进行校验和过滤,你需要根据自己的需要添加这些安全措施。
阅读全文