【问题标题】:Getting database values into a applet将数据库值放入小程序
【发布时间】:2014-11-15 12:42:30
【问题描述】:

我有一个访问数据库,其中有一个名为 student 的表,其中有一个 Id 字段。我创建了一个 Java 小程序,当我在小程序中的 TextField1 中输入 Id 值并按下 Display 按钮时,小程序应在 TextFields 中显示学生的其他详细信息。

这是我的“显示”按钮代码。

if(command=="Dispaly"){
    try{
    int stId=Integer.parseInt(textField1.getText());
        ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=stId");

但这会导致错误,因为参数太少。Expected1。

但如果我将查询更改为

ResultSet result=state.executeQuery("SELECT*FROM student WHERE Id=3");

(这适用于 id=3 的学生)它工作正常。
我的代码有什么问题?有人可以给我看看吗?

【问题讨论】:

    标签: java mysql database ms-access applet


    【解决方案1】:

    您的查询失败,因为数据库引擎无法知道stId 的含义。您需要将该值作为 参数 像这样传递

    PreparedStatement state = conn.prepareStatement("SELECT * FROM student WHERE Id=?");
    int stId=Integer.parseInt(textField1.getText());
    state.setInt(1, stId);
    ResultSet result=state.executeQuery();
    

    【讨论】:

      【解决方案2】:

      在你的查询中总会生成这条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
      我希望这会有所帮助!

      【讨论】:

      • 又一个数据库新手被告知要编写动态 SQL,而不是正确地使用参数化查询。 -1
      • @MuhammadHamed 当我尝试使用此preparedStatement 插入时,我收到错误driver does not support this function这是我所做的String query = "INSERT INTO student (Id,studentName,age)"+ " VALUES(?, ?, ?)"; PreparedStatement state = con.prepareStatement(query); state.setInt (1, value1); state.setString (2, value2); state.setInt (3, value3); state.executeUpdate("INSERT INTO student (Id,studentName,age) VALUES ("+value1+","+value2+","+value3+")");
      • 您没有再次通过查询.. 只需 state.executeUpdate();
      猜你喜欢
      • 1970-01-01
      • 2012-03-06
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多