import weaver.general.Util; import weaver.conn.RecordSet; import net.sf.json.JSONObject; /** * @Method: SimplifiedSql * @Description: 简化sql写法,在数据库中查询从1~12月的sql值 * @param month OA表单传的月份参数,是动态变量。 0对应1月 ~ 11对应12月 * @param year OA表单传的年份参数,是动态变量 * @param deptName OA表单传的部门编号参数,是动态变量。由此函数翻译成部门名称简写 * @return */ public class Main { static String month = "0"; static String year = "2023"; static String deptName = "zh"; static int Num_of_Cycles = 2; RecordSet rs = new RecordSet(); // 数据库包 JSONObject json = new JSONObject(); // public void main(String[] args) { } public JSONObject SimplifiedSql (String month, String year, String deptName,int Num_of_Cycles){ for (int i = 0; i < Num_of_Cycles; i++) { String Num2String = Integer.toString(i + 1); // 数字转字符串,用于sql中的下角标 String calculated_abbr = deptName + "_calculated" + Num2String; // 计算值变为缩写 String actual_abbr = deptName + "_actual_" + Num2String; // 实际值 String target_abbr = deptName + "_target_" + Num2String; // 目标值 String sql = ""; // 1月份 if (month.equals("0")) { sql = "select (100 + ROUND((? - ?) / (? * 0.01), 2)) as " + calculated_abbr + " from dual"; rs.executeQuery(sql, actual_abbr, target_abbr, target_abbr); } rs.next(); String calculated = Util.null2String(rs.getString(calculated_abbr)); json.put(calculated_abbr, calculated); } return json; } }
时间: 2024-02-14 11:32:21 浏览: 222
这段代码是一个Java类,包含一个名为`SimplifiedSql`的方法,该方法接受四个参数:`month`、`year`、`deptName`和`Num_of_Cycles`。该方法的作用是根据传入的参数,在数据库中查询1月至12月的计算值,并将结果存储在一个`JSONObject`对象中返回。
具体实现过程如下:
1. 通过一个循环,查询1至12个月的计算值。
2. 在循环中,将部门名称和月份转换为相应的缩写,用于后续的SQL语句中。
3. 根据传入的月份参数,构造相应的SQL语句。如果月份为0,表示查询1月份的计算值,否则查询相应月份的计算值。
4. 执行SQL语句,获取计算值。
5. 将计算值存储在一个`JSONObject`对象中,并返回该对象。
需要注意的是,该类中的`rs`和`json`对象是类成员变量,可以在不同的方法中使用。而`main`方法是Java程序的入口方法,不需要进行任何操作。
相关问题
优化这段代码// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package com.api.Shenhh; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import weaver.conn.RecordSet; @Path("/Shenhh") public class Service_Test { public Service_Test() { } @GET @Path("/test01") @Produces({"application/json"}) public void selectAll(@Context HttpServletRequest req, @Context HttpServletResponse res) { try { req.setCharacterEncoding("utf-8"); res.setContentType("text/html;charset=utf-8"); ServletOutputStream out = res.getOutputStream(); JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); RecordSet recordSet = new RecordSet(); String sql = "select * from formtable_main_20"; recordSet.execute(sql); while(recordSet.next()) { jsonObject.put("name", recordSet.getString("xm")); jsonObject.put("bm", recordSet.getString("bm")); jsonObject.put("date", recordSet.getString("rq")); jsonObject.put("sw", recordSet.getString("swdksj")); jsonObject.put("xw", recordSet.getString("xwdksj")); jsonObject.put("sfkg", recordSet.getString("sfkg")); jsonArray.add(jsonObject); out.print(jsonArray.toString()); out.println("1沈哈哈!!!!!!!!!!!!!!!!!!!"); } } catch (Throwable var8) { throw var8; } } }
这段代码可以进行优化,比如可以将JSONObject和JSONArray的创建放在while循环外面,避免重复创建对象,提高效率。同时,可以考虑使用PreparedStatement代替Statement,避免SQL注入攻击。另外,可以使用try-with-resources语句来自动关闭资源,避免资源泄露。
Reason:weaver.conn.mybatis.MysqlScriptRunnerException: java.sql.SQLException: Error executing 'DROP TRIGGER IF EXISTS Tri_I_DeptKPICheckFlow ' (line 4): Trigger does not exist怎么解决
这个错误提示是指在执行 DROP TRIGGER 语句时,触发器 Tri_I_DeptKPICheckFlow 并不存在,因此无法删除。
解决方法可以有以下几种:
1. 确认 Tri_I_DeptKPICheckFlow 触发器是否存在,可以通过 SHOW TRIGGERS 命令或者在数据库中查找该触发器来确认。
2. 重新编写 DROP TRIGGER 语句,确保语句中引用的触发器名称正确无误。
3. 如果触发器确实不存在,那么可以忽略该错误信息,因为本来就没有需要删除的触发器。在实际应用中,可以在执行 DROP TRIGGER 语句前先判断触发器是否存在,如果不存在则不用执行删除操作。
希望这些方法可以帮助到你解决问题。
阅读全文