JavaBean的list集合拼接成Insert语句

本文介绍了一种自定义SQL封装方法,通过将Bean对象转换为数据库语句,解决框架限制下的SQL拼接问题。方法包括Bean属性到SQL参数的映射和值的正确拼接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作可恶心了,整的框架不让用,还得自己拼接sql语句,于是自己封装了一个方法:

public static String beans2db(List<?> objs, String table) {
		
		String sql="";
		StringBuffer prama=new StringBuffer();
		StringBuffer values=new StringBuffer();
		try {
			Field[] fields = objs.get(0).getClass().getDeclaredFields();
			for (Field field : fields) {
				prama.append(","+field.getName());
			}
			for (Object obj : objs) {
				values=values.append(",(").append(getValue2Bean(obj)).append(")");
			}
			
			prama=prama.deleteCharAt(0);
			values=values.deleteCharAt(0);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		
		sql="insert into "+table+"("+prama+") values " +values;
		return sql;
	}

参数:objs是bean的list集合,参数table是待插入的数据库表,返回的字符串格式:insert  into TABLE (PRAMA,PRAMA,……) values(VALUE,VALUE,……)  ;

下面是参数值得拼接方法:

    // import org.apache.commons.beanutils.BeanUtils
	
    /**
	 * 参数值拼接
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	private static StringBuffer getValue2Bean(Object obj) throws Exception{
		Field[] fields = obj.getClass().getDeclaredFields();
		StringBuffer value=new StringBuffer();
		String v= null;
		for (Field field : fields) {
			v=BeanUtils.getProperty(obj, field.getName());
			if (v==null) {
				value.append(","+BeanUtils.getProperty(obj, field.getName()));
			}else {
				value.append(",'"+BeanUtils.getProperty(obj, field.getName())+"'");
			}
		}
		value=value.deleteCharAt(0);
		return value;
	}


方法的结果形式:(VALUE,VALUE,VALUE……),(VALUE,VALUE,VALUE……),(VALUE,VALUE,VALUE……)……

<think>嗯,用户想用Eclipse通过Javabean和JSP实现学生管理系统,连接Navicat12里的MySQL数据库。首先,我得确认他们需要的功能是增删改查。那可能需要分几个步骤:环境搭建、数据库连接、Javabean设计、Servlet处理、JSP页面,还有功能实现。 首先,环境方面,Eclipse需要配置好JDK和Tomcat,还有MySQL的驱动包。用户提到数据库版本是5.0.51,可能需要用兼容的JDBC驱动,比如mysql-connector-java-5.1.x,虽然版本稍新,但应该能兼容。然后,Navicat里创建好数据库rr和表stu,结构要明确,比如id、name、age等字段。 接下来是Javabean,也就是Student类,对应数据库表的字段,要有属性和getter/setter方法。然后数据库连接工具类DBUtils,这里用户提供的代码里有DBUtils,但可能需要注意驱动类是否正确,旧版MySQL用的是com.mysql.jdbc.Driver,而新版是com.mysql.cj.jdbc.Driver,不过用户指定的是5.0.51,应该用旧版。另外,连接字符串的参数,比如时区和服务端时区设置可能需要添加,避免连接问题。然后是Servlet的设计,每个功能对应一个Servlet,比如StudentAddServlet处理添加,用doPost方法接收表单数据,调用Javabean的方法插入数据库。要注意防止SQL注入,可能需要使用PreparedStatement。还有,中文乱码问题,需要在Servlet里设置request和response的编码为UTF-8,或者在过滤器中处理。 JSP页面方面,用户可能需要展示学生列表,用JSTL和EL表达式循环显示数据。添加和修改页面需要表单提交到对应的Servlet。删除和修改操作可能需要传递学生的ID,通过GET请求参数,然后在Servlet中处理。删除操作通常用GET,而添加和修改用POST,不过删除最好也用POST以避免CSRF攻击,但简单实现的话可能用GET更方便。 测试环节也很重要,每个功能都要逐步测试,比如添加后是否能在列表显示,修改后数据是否更新,删除后是否消失。还有异常处理,比如数据库连接失败时要有提示,Servlet中捕获异常并转发到错误页面。 可能遇到的问题包括:驱动未正确加载,导致ClassNotFoundException;连接字符串格式错误,比如时区问题;字符编码不一致导致中文乱码;Servlet配置错误,比如web.xml中的映射或者注解配置;JSP页面中的JSTL库未正确导入;还有事务管理,比如在修改操作中是否需要事务,但基础功能可能不需要。用户提供的DBUtils代码里,获取连接的方式是直接拼接URL,但DriverManager.getConnection的参数可能已经包含了用户名和密码,所以URL中的user和password可能多余,或者需要检查是否正确。另外,关闭连接的方法是否正确,是否在finally块中关闭,避免资源泄露。另外,用户提到的参考引用里有Servlet设计部分,可能需要将每个CRUD操作对应到不同的Servlet,或者使用一个Servlet通过参数区分动作,但通常建议分开,结构更清晰。例如,StudentQueryServlet处理查询,StudentAddServlet处理添加等。 最后,页面导航和用户体验,比如添加功后重定向到列表页,避免重复提交;删除操作前的确认提示,用JavaScript实现;分页功能如果用户需要的话,但可能超出基础范围。总之,按照MVC模式,Javabean作为模型,Servlet作为控制器,JSP作为视图,各部分分工明确,确保系统可维护。</think>### 分步骤实现学生管理系统 #### 一、环境准备 1. **Eclipse配置** - 安装JDK 1.8+并配置环境变量 - 集Tomcat 9.x服务器 - 导入MySQL驱动包`mysql-connector-java-5.1.47.jar`[^1] 2. **数据库配置** ```sql CREATE DATABASE rr; USE rr; CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT, gender VARCHAR(2), major VARCHAR(50) ); ``` #### 二、核心组件开发 1. **Javabean设计**(模型层) ```java // Student.java public class Student { private int id; private String name; private int age; private String gender; private String major; // 生所有属性的getter/setter方法 } ``` 2. **数据库工具类**(优化版) ```java public class DBUtils { private static final String URL = "jdbc:mysql://localhost:3306/rr?useUnicode=true&characterEncoding=UTF8&useSSL=false"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, "root", "123456"); } public static void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` #### 三、功能实现流程 1. **查询功能** ```jsp <%-- list.jsp --%> <table> <c:forEach items="${students}" var="stu"> <tr> <td>${stu.id}</td> <td>${stu.name}</td> <td>${stu.age}</td> </tr> </c:forEach> </table> ``` 2. **添加功能** ```java // AddServlet.java protected void doPost(HttpServletRequest request, HttpServletResponse response) { try (Connection conn = DBUtils.getConnection(); PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO stu(name,age,gender,major) VALUES(?,?,?,?)")) { pstmt.setString(1, request.getParameter("name")); pstmt.setInt(2, Integer.parseInt(request.getParameter("age"))); pstmt.setString(3, request.getParameter("gender")); pstmt.setString(4, request.getParameter("major")); pstmt.executeUpdate(); response.sendRedirect("list.jsp"); } catch (Exception e) { e.printStackTrace(); } } ``` #### 四、注意事项 1. **中文乱码处理** ```java request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); ``` 2. **事务管理** ```java conn.setAutoCommit(false); try { // 执行多个SQL操作 conn.commit(); } catch (SQLException e) { conn.rollback(); } ``` #### 五、功能测试 1. 访问`http://localhost:8080/项目名/list.jsp`验证数据显示 2. 通过添加表单提交测试数据入库 3. 使用Postman测试删除/修改接口
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值