join中的列名相同在resultset中获取“column not found”错误

1szpjjfi  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(532)

我有三张table firm , shipp 以及 supplier .
所有三列的列名与 id , name , city ... 其他。
我用java编写了一个连接:

String Query = "SELECT s.name Sname,s.city Scity,f.name Fname,f.city Fcity,"
        +"su.name Suname,su.city Sucity "
        +"FROM `order_details` ot "
        +"INNER JOIN `order` o ON ot.odr_id = o.odr_id " 
        +"INNER JOIN `product` p ON ot.pro_id = p.id "
        +"INNER JOIN `firm` f ON o.firm_id = f.id "
        +"INNER JOIN `shipp` s ON o.shipp_id = s.id "
        +"INNER JOIN `supplier` su ON o.sup_id = su.id ";
``` `product` , `order` 以及 `order_details` 是join中使用的其他表。
此查询在phpmyadmin中工作。
但在 java  `ResultSet` 给出“找不到列'sname'。错误。
我尝试过以下解决方案,但这些方法对我无效:
1) java.sq.sqlexception:找不到列
2) 奇怪的sqlexception:找不到列
3) 很多其他人,但没有人工作
错误堆栈:
java.sql.sqlexception:找不到列“sname”。
在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:1074)
在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:988)
在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:974)
在com.mysql.jdbc.sqlerror.createsqlexception(sqlerror。java:919)
以及:
严重:空
请帮帮我!
提前谢谢。

## 编辑1:

问题再现:
当我只从一个别名表(例如。 `shipp` )然后它会很好地获取数据:

SELECT s.name Sname,s.city Scity ... other query part

但一旦我 `SELECT` 来自其他别名表的列(例如。 `shipp` ,  `firm` ,和 `supplier` )然后抛出上面写的错误异常(找不到列)。

SELECT s.name Sname,s.city Scity,f.name Fname,f.city Fcity,
su.name Suname,su.city Sucity ... other query part

注意:此查询在phpmyadmin中运行良好,但没有与一起运行 `ResultSet` 取回。
这就是我如何从 `ResultSet` ( `rs2` ):

String firstColumn = "";
String secondColumn = "";

while(rs2.next()) {
firstColumn = "Shipp to : ";
firstColumn += rs2.getString("Sname") + rs2.getString("Scity") ;
firstColumn += "Person : " + rs2.getString("Fname") +"+ "+ rs2.getString("Fcity");

secondColumn = "Supplier : " + rs2.getString("Suname");
secondColumn += rs2.getString("Suname");
secondColumn += rs2.getString("Sucity");

}

fbcarpbf

fbcarpbf1#

根据您的错误信息,我假设您正在使用 MySQL 使用最新的连接器。
如果需要,可以使用位置查询,这是使用可以在哪个位置上找到元素的编号,例如:

rs2.getString(1);

(是的,编号从1开始……)它应该与此等效(当然没有大写问题):

rs2.getString("Sname");

这样,您只需知道位置,但如果您查看数据库/驱动程序中的大小写敏感度,则基本上就是设置问题。为了解决大多数问题,如果可能的话,我用大写字母写我的查询,并且不打勾。
探索你的 ResultSet 对象请尝试以下操作:

Statement statement = ...;
String queryString = "SELECT s.name sname,s.city scity,f.name fname, f.city fcity, su.name suname, su.city sucity "
        +" FROM `order_details` ot "
        +" INNER JOIN `order` o ON ot.odr_id = o.odr_id "
        +" INNER JOIN `product` p ON ot.pro_id = p.id "
        +" INNER JOIN `firm` f ON o.firm_id = f.id "
        +" INNER JOIN `shipp` s ON o.shipp_id = s.id "
        +" INNER JOIN `supplier` su ON o.sup_id = su.id ";
ResultSet resultSet = statement.executeQuery(queryString);
ResultSetMetaData metaData = resultSet.getMetaData();
int colCount = metaData.getColumnCount();
if (resultSet.next()) {
    for (int i = 1; i <= colCount; i++) {
        System.out.println("Col(" + i + ") '" + metaData.getColumnName(i) + "' value:" + resultSet.getString(i));
    }
}else{
   System.out.println("No row found.");
}

此代码段将首先打印由您使用的驱动程序返回的列和值。

kx7yvsdv

kx7yvsdv2#

请检查是否已导入正确的jdbc连接包 com.mysql.jdbc.connection . 你本可以进口的 java.sql.connection 而是像这里一样

相关问题