MySQL/Java帮助-通过eclipse更新方法

MySQL/Java帮助-通过eclipse更新方法,java,mysql,jdbc,Java,Mysql,Jdbc,我正在为我的训练营做一项任务,这一点让我感到困惑,任务的细节如下 任务: 创建一个使用mySQL的java程序。该计划应该 向用户显示以下菜单: 输入玩具 更新玩具 删除玩具 搜索玩具 出口 我已经创建了整个程序,并用我建立的数据库对其进行了测试,所有方面和它们的方法都有效——除了更新玩具方法。我放了一张数据库的图片,以供参考和更新方法,这是关于第五次返工,我知道这是错误的,但我尝试过的都没有成功。任何关于我错在哪里的建议或解释都会很有帮助——如果你能给我指出正确的方向,那就太好了 stati

我正在为我的训练营做一项任务,这一点让我感到困惑,任务的细节如下

任务:

创建一个使用mySQL的java程序。该计划应该 向用户显示以下菜单:

  • 输入玩具
  • 更新玩具
  • 删除玩具
  • 搜索玩具
  • 出口
  • 我已经创建了整个程序,并用我建立的数据库对其进行了测试,所有方面和它们的方法都有效——除了更新玩具方法。我放了一张数据库的图片,以供参考和更新方法,这是关于第五次返工,我知道这是错误的,但我尝试过的都没有成功。任何关于我错在哪里的建议或解释都会很有帮助——如果你能给我指出正确的方向,那就太好了

    static void updateMethod(){
    //连接
    String url=“jdbc:mysql://localhost:3306/toyshop";
    字符串username=“root”;
    字符串password=“SlytherinPr1de”;
    试一试{
    Connection conUpdate=DriverManager.getConnection(url、用户名、密码);
    System.out.println(“连接到数据库-从记录更新开始:”);
    //设置方法
    //获取要更新的项的id,以便在表中找到并更新该项:
    Scanner updateRow=新扫描仪(System.in);
    System.out.println(“请输入您希望更新的项目的id:”;
    字符串toyToUpdate=updateRow.nextLine();
    扫描仪更新1=新扫描仪(System.in);
    System.out.println(“请输入新玩具名称:”);
    字符串名称update1=update1.nextLine();
    Scanner update2=新的扫描仪(System.in);
    System.out.println(“请输入新公司:”);
    字符串computepdate2=update2.nextLine();
    扫描仪更新3=新扫描仪(System.in);
    System.out.println(“请输入新数量:”);
    字符串qtyUpdate3=update3.nextLine();
    String sql=“UPDATE toys SET name=“+nameUpdate1+”,company=“+CompuUpdate2+”,Qty=“+qtyUpdate3+”,其中id=“+toyToUpdate;
    PreparedStatement=conUpdate.prepareStatement(sql);
    int rowsUpdated=sql;
    如果(rowsUpdated>0){
    System.out.println(“玩具ID“+toyToUpdate+”的现有记录已成功更新。”);
    }
    updateRow.close();
    update1.close();
    update2.close();
    update3.close();
    }捕获(SQLE异常){
    System.out.println(“方法错误-检查代码并重试”);
    e、 printStackTrace();
    }
    }
    
    一种可能是,在表中为每一列插入所有“字符串值”时使用了错误的数据类型,但由于其他函数可以工作,我假设表中所有列的数据类型都是字符串

    我可以在update语句中看到一个错误,即您忘记在update语句中的每个字段后添加一个coma

    分号也丢失了,但由于它是一个单独的语句,因此不使用分号也可以工作,尽管通常它会在单独的语句中自动添加分号,但我仍然建议手动添加)

    声明应为:

    String sql = "UPDATE toys SET name = " + nameUpdate1 + ", company = " + compUpdate2 + ", Qty = " + qtyUpdate3 + "WHERE id = " + toyToUpdate + ";";
    
    update语句的语法为:

    UPDATE table_name 
    SET column1 = value1, column2 = value2...., columnN = valueN 
    WHERE [condition];
    

    代码的第一个问题是使用4个
    扫描器
    对象来检索输入数据。
    您只需要1个
    扫描仪

    第二个问题是SQL语句的语法。
    需要逗号来分隔要更新的列。
    字符串参数值也必须用单引号括起来,但这不是安全且推荐的方法。
    由于您使用的是
    PreparedStatement
    ,因此还应该为每个字符串参数设置
    占位符,并使用方法
    setString()
    传递它们的值:


    非常感谢您的回复,我来看看。是的,为了简单起见,它们都被设置为字符串。逗号在哪里?我已经更新为包含逗号,正如建议的那样:)逗号在哪里不是什么东西。您的代码容易受到SQL注入的攻击。永远不要将值连接到查询字符串中。而是使用参数占位符和准备好的语句,然后在语句上设置参数值。非常感谢-我没有意识到扫描仪的问题,因为老师从未纠正过它-再次感谢你,我将修正其余的方法,以便在扫描仪上也遵循这些方法。@Nyxerian如果这个答案解决了您的问题,请不要忘记接受答案。
    static void updateMethod() {
        // the connection
        String url = "jdbc:mysql://localhost:3306/toyshop";
        String username = "root";
        String password = "SlytherinPr1de";
    
        try {
            Connection conUpdate = DriverManager.getConnection(url, username, password);
            System.out.println("Connected to Database - start with record update:");
    
            Scanner scanner = new Scanner(System.in);
            System.out.println("Please enter the id of the item you wish to update: ");
            String toyToUpdate = scanner.nextLine();
            System.out.println("Please enter the new toy name: ");
            String name = scanner.nextLine();
            System.out.println("Please enter the new company: ");
            String company = scanner.nextLine();
            System.out.println("Please enter the new quantity: ");
            String qty = scanner.nextLine();
            scanner.close();
    
            String sql = "UPDATE toys SET name = ?, company = ?, Qty = ? WHERE id = ?";
            PreparedStatement statement = conUpdate.prepareStatement(sql);
            
            statement.setString(1, name);
            statement.setString(2, company);
            statement.setString(3, qty);
            statement.setString(4, toyToUpdate);
    
            int rowsUpdated = statement.executeUpdate();
    
            if(rowsUpdated > 0) {
                System.out.println("The existing record for toy ID " + toyToUpdate + " has been successfully updated.");
            }
    
            statement.close();
            conUpdate.close();
        }catch(SQLException e) {
            System.out.println("Method Error - check code and retry.");
            e.printStackTrace();
        }
    }