gpt4 book ai didi

java - Sqlite + java,准备好的语句有奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 08:39:25 26 4
gpt4 key购买 nike

我遇到了一个我无法真正解释的问题,使用 java/sqlite:

    String sql = "Select date, type FROM line ORDER BY ?";
PreparedStatement st = DB.getConnexion().prepareStatement(sql);
st.setString(1, sort);
ResultSet rs = st.executeQuery();

这段代码给了我错误的顺序(默认顺序)[相信我,我检查并重新检查了参数是否正确]

    String sql = "Select date, type FROM line ORDER BY " + sort;
PreparedStatement st = DB.getConnexion().prepareStatement(sql);
//st.setString(1, sort);
ResultSet rs = st.executeQuery();

这一个产生了预期的结果。我在这里有点不知所措,这对我来说毫无意义。我试图重新启动 eeclipse,重建项目,直接从 sqlite 浏览器测试我的请求,在每个可能的地方检查参数和结果,但似乎 sqlite 的 setString() 函数没有正确地属性我的参数,它甚至没有崩溃或产生错误。

我要么错过了一些非常愚蠢的东西,要么这里发生了一些非常错误的事情。

最佳答案

SQL 引擎接受了这种语法,这真是令人惊讶。它可能会在其他一些人身上失败。

无论如何,sort 被解释为字符串常量,因此所有行对于排序算法都将具有相同的值。因此,由于它们具有相同的值,因此它保持原来的顺序。

你不能使用这样的动态语句,唯一的方法是第二种解决方案,将排序直接附加到语句字符串。

关于java - Sqlite + java,准备好的语句有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com