由于我似乎试图学习如何使用SQL和Java,我的问题很难:
是否可以使用变量IN BETWEEN引号?
我知道如果您使用输出,您可以像这样工作:
System.out.println(_name + " "+_points+ " "+_ID);
有没有办法只在一个引号对中完成所有操作? 像这样:
System.out.println("_name _points _ID");
如果是,我该如何标记它们以便编译器知道它应该是一个他应该打印的变量?
我想知道它的原因很简单,我尝试使用executeUpdate
stmt.executeUpdate("INSERT INTO usertable VALUES("+_name+")");
并希望它没有添加标志。
答案 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");