2012-05-08 44 views
2

当尝试使用JDBC将字符串的值插入到我的数据库中时,它将插入字符串的名称,而不是插入字符串的值。JDBC - 如何插入字符串值

我有一个名为firstName的字符串,这个字符串的值由用户输入给出。

这里是我的SQL语句:

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','+firstName()','123')"; 
+4

你似乎不明白双引号与外面里面的东西之间的区别。它正在*正是*你告诉它。 –

回答

6

由于各种原因,它是更好地使用java.sql.PreparedStatement。用参数执行语句。例如,如果你想避免sql injection攻击。

请参阅The Java TutorialsUsing Prepared Statements中的示例。

使用带参数的SQL语句的优点是您可以使用相同的语句并在每次执行时使用不同的值。

PreparedStatement pstmt = conn.prepareStatement(
    "UPDATE EMPLOYEES SET FIRST_NAME= ? WHERE ID = ?"); 

pstmt.setString(1, "user1080390"); // set parameter 1 (FIRST_NAME) 
pstmt.setInt(2, 101); // set parameter 2 (ID) 

int rows = pstmt.executeUpdate(); // "rows" save the affected rows 
+0

我将在接下来的几周内详细阅读PreparedStatement的内容。不幸的是,我知道这听起来很糟糕。此时此刻我没有时间,我必须在明天的最后期限前完成工作。你有没有可能变得更具体? – user1080390

+0

您花时间尝试使用肮脏的黑客可能会花费在阅读PreparedStatments并使用它。保罗的代码片段应该足以让你走。 – Jonathan

+0

我试图修改从这个线程准备插入语句:http://stackoverflow.com/questions/1073101/how-do-you-do-an-extended-insert-using-jdbc-without-building-strings但我收到错误:无法找到符号preparedstatement ... – user1080390

0

试试这个

String sql = "Insert INTO users (ID, firstName, address) VALUES ('124','"+firstName()+"','123')";

为了防止SQL注入,您需要使用在查询之前逃脱字符串或尝试准备语句。

+1

这是肮脏而危险的方式,容易出错(如果firstName包含引号会怎么样?),并且最重要的是,存在SQL注入攻击的危险。切勿以真实的代码做这件事。 – leonbloy

+0

Provider.java:90:无法找到符号符号:方法firstName()localtion:class Provider String sql =“插入INTO用户(ID,名字,地址)值('124','”+ firstName()+“', '123')“;^ – user1080390

+0

@leonbloy你是绝对正确的,对不起。 – Karo

0

事情是这样的..

String firstName ="sample"; 
String sql = "Insert INTO users (ID, firstName, address) VALUES ('124',"+firstName+",'123')";