SQL查询,用于使用局部变量中的值更新列

时间:2018-06-29 13:40:29

标签: java mysql

如何使用存储在本地变量中的值更新SQL Table列。

在我的程序中,我使用以下语句从HTML页面中获取了价值:

String idd=request.getParameter("id");
String report=request.getParameter("rprt");

因此,现在我必须更新名为“ ptest”的数据库表中report的值,并且正在使用以下查询:

Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con = 
DriverManager.getConnection("jdbc:mysql://localhost:3306/tcs","root","root"); 
Statement st= con.createStatement(); 
ResultSet rs; 
int i=st.executeUpdate("update ptest set result = @reprt where patient_id= 
@idd");


out.println("Successfully Entered");   

但是该值未存储在数据库中,而是存储了NULL。

我已经看到了这个问题,没有任何帮助。 Question

如果我是MYSQL新手,请忽略我在这个问题中的错误。

2 个答案:

答案 0 :(得分:2)

您可以在Java中使用准备好的语句。

setString或setInt可以在准备好的语句中设置不同的数据类型。

参数1、2基本上是问号的位置。 setString(1,report)表示它将在查询的第一个问号中设置字符串报告。

希望此代码有助于您实现所需的目标。

String query = "update ptest set result = ? where patient_id = ?";
PreparedStatement preparedStatement = con.prepareStatement(query);

preparedStatement.setString(1, report);
preparedStatement.setString(2, idd);

preparedStatement.executeUpdate();

答案 1 :(得分:0)

在JDBC中,您使用?作为您要在语句中插入值的位置的占位符。 所以你应该做这样的事情...

Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con = 
DriverManager.getConnection("jdbc:mysql://localhost:3306/tcs","root","root"); 
PreparedStatement st= con.prepareCall("update ptest set result = ? where patient_id= 
?"); 

///now set the params in order
st.setString(1, report);
st.setString(2, idd);
//then execute
st.executeUpdate();

由于可能会存在sql注入,因此使用值对字符串进行连接是很危险的,因此我通常将语句文本设为static和final,并且如果您的值中包含',可能会破坏sql语法等。另外,请注意使用executeUpdate而不是查询。 希望这会有所帮助