我有一个名为student的表的访问数据库,并且在那里有一个Id
字段。我创建了一个Java applet,当我在TextField1
中输入Id的值时小程序并按下Display
按钮,小程序应在TextFields中显示学生的其他详细信息。
这是我的“显示”按钮的代码。
if(command=="Dispaly"){
try{
int stId=Integer.parseInt(textField1.getText());
ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=stId");
但是由于参数太少而产生错误。期望1。
但如果我将查询更改为
ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=3");
(那是id = 3的学生)它运作正常 我的代码出了什么问题?有人可以把它展示给我吗?
答案 0 :(得分:3)
您的查询失败,因为数据库引擎无法知道stId
的含义。您需要将该值作为参数传递,如此
PreparedStatement state = conn.prepareStatement("SELECT * FROM student WHERE Id=?");
int stId=Integer.parseInt(textField1.getText());
state.setInt(1, stId);
ResultSet result=state.executeQuery();
答案 1 :(得分:1)
在您的查询中将始终生成此SQL" SELECT*FROM student WHERE Id= stId
"
而你真正需要的是用stId变量的值替换它。
因此您必须将查询的stId附加到"SELECT*FROM student WHERE Id="+ stId
将此行更改为..
ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id="+ stId);
您可以阅读有关准备好的参数的更多信息(动态将参数传递给查询)https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
我希望这可以帮助你!