编写单一Servlet程序,仅用Servlet和jdbc技术不用spring。根据表名参数利用Connection.getMetaData()获取表的元数据字段结构,通过Response.getWriter()对象输出网页表单,实现数据列表、添加和编辑功能,并要适应任何数据表
时间: 2023-12-14 17:36:17 浏览: 27
以下是一个简单的Servlet程序,实现了根据表名获取元数据字段结构,并输出网页表单的功能。你可以自行添加数据列表、添加和编辑功能的实现。
```java
import java.io.IOException;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/table")
public class TableServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String tableName = request.getParameter("tableName");
if (tableName == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Missing tableName parameter");
return;
}
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
DatabaseMetaData metadata = conn.getMetaData();
ResultSet rs = metadata.getColumns(null, null, tableName, null);
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
// Output HTML form
response.getWriter().println("<html>");
response.getWriter().println("<head><title>" + tableName + "</title></head>");
response.getWriter().println("<body>");
response.getWriter().println("<form method=\"post\">");
while (rs.next()) {
String columnName = rs.getString("COLUMN_NAME");
int columnType = rs.getInt("DATA_TYPE");
String columnTypeName = rs.getString("TYPE_NAME");
int columnSize = rs.getInt("COLUMN_SIZE");
response.getWriter().println(columnName + ": ");
switch (columnType) {
case Types.INTEGER:
response.getWriter().println("<input type=\"number\" name=\"" + columnName + "\" /><br>");
break;
case Types.VARCHAR:
response.getWriter().println("<input type=\"text\" name=\"" + columnName + "\" size=\"" + columnSize + "\" /><br>");
break;
// Add more cases for other data types
}
}
response.getWriter().println("<input type=\"submit\" value=\"Submit\" />");
response.getWriter().println("</form>");
response.getWriter().println("</body>");
response.getWriter().println("</html>");
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Database error");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO: Implement data insertion/update logic
}
}
```
这个Servlet程序假设使用MySQL数据库,你需要将连接字符串中的`mydb`、`username`和`password`替换为你自己的数据库名、用户名和密码。此外,该程序只支持整数和字符串类型的字段,你需要根据需要添加其他数据类型的支持。