Java JDBC中的Concat SQL [关闭]
Posted
技术标签:
【中文标题】Java JDBC中的Concat SQL [关闭]【英文标题】:Concat SQL in Java JDBC [closed] 【发布时间】:2021-06-30 08:52:10 【问题描述】:我想创建一个表,显示来自 mysql 的两个字段的连接,并将其放入 java 中的一个(表)字段中。
pst = connection.prepareStatement("select patientId,concat(pFirstname,' ', pLastname), pAge, pAddress from infopatient");
这是我收到的错误,但我的数据库中有 pFirstname 和 pLastname。
java.sql.SQLException: 列 'concat(pFirstname,' ',pLastname)' 未找到。
【问题讨论】:
为这个表达式添加别名。 只是一个猜测:你可能需要给它一个名字:CONCAT(...) AS some_name
请发布minimal reproducible example 和完整的异常堆栈跟踪
【参考方案1】:
这里有两个选择。首先,您可以使用序数访问您的结果集,例如:
pst = connection.prepareStatement("SELECT patientId, CONCAT(pFirstname, ' ', pLastname), pAge, pAddress FROM infopatient");
ResultSet rs = pst.executeQuery();
while (rs.next())
String fullName = rs.getString(2); // access second column of your select
另一个选项,正如 cmets 中所暗示的那样,就是给连接的字段一个别名,例如
String sql = "SELECT patientId, CONCAT(pFirstname, ' ', pLastname) AS fullName, pAge, pAddress FROM infopatient"
pst = connection.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while (rs.next())
String fullName = rs.getString("fullName"); // access via alias
我通常更喜欢第二个选项,因为它更直观、更易读,而且如果选择的顺序发生变化(而第一个版本没有变化),它也很健壮。
【讨论】:
第一个选项不安全。如果没有指定别名,则表达式文本被用作别名,这可能会导致代码中不可预测的时刻出现问题(有时可能很难定位),这可能看起来绝对不相关。 @Akina 不,在第一种情况下,选择列表的顺序不应该取决于是否有别名。正如我所指出的,选项 #2 更可取,因为如果有人重构选项 #1 中的选择,它可能会无意中破坏代码。 在第一种情况下,选择列表的顺序不应该取决于是否有别名。我对此一无所知。我的意思是,如果没有别名,列名包含对象名称中不合法的符号,这可能会导致问题。 OP 遇到的问题会立即发生并且很明显 - 但在另一种情况下,它可能会发生在一些异国情调的地方。 哦...我没有想到这一点,好点。使用别名版本的另一个原因。以上是关于Java JDBC中的Concat SQL [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: SQL 语句在 org.hsqldb.jdbc.JDBCUtil.sqlException 处关闭
SQL语法错误-CONCAT,控制台-BigQuery [关闭]