[英]MySQL ResultSet JsonWriter: jsonWriter.value((java.sql.Date) resultSet.getObject(column));
[英]Assigning resultset column value to a variable for use in another SQL Statement?? Java
我正在用Java创建一个以数据为中心的Web服务,以部署到Glassfish。 到目前为止,除一种方法外,我所有的方法都可以正常工作。
我试图按照以下代码将结果集中的值分配给变量,以便在另一个SQL语句中使用。 我不确定是否可能,或者我的SQL错误,但是任何想法都将不胜感激。
ResultSet rset1 = stmt1.executeQuery("SELECT *
FROM WorkOrder
WHERE WorkOrderID = '"+workOrderID+"'");
Integer custID = rset1.getInt(3);
ResultSet rset2 = stmt2.executeQuery("SELECT *
FROM Customer
WHERE CustID = '"+custID+"'");
Integer quoteID = rset1.getInt(2);
ResultSet rset3 = stmt3.executeQuery("SELECT *
FROM Quote
WHERE QuoteID = '"+quoteID+"'");
您发布的内容可以而且应该在单个查询中完成-不太复杂,并且与数据库的来回流量较少[不必要]:
SELECT q.*
FROM QUOTE q
WHERE EXISTS (SELECT NULL
FROM CUSTOMER c
JOIN WORKORDER wo ON wo.custid = c.custid
WHERE c.quoteid = q.quoteid
AND wo.workorderid = ?)
不使用JOIN的原因是,如果与多个工作订单/客户/等相关,则存在重复QUOTE
值的风险。
另外:
您可以调用ResultSet.next()。
if(rset1.next())
{
Integer custID = rset1.getInt(3);
....
}
OMG Ponies提供的注释确实很重要,但是并不能真正回答问题。 AVD也是正确的。 我已经整理了一下,并包含了准备好的语句。 请使用准备好的语句。 他们将帮助您晚上入睡。
PreparedStatement pstmt1 = con.prepareStatement(
"SELECT * FROM WorkOrder WHERE WorkOrderID = ?");
PreparedStatement pstmt2 = con.prepareStatement(
"SELECT * FROM Customer WHERE CustID = ?");
PreparedStatement pstmt3 = con.prepareStatement(
"SELECT * FROM Quote WHERE QuoteID = ?");
pstmt1.setInt(1, workOrderId)
ResultSet rset1 = pstmt1.executeQuery();
// test validity of rset1
if(rset1.next()) {
pstmt2.setInt(1, rset1.getInt(3))
ResultSet rset2 = pstmt2.executeQuery();
// test validity of rset2
if(rset2.next()) {
pstmt3.setInt(1, rset1.getInt(2))
ResultSet rset3 = pstmt3.executeQuery();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.