有三个表<Table 1>, <Table 2> and <Table 3>
JDBC左连接3台
我的SQL是这样的:
"Select table1.col1, table1.col2, table1.col3, table2.col4, table2.col5, table2.col6,
table3.col7, table3.col8 from Table 1 as table1
LEFT JOIN Table 2 as table2 on (table1.col1 = table2.col4)
LEFT JOIN Table 3 as table3 on (table1.col1 = table3.col8)"
正常的方式来获得结果集是:
public List getExportDataList() throws ClassNotFoundException, SQLException {
Connection connect = null;
String url = "jdbc:.....";
String username = "username ";
String password = "password ";
try {
connect = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
System.out.println("in exec");
System.out.println(ex.getMessage());
}
List dataList = new ArrayList<>();
PreparedStatement pstmt = connect.prepareStatement(
THE SQL CODE SHOWN ABOVE
}
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Table1 table1 = new Table1();
table1.setCOL1(rs.getString("col1"));
table1.setCOL2(rs.getString("col2"));
dataList.add(table1);
}
rs.close();
pstmt.close();
connect.close();
return dataList;
}
从而使“dataList”可用于在Primefaces数据表中显示数据。
但是,这种方式只能将表1中的列保存到“dataList”中。我试图dataList.add(table2)
以及dataList.add(table3)
在同一时间,但有一个错误:“/reportGenerate.xhtml @ 50,75值=”#{reportData.dateCreated}“:类‘net.picary.model.Liaison’没有'dateCreated'属性。“
有人能告诉我如何将三个表中的所有选定列保存到“dataList”中吗?或者有其他的方法来实现它?
请显示你使用的确切代码和你得到的错误。另外请注意,当您按列名检索值时,您需要确保这些名称是唯一的。现在,您的结果集中有多列'col1',但您只能使用该名称检索第一个列,请参阅[这里](http://stackoverflow.com/a/42410902/466862)。 –
正如@Mark所示,您可能需要使用列别名来确保ResultSet中的列名是唯一的:'SELECT table1.col1 AS t1_col1,table2.col1 AS t2_col1,...' –
感谢您的回复。这是错误: “/reportGenerate.xhtml @ 50,75 value =”#{reportData.dateCreated}“:类'net.picary.model.Liaison'没有属性'dateCreated'。” – vennis