Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法将参数作为insert的值传递到sql表中?_Java_Sql - Fatal编程技术网

Java 有没有办法将参数作为insert的值传递到sql表中?

Java 有没有办法将参数作为insert的值传递到sql表中?,java,sql,Java,Sql,我想将mySurname作为一个值插入mysql表中(使用java、derby编写) 有没有办法做到这一点 public void addPatient(String mySurname){ try { statement.execute("INSERT INTO patients (id_patient,surname) VALUES(1,mySurname)"); } catch (SQLEx

我想将mySurname作为一个值插入mysql表中(使用java、derby编写)

有没有办法做到这一点

public void addPatient(String mySurname){
        try {            
            statement.execute("INSERT INTO patients (id_patient,surname) VALUES(1,mySurname)");
        } catch (SQLException ex) {
            Logger.getLogger(PatientBase.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

最佳实践是首先实际构建一个PreparedStatement,然后绑定变量,您可以检查。

因此,您的问题的简短答案是“是”,您可以

这里有几件事

首先,尝试打开同一块中的所有数据库资源,或使用函数嵌套块。其次,始终在finally块中关闭语句和资源(或使用try with resources语法)。第三,如果您知道要插入值,则更喜欢使用executeUpdate而不是平面执行

下面是编写示例的更好方法:

public void updatePatient(String mySurname) {
   try(conn = yourDataSource.getConnection()) {
      addPatient(mySurname, conn);
   }
}


public void addPatient(String mySurname, Connection con) {
   try(stmt = conn.prepareStatement("INSERT INTO patients (id, surname) VALUES (?, ?)") {
   stmt.setInt(1, 1);
   stmt.setString(2, mySurname);

   int numRowsAffected = stmt.executeUpdate();
   Logger.getLogger(PatientBase.class).log(Level.DEBUG, numRowsAffected + " were inserted");
} catch (SQLException ex) {
     Logger.getLogger(PatientBase.class).log(Level.SEVERE, null, ex);
    }
}

这回答了你的问题吗?