我有两个表“Table1”,其中列为user_name,密码和课程ID,另一个表为“course”,列为course_id,course_name。我使用以下代码根据从表1中收到的user_name显示课程ID登录页面。使用ResultSet rs1.now我想根据从“Table1”收到的课程ID从表“course”中检索course_name。对于第二个查询pstmt2.setString(1,);我应该用什么参数来获取上一个查询的course_id值
HttpSession sess=request.getSession();
String a=(String)sess.getAttribute("user");
String b=(String)sess.getAttribute("pass");
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:ggg");
Statement st = con.createStatement();
String query="select * from Table1 where user_name=?";
PreparedStatement pstmt=con.prepareStatement(query);
pstmt.setString(1,a);
ResultSet rs1=pstmt.executeQuery();
while(rs1.next())
out.println("<h3>COURSE ID: "+rs1.getString("course ID")+"<h3>");
String query2="SELECT * from course where course_id=?";
PreparedStatement pstmt2=con.prepareStatement(query2);
pstmt2.setString(1,);
ResultSet rs2=pstmt2.executeQuery();
while(rs2.next())
{
out.println("<h3>course name: "+rs2.getString("course_name")+"<h3>");
}
答案 0 :(得分:2)
即使您创建了一次连接对象,为什么要进行两次数据库命中。
修改查询如下
SELECT * from course where course_id = (select course_id from Table1 where user_name=?);
从这个查询中你也没有给出courseid的输入。
答案 1 :(得分:1)
无需点击数据库两次即可获得所需的结果。使用查询
从table1选择table1.course_id,course.course_name,其中table1.course_id = course_id和table1.user_name =?
答案 2 :(得分:0)
这应该设置course_id参数:
pstmt2.setString(1,rs1.getString("course_id"));
或者,正如我看到“course_id”列在“Table1”中可能有不同的名称:
pstmt2.setString(1,rs1.getString("course ID"));
答案 3 :(得分:0)
正如另一篇文章提到的那样,没有必要去另一组查询。试试这个例子查询:
SELECT course.course_id, course.course_name
FROM table1 t1
INNER JOIN course c
ON t1.course_id = c.course_id
WHERE t1.user_name = ?;
现在,如果您坚持编码,pstmt2.setString(1,);
的参数是:
pstmt2.setString(1,rs1.getString("course_id")); //or course ID defending on your column name