Java 我可以将包含数据的字符串与mysql查询连接起来吗?

Java 我可以将包含数据的字符串与mysql查询连接起来吗?,java,mysql,jdbc,Java,Mysql,Jdbc,我有以下代码部分: String t = (tname2.getText()); String h = (value2.getText()); PreparedStatement ps ; if(h.length()>2) { ps = con.prepareStatement("DELETE FROM "+t+" where empname = "+ h); //ps.setString(2,h);

我有以下代码部分:

String t = (tname2.getText());
     String h = (value2.getText());

     PreparedStatement ps ;

     if(h.length()>2)
     {
         ps = con.prepareStatement("DELETE FROM "+t+" where empname = "+ h);
         //ps.setString(2,h);
         ps.executeUpdate();
           JOptionPane.showMessageDialog(null, "Record deleted !", "Confirmation", JOptionPane.INFORMATION_MESSAGE);
     }
现在,行
ps=con.prepareStatement(“从“+t+”中删除,其中empname=“+h”)不起作用。它的工作原理与使用“?”相反。如
“从“+t+”中删除*,其中empname=?”

然后设置empname的值。我想知道,是否有一种方法可以通过将我的empname名称与查询连接起来来完成工作??有人能提供一些提示吗`

您缺少正确的开始和结束双引号:

试试这个:

ps = con.prepareStatement("DELETE FROM " + t + " where empname = '" + h + "'");

您缺少正确的开始和结束双引号:

试试这个:

ps = con.prepareStatement("DELETE FROM " + t + " where empname = '" + h + "'");

将PreparedStatement与参数化查询一起使用并设置值
这种使用还将防止SQL注入
因为将值连接到查询中会使SQL注入容易受到攻击

例如


将PreparedStatement与参数化查询一起使用并设置值
这种使用还将防止SQL注入
因为将值连接到查询中会使SQL注入容易受到攻击

例如


哇!成功了。谢谢请您解释一下工作原理好吗?因为查询应该在“开始”和“结束”之间。您在数据库中搜索字符串,所以必须用“或”括起字符串“。如果你搜索一个号码,你不必这样做。我认为Ye Win的答案更好,因为它避免了SQL注入。哇!成功了。谢谢请您解释一下工作原理好吗?因为查询应该在“开始”和“结束”之间。您在数据库中搜索字符串,所以必须用“或”括起字符串“。如果你搜索一个号码,你不必这样做。我认为Ye Win的答案更好,因为它避免了SQL注入。使用预处理语句然后自己连接查询字符串的原因是什么?事实上,我使用预处理语句的方式是这样的,但它一直导致我无法跟踪的错误。所以我换了另一种方式。在SQL中,字符串必须在
中,否则它会认为您有一个字段名或关键字。使用预处理语句然后自己连接查询字符串的原因是什么?实际上我使用预处理语句的方式,但是它不断地给我造成一个我无法追踪的错误。所以我换了另一种方式。在SQL中,字符串必须在
中,否则它会认为您有字段名或关键字。您不能对对象(表)名称使用参数,只能对值使用参数。因此,您需要删除第一个参数,并将其替换为串联(最好是对名称进行白名单检查)。@Mark Rotteveel。感谢您的评论。答案已编辑。您不能将参数用于对象(表)名称,只能用于值。因此,您需要删除第一个参数,并将其替换为串联(最好是对名称进行白名单检查)。@Mark Rotteveel。谢谢你的评论。答案已编辑。