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

Java 是否在输出的引号内使用变量?,java,mysql,Java,Mysql,因为我似乎在努力学习如何使用SQL和Java,所以我的问题是: 是否可以在引号之间使用变量? 我知道如果您使用输出,您可以这样工作: System.out.println(_name + " "+_points+ " "+_ID); System.out.println("_name _points _ID"); PreparedStatement pStmt=null; pStmt = conn.prepareStatement(SQL_INSERT_NEW_RULE); int inde

因为我似乎在努力学习如何使用SQL和Java,所以我的问题是:

是否可以在引号之间使用变量?

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

System.out.println(_name + " "+_points+ " "+_ID);
System.out.println("_name _points _ID");
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");
有没有一种方法可以把所有的东西都放在一对引号里? 大概是这样的:

System.out.println(_name + " "+_points+ " "+_ID);
System.out.println("_name _points _ID");
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");
如果是,我如何标记它们,以便编译器知道它是一个他应该打印的变量

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

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

并且希望它没有添加符号。

不,不能在字符串文本中使用变量。不过有几个选择

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

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();

如果您有一个变量,并希望将其与引号一起传递到查询语句,只需将引号添加到命令中即可。如果引号是单引号,则不需要替换,但如果是单引号,则需要:

stmt.executeUpdate("INSERT INTO usertable VALUES('"+_name+"')");
                                                 ^ 
                                                 |_Just add the quotes inside the
                                                   string
如果是双引号(我认为情况并非如此),那么你需要换个借口。Scaping是一种告诉编译器特定字符串是特殊字符串的方法

stmt.executeUpdate("INSERT INTO usertable VALUES(\""+_name+"\")");
                                                 ^ 
                                                 |_See the slash before the double quote?
但是,既然您正在学习,您就应该学习正确的方法,因为使用带有引号的变量会使代码容易出错

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

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

请参见以下完整示例:

您可以使用preparedStatement:

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

查询:

private static String SQL_INSERT_NEW_RULE = "INSERT INTO Table (A, B) VALUES (?, ?)";
然后你可以这样说:

System.out.println(_name + " "+_points+ " "+_ID);
System.out.println("_name _points _ID");
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");

我看不出stmt.executeUpdate(“INSERT-INTO-usertable-VALUES(“+_-name+”)有什么问题?您最好使用
PreparedStatement
。示例我不认为OP的意思是他想要文字引号。嗯,我认为你是对的,我误解了他@arizzle,他想做像PHP那样的事情。好吧,随它去吧,它可以作为参考。我对你的答案投了赞成票。谢谢你指出这一点。