【问题标题】:Conversion failed when converting the nvarchar value '....' to data type int将 nvarchar 值“....”转换为数据类型 int 时转换失败
【发布时间】:2020-04-17 01:30:46
【问题描述】:

我正在尝试在 JavaFx 中为我的表创建更新语句,但收到以下错误:

将 nvarchar 值“Ana”转换为数据时转换失败 输入整数。

我在 SQL Server 中创建了表。在我的数据库中,只有年龄来自 int 类型,其他都是字符串。

这是我的代码:

    public void handleUpdateAction(ActionEvent event) {
    String sql = "update users set name =?, age = ?, department=?, job=?,  contact = ? where userNo =?" ;
    try {

        String userNo = txt_userNo.getText();
        String name = txt_name.getText();
        double age = Double.valueOf(txt_age.getText());
        String department = txt_department.getText();
        String job = txt_job.getText();
        String contact = txt_contact.getText();
        p_stmt = con.prepareStatement(sql);



        p_stmt.setString(1, userNo);
        p_stmt.setString(2, name);
        p_stmt.setDouble(3, age);
        p_stmt.setString(4, department);
        p_stmt.setString(5, job);
        p_stmt.setString(6, contact);
        int i = p_stmt.executeUpdate();
        if (i == 1)  {
        }System.out.println("Data Updated Successfully");
        loadDataFromDatabase();

    }catch (Exception e) {
        e.printStackTrace();
    }
}

【问题讨论】:

  • 只是猜测,但参数的顺序不应该与查询中的顺序相同吗?您首先添加参数userNo,但它是查询中的最后一个。考虑到 'Ana' 也是一个名称,这是您添加的第二个参数,Age 的参数是查询中的第二个参数,我假设这是一个非常安全的猜测。

标签: java sql sql-server eclipse javafx


【解决方案1】:

Statement.setStringparameterIndex 表示查询中参数标记? 的词法顺序。所以userNo 应该在最后。例如:

    public void handleUpdateAction(ActionEvent event) {
    String sql = "update users set name =?, age = ?, department=?, job=?,  contact = ? where userNo =?" ;
    try {

        String userNo = txt_userNo.getText();
        String name = txt_name.getText();
        double age = Double.valueOf(txt_age.getText());
        String department = txt_department.getText();
        String job = txt_job.getText();
        String contact = txt_contact.getText();
        p_stmt = con.prepareStatement(sql);

        p_stmt.setString(1, name);
        p_stmt.setDouble(2, age);
        p_stmt.setString(3, department);
        p_stmt.setString(4, job);
        p_stmt.setString(5, contact);
        p_stmt.setString(6, userNo);

        int i = p_stmt.executeUpdate();
        if (i == 1)  {
        }System.out.println("Data Updated Successfully");
        loadDataFromDatabase();

    }catch (Exception e) {
        e.printStackTrace();
        throw e;
    }
}

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 2015-06-20
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多