我有三个表公司
,船舶
和供应商
。
所有三列的列名都与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\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中运行良好,但未与
ResultSet
fetch一起运行。
这就是我如何从
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");
}
请检查是否已导入正确的jdbc连接包com。mysql。jdbc。连接
。您可以导入java。sql。连接
与此处相同
根据您的错误消息,我假设您正在使用带有最新连接器的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个子查询,但是必须有一种更清洁的方法。另外,如果您想提一个更好的数据库结构,我也很乐意为将来的数据库生产做准备