省略设置SQL的值

新增/修改数据时,字段比较多时,便要写很多设置SQL语句的值,所以为了方便,便写了个工具

/**新增/修改:省略写设置新增/修改的值(即:ps.set某类型(1,值)等等所有的set)。
 * 在ps=con.prepareStatement() 和ps.executeUpdate()中间调用该方法
 * @param t po类对象
 * @param ps PreparedStatement对象
 * @param str sql语句
 * @param it0 等于0时,代表传进的是新增语句,否则为修改语句
 * @提示  1.新增语句格式,例:"insert into bas_driver(driverName,sex,phone) values(?,?,?)"
 * @提示  2.修改语句格式,例:"update bas_driver set driverName=?,sex=? where driverID=?"
 * @提示  3.数据库字段名必须和po类的变量名一样。
 * */
public static <T> void insert(T t,PreparedStatement ps,String str,int it0){
	String[] strs;
	if(it0==0){//新增
		int it=str.indexOf("(");
		int it2=str.indexOf(")");
		//截取"("与")"之间的字符串
		String string=str.substring(it+1,it2);
		//分割字符串
		strs=string.split(",");
	}else{//修改
		int it=str.lastIndexOf(" ",str.indexOf("="));
		str=str.substring(it+1);
		str=str.replace(",", "");
		str=str.replace(" where ", "");
		str=str.replace("?", "");
		strs=str.split("=");
	}
	int i=0;
	//遍历字段名,若字段名和对象里的变量名相同,则把把该变量的值设置进sql语句的"?"号里
	for (String name : strs) {
		i++;
		try {
			name=name.substring(0,1).toUpperCase()+name.substring(1);
			//反射获取变量的值
			Class cla=t.getClass();
			PropertyDescriptor pd=new PropertyDescriptor(name,cla);
			Method method=pd.getReadMethod();
			Object object=method.invoke(t);
			ps.setObject(i, object);//把值设置进去(若Date类型没有值,则object等于null,能设置进去,若是B/boolean类型,默认值为true)
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (IntrospectionException e) {
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44619313/article/details/93968827
今日推荐