如何使用 getParameterNames() 值

How to use getParameterNames() value

我使用 getParameterNames 从 UI 获取参数名称和值到我的 servlet。现在我想将这些值用于 运行 我的查询,但我不知道该怎么做 我在这样做时遇到错误

我在做什么

来自 Ui 拥有动态星,因此使用 getParameterNames() 获取值,然后尝试使用该值。

如果用户选择 5 颗星,我会得到它的参数及其值 1,因为 excellent 在我的数据库中被定义为 1 very good 为 2 等等 poor作为 5.

所以我得到了点击保存后的值

Parameter Name is 'Quality Of Food' and Parameter Value is '3'
Parameter Name is 'Cleanliness' and Parameter Value is '3'
Parameter Name is 'Service' and Parameter Value is '3'
Parameter Name is 'Staf Behavior' and Parameter Value is '3'
Parameter Name is 'Ambience' and Parameter Value is '2'

现在我运行在我的 Java servlet doPost class 中查询以获取值的各个属性。例如,值 2 的属性名称是 excellent 这样的。

之后我必须将所有这些数据插入到我的数据库中。

最主要的是所有星星都是动态的,因为来自数据库 JSON 所以它目前可能会有所不同 我有 5-5 颗星的 5 个属性显示在 UI 上点击后台提交获取数据

我的代码

Connection con = null;
    Statement statement = null;
    java.util.Date dateUtil = new Date();
    java.sql.Date dateSql = new java.sql.Date(dateUtil.getTime());
    java.sql.Timestamp timestamp = new Timestamp(dateUtil.getTime());

    try {
        con = DBConnection.createConnection();
        statement = con.createStatement();
        Enumeration en = request.getParameterNames();
        while (en.hasMoreElements()) {
            Object objOri = en.nextElement();
            String param = (String) objOri;
            String value = request.getParameter(param);
             System.out.println("Parameter Name is '" + param + "' and Parameter Value is '" + value + "'");
            String getSql = "select ATTRIBUTENAME from FEEDBACKATTRUBUTES where POSITIONNO=" + value
                    + " and ATTRIBUTETYPE ='STARRING'";
            String updateSql = "INSERT INTO CUSTOMERFEEDBACK (CUSTOMERID, CUSTOMERNAME, BILLNO, BILLDATE, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10, REMARKS, CREATEDTIMESTAMP, SMSSENT)"
                    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

            ResultSet resultSet = statement.executeQuery(getSql);
            while (resultSet.next()) {
                String attributeName = resultSet.getString("ATTRIBUTENAME");
                PreparedStatement ps = con.prepareStatement(updateSql);
                ps.setString(1, "123456");
                ps.setString(2, "Dheeraj");
                ps.setString(3,"-");
                ps.setDate(4,dateSql);
                ps.setString(5, param+":"+attributeName); //how can i insert these values
                ps.setString(6, param+":"+attributeName);
                ps.setString(7, param+":"+attributeName);
                ps.setString(8, param+":"+attributeName);
                ps.setString(9, param+":"+attributeName);
                ps.setString(10, param+":"+attributeName);
                ps.setString(11, param+":"+attributeName);
                ps.setString(12, param+":"+attributeName);
                ps.setString(13, param+":"+attributeName);
                ps.setString(14, param+":"+attributeName);
                ps.setString(15, "remark");
                ps.setTimestamp(16, timestamp);
                ps.setString(17, "N");

                ps.addBatch();
                ps.executeBatch();
            }

        }

    } catch (SQLException e) {
        System.out.println("SQL EXCPTION   91");
        e.printStackTrace();
    }

正如在我的代码中一样,您可以从 ps.setString(5, param+":"+attributeName); //how can I insert these values 这一行参数和值(我正在插入的属性名称)中进行检查,但是对于我必须的所有其他属性,我只有 UI 中的 5 个属性值插入 -.

我的主要问题是目前我的 UI 上只有五个属性,但在 Java class 插入查询中,我必须插入 5 个属性,其他属性为 null 或 -.

为了更好的理解,this is my UI.

您需要修改流程的顺序,首先需要将参数及其值存储在本地,然后将它们添加到准备好的语句中,然后再执行。 这是执行此操作的代码的修改版本:

Connection con = null;
    Statement statement = null;
    java.util.Date dateUtil = new Date();
    java.sql.Date dateSql = new java.sql.Date(dateUtil.getTime());
    java.sql.Timestamp timestamp = new Timestamp(dateUtil.getTime());

    try {
        con = DBConnection.createConnection();
        statement = con.createStatement();
        Enumeration en = request.getParameterNames();
        LinkedHashMap<String, Integer>  evaluation = new LinkedHashMap<>();
        HashMap<Integer,String >  classifications = new HashMap<>();  
        String getSql = "select ATTRIBUTENAME,POSITIONNO from FEEDBACKATTRUBUTES where ATTRIBUTETYPE ='STARRING'";
        ResultSet resultSet = statement.executeQuery(getSql);
        while (resultSet.next()) {
            classifications.put(resultSet.getInt("POSITIONNO"),resultSet.getString("ATTRIBUTENAME"));
        }

        while (en.hasMoreElements()) {
            Object objOri = en.nextElement();
            String param = (String) objOri;
            String value = request.getParameter(param);
            System.out.println("Parameter Name is '" + param + "' and Parameter Value is '" + value + "'");
            evaluation.put(param,Integer.parseInt(value));
         }  

            String updateSql = "INSERT INTO CUSTOMERFEEDBACK (CUSTOMERID, CUSTOMERNAME, BILLNO, BILLDATE, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, ATTRIBUTE6, ATTRIBUTE7, ATTRIBUTE8, ATTRIBUTE9, ATTRIBUTE10, REMARKS, CREATEDTIMESTAMP, SMSSENT)"
                    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

            PreparedStatement ps = con.prepareStatement(updateSql);
            ps.setString(1, "123456");
            ps.setString(2, "Dheeraj");
            ps.setString(3,"-");
            ps.setDate(4,dateSql);
            Iterator<Map.Entry<String, String>> evaluationIterator = evaluation.entrySet().iterator();
            int i = 5;
            while (i<15) {
                if(evaluationIterator.hasNext()){
                Map.Entry<String, String> entry = evaluationIterator.next();
                ps.setString(i, entry.getKey()+":"+classifications.get(entry.getValue()));
                }
                else{
                    ps.setString(i, "");
                }
                i++;
            }
            ps.setString(15, "remark");
            ps.setTimestamp(16, timestamp);
            ps.setString(17, "N");

            ps.addBatch();
            ps.executeBatch();




    } catch (SQLException e) {
        System.out.println("SQL EXCPTION   91");
        e.printStackTrace();
    }

请告诉我这是否适合您,请注意代码未经测试,可能包含错误。