Java Struts 2将Json从DAO获取到action类中

Java Struts 2将Json从DAO获取到action类中,java,jquery,sql,json,struts2,Java,Jquery,Sql,Json,Struts2,我对这个问题有一些独特的理解。我有jqueryajax调用,它调用Struts2动作类,然后调用DAO来获取一些数据。然而,由于某些原因,我并没有得到任何数据或错误,只是在action类中添加DAO操作时得到一个空白响应。出了点问题,我需要一些眼睛来告诉我出了什么问题 这是我的ajax电话 $.ajax({ url: "S2", //force to handle it as text dataType: 'json',

我对这个问题有一些独特的理解。我有jqueryajax调用,它调用Struts2动作类,然后调用DAO来获取一些数据。然而,由于某些原因,我并没有得到任何数据或错误,只是在action类中添加DAO操作时得到一个空白响应。出了点问题,我需要一些眼睛来告诉我出了什么问题

这是我的ajax电话

 $.ajax({
            url: "S2",
            //force to handle it as text
            dataType: 'json',
            type: 'GET',
            cache: false,
            contentType: "application/json;charset=utf-8",
            data:{state_code:state_code },
            beforeSend: function (xhr, setting) {
                var url = setting.url;
                url = url.replace("&_=", "&t=");
                setting.url = url;
                },
            success: function (data) {              
                console.log(JSON.stringify(data));
            }
        });
这是我的刀课

public List<BnGetCitiesbyStateCodeBn> GetCitiesbyStateCode(String state_code) throws SQLException {
        List<BnGetCitiesbyStateCodeBn> cities = new LinkedList<>();
        if (dbConnection != null) {
            Statement stmt = dbConnection.createStatement();

            try {
                rs = stmt.executeQuery("select Distinct(city) from cities_extended WHERE state_code = '" + state_code + "'");
                while (rs.next()) {
                    BnGetCitiesbyStateCodeBn city = null;
                    city = new BnGetCitiesbyStateCodeBn();
                    city.setState_code(rs.getString("state_code"));
                    city.setCity(rs.getString("city"));
                    cities.add(city);
                    logger.info("Cities retreived are " + cities);
                    System.out.println(cities);
                }
            } catch (Exception e) {
                logger.info("Error retreving Cities " + e);
            } finally {
                dbConnection.close();
            }
        }
        return cities;

    }
每当我注释掉对我的DAO的调用时,我都会得到json响应,一切都像log4j2等,但是当我取消注释该部分时,我会得到空白响应。所以我猜我的json配置可能缺少一些东西

如果有人能看一下并告诉我,我将不胜感激

好吧我想我找到了原因

logger.info("state code in dao class is " + state_code);
                try {
                    rs = stmt.executeQuery("select Distinct city,state_code from cities_extended WHERE state_code = 'AL'");
                } catch (SQLException ex) {
                    logger.error("SQL Exception executing query" +ex);
                }

当我从ui传递
state\u code
时,它会变得一团糟,当我像AL一样硬编码值时,它会给出非常好的结果。参数名称中的下划线有什么害处吗?

您应该在第行获得SQL异常

rs = stmt.executeQuery("select Distinct(city) from cities_extended WHERE state_code = '" + state_code + "'");
distinct
不是函数,而是语句,请参见定义和用法示例。您需要修改查询

rs = stmt.executeQuery("select Distinct city from cities_extended WHERE state_code = '" + state_code + "'");

在这一更改之后,一切都应该像log4j2等一样工作。

我没有看到我和Andrea之前对这篇文章的评论。有人删除了评论吗?你确定你的dao返回的不是空列表吗?正在检查Aleksandr。我会很快让你知道的。上次我检查它是否正常工作。但让我再次检查。是的,我确实收到了SQL异常。我正在修复并重试。感谢Roman,我认为这是由于sql错误或参数命名问题造成的,只是进行了一些更新。请看帖子顶部。Eureka,最后我得到了所有Json回复。。。糟糕的查询几乎花了一天的时间。谢谢你,罗曼。非常感谢。下一个任务是在jquery对话框中列出它。这是另一个错误,但为了好玩,您说我得到了json响应,一切正常。错误出现在
beforeSend
函数中,您可以在该函数中更改参数名称。这些名称应绑定到action类以填充参数值。我不确定参数名是否应该遵循JavaBeans约定,为了可读性和使用Java代码约定,应该使用驼峰式。我在action类state_code和t中也有这样的约定,如果您查看query和dao类,有一列我没有获取结果并将其添加到列表中。也解决了这个问题。有时,在myphp和netbeans之间来回切换会造成混乱的体验。:)
logger.info("state code in dao class is " + state_code);
                try {
                    rs = stmt.executeQuery("select Distinct city,state_code from cities_extended WHERE state_code = 'AL'");
                } catch (SQLException ex) {
                    logger.error("SQL Exception executing query" +ex);
                }
rs = stmt.executeQuery("select Distinct(city) from cities_extended WHERE state_code = '" + state_code + "'");
rs = stmt.executeQuery("select Distinct city from cities_extended WHERE state_code = '" + state_code + "'");