【问题标题】:using ORDER BY in a prepared statement在准备好的语句中使用 ORDER BY
【发布时间】:2016-01-04 19:37:15
【问题描述】:

我正在创建一个 Web 应用程序,该应用程序使用 Java MVC 数据库中的数据显示一个表。

我有一个准备好的语句,用于生成可以正常工作的表,直到我尝试使用 ORDER BY。

我很困惑,因为当我在 mySQL 工作台中运行此查询时它工作正常:

SELECT * FROM appointments ORDER BY date

但是,当我将它放入浏览器中的准备好的语句中时,它会返回一个无序列表。

public void doRead(){
    String query = "SELECT * FROM appointments ORDER BY date";

    try {
        PreparedStatement ps = this.connection.prepareStatement(query);
        this.results = ps.executeQuery();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

不胜感激。

根据要求,我在此处使用此方法打印表格:

try {
        while(this.results.next()){
            Appointment appointment = new Appointment();
            appointment.setAppointmentID(this.results.getInt("appointment_id"));
            appointment.setDescription(this.results.getString("description"));
            appointment.setDate(this.results.getString("date"));

            table += "<tr>";
            table += "<td>";
            table += appointment.getDescription();
            table += "</td>"; 
            table += "<td>";
            table += appointment.getDate();
            table += "</td>";
            table += "</tr>";
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    table += "</table>";
    return table;
}

浏览器中的输出:

牙医 2015-09-17

牙医 2015-09-17

牙医 2015-09-17

牙医 2015-10-09

牙医 2015-09-03

牙医 2015-09-03

牙医 2015-09-03

【问题讨论】:

  • 向我们展示您是如何打印它们的
  • 你以后不能从java中排序吗?
  • 您是否将结果存储到不保留顺序的东西中,例如 HashSet?
  • 当它不起作用时会发生什么?顺序错了还是异常?
  • 已编辑答案@sᴜʀᴇsʜᴀᴛᴛᴀ

标签: java mysql spring-mvc


【解决方案1】:

DATE 是reserved word。使用反引号:

String query = "SELECT * FROM appointments ORDER BY `date`";

最好将results 设为局部变量并关闭它。

提示:

table 使用 StringBuilder 而不是 String。更快,更少的内存消耗。更好的是传递一个 PrintWriter 进行输出。

【讨论】:

  • 嗨,感谢您的回答,但不幸的是,这对@JoopEggen 的结果没有影响,我也尝试按订购方式订购,但还是一样
【解决方案2】:

尝试添加排序顺序“ASC”:

SELECT * FROM appointments ORDER BY date ASC

【讨论】:

  • 如果您不添加订购方向,"ASC" 是默认行为。所以没有必要。
猜你喜欢
  • 2018-06-03
  • 2021-07-24
  • 2011-02-02
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多