在输出的引号内使用变量?

时间:2016-06-28 12:09:38

标签: java mysql

由于我似乎试图学习如何使用SQL和Java,我的问题很难:

是否可以使用变量IN BETWEEN引号?

我知道如果您使用输出,您可以像这样工作:

System.out.println(_name + " "+_points+ " "+_ID);

有没有办法只在一个引号对中完成所有操作? 像这样:

System.out.println("_name _points _ID");

如果是,我该如何标记它们以便编译器知道它应该是一个他应该打印的变量?

我想知道它的原因很简单,我尝试使用executeUpdate

stmt.executeUpdate("INSERT INTO usertable VALUES("+_name+")");

并希望它没有添加标志。

3 个答案:

答案 0 :(得分:2)

不,你不能在String文字中使用变量。虽然有几种选择。

第一种是你当前使用+符号连接的方式:

String query = "INSERT INTO table VALUES(" + name + ")";

另一种方法是使用String.format

String query = String.format("INSERT INTO table VALUES(%s)", name);

但SQL的首选方法避免SQL注入攻击正在使用PreparedStatement:

String query = "INSERT INTO table VALUES(?)";
PreparedStatement statement = con.prepareStatement(query);
statement.setString(1, name);
statement.executeUpdate();

答案 1 :(得分:0)

如果您有一个变量并希望将其传递给带有引号的查询语句,只需在命令中添加引号即可。如果引号是单引号,那么你不需要scape但是如果它是,你需要:

stmt.executeUpdate("INSERT INTO usertable VALUES('"+_name+"')");
                                                 ^ 
                                                 |_Just add the quotes inside the
                                                   string

如果它是双引号(我认为情况不是这样),那么你需要scape。 Scaping是一种告诉编译器该特定字符串是特殊的方法

stmt.executeUpdate("INSERT INTO usertable VALUES(\""+_name+"\")");
                                                 ^ 
                                                 |_See the slash before the double quote?

但是,既然你正在学习,你应该学习正确的方法,因为使用带引号的变量会使你的代码容易出现SQL Injection

因此,更好的方法是使用准备好的语句,语言将为您处理报价。它将是:

String sql = "INSERT INTO usertable VALUES (?)"
preparedStatement = dbConnection.prepareStatement(sql);
preparedStatement.setString(1, "name you want");

请在此处查看完整示例:http://www.mkyong.com/jdbc/jdbc-preparestatement-example-select-list-of-the-records/

答案 2 :(得分:0)

您可以使用preparedStatement:

示例:

查询:

private static String SQL_INSERT_NEW_RULE = "INSERT INTO Table (A, B) VALUES (?, ?)";

然后你可以像这样把它们放在一起:

PreparedStatement pStmt=null;
pStmt = conn.prepareStatement(SQL_INSERT_NEW_RULE);
int index = 1;
pStmt.setString(index++, "value for A");
pStmt.setLong(index++, "Value for B");