当前位置: 首页 > 知识库问答 >
问题:

联接中的相同列名在ResultSet中获取“column not found”错误

唐俊英
2023-03-14

我有三个表公司船舶供应商

所有三列的列名都与idnamecity相同。。。另外

我在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 ";

productorderorder\u details是join中使用的其他表。

此查询在phpMyAdmin中工作。

但是在javaResultSet中,给出了没有找到列Sname.错误。

我尝试过以下解决方案,但这些方案对我不起作用:

1) 爪哇。sq.SQLException:未找到列

2)奇怪的SQL异常:未找到列

3) 很多其他人,但没有人工作

错误堆栈:

JAVAsql。SQLException:未找到列“Sname”
在com上。mysql。jdbc。SQLError。com上的createSQLException(SQLError.java:1074)
。mysql。jdbc。SQLError。com上的createSQLException(SQLError.java:988)
。mysql。jdbc。SQLError。com上的createSQLException(SQLError.java:974)
。mysql。jdbc。SQLError。createSQLException(SQLError.java:919)

和:

严重:空

请帮帮我!

提前谢谢。

问题:

当我只从一个别名表(例如ship)获取数据时,它会很好地获取数据

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

但是一旦我从其他别名表(例如Ship公司供应商)中选择列,它就会抛出上面写的错误异常(找不到列)。

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

注意:此查询在phpmyadmin中运行良好,但未与ResultSetfetch一起运行。

这就是我如何从ResultSetrs2)获取列:

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");
}

共有2个答案

曹浩
2023-03-14

请检查是否已导入正确的jdbc连接包com。mysql。jdbc。连接。您可以导入java。sql。连接与此处相同

邰宇
2023-03-14

根据您的错误消息,我假设您正在使用带有最新连接器的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.");
}

此片段将首先打印所使用的驱动程序返回的列和值的结果。

 类似资料:
  • 我有三个表、和。 此查询在phpMyAdmin中工作。 但在java中给出“未找到列'sname'”。错误。 错误堆栈: 严重:空 请帮帮我! 提前道谢。

  • 问题内容: 该查询工作正常。但是问题是,产品表和类别表都具有名为“ name”和“ id”的字段。因此,当我获取此查询的结果时,它只给我一个名称和一个ID,但同时又需要ID和名称。 我如何做到这一点而不必重命名字段?是否可以使用自定义名称(例如product_name和category_name)返回? 问题答案: 您可以将别名添加到字段:

  • 问题内容: 假设我有一个类似的查询 也许两个表都具有相同的列名。所以我虽然很高兴通过访问数据 但这事与愿违,我一无所获。我阅读了API,但是他们并没有真正谈论这种情况。这样的功能供应商依赖吗? 问题答案: JDBC将仅通过查询中指定的名称来命名列-它不知道表名等。 您有两种选择: 选项1: 在查询中使用不同的名称命名列,即 然后在您的Java代码中参考列别名: 选项2: 在对JDBC API的调用

  • 除了去掉“D”之外,有没有办法。从第一个查询开始,使第一个代码段不抛出错误消息? 以下是源代码:

  • 问题内容: 在pandas中,给定一个DataFrame D: 当三列或更多列返回以下内容时,如何返回其所有列具有相同内容的行: 请注意,当所有值均为NaN时,它将跳过行。 如果这仅仅是两列,我通常会这样做,但是我不知道如何针对两列以上的DataFrames进行概括。 问题答案: 与Andy Hayden的答案类似,检查min是否等于max(然后所有行元素都是重复的):

  • 问题内容: 没有多个子查询,我想不出一个查询此问题的好方法。我无法重组表,所以这不是一种选择。设置如下: 面对面的每个ID的类型均为person_status_types。我需要提取的是每个id的本人的status_type_name。 所以return语句看起来像这样: 现在,我只在做4个子查询,但是必须有一种更清洁的方法。另外,如果您想提一个更好的数据库结构,我也很乐意为将来的数据库生产做准备