【问题标题】:how to print " inside print() function in java如何在java中的print()函数中打印“
【发布时间】:2014-07-31 10:42:08
【问题描述】:

我的代码中有以下行:

int check1 = stmt3.executeUpdate("update ShopSystem.Grocery where g_id="+g_id+" set g_name="+g_name);

它向我显示以下错误:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL     server version for the right syntax to use near 'where g_id=5 set g_name=Chikoo' at line 1

我认为是因为实际传递给 SQL Server 的是: "更新 ShopSystem.Grocery where g_id=5 set g_name=Chikoo;

g_name 实际上是一个字符串类型。我应该如何在 java print 语句中将其作为字符串传递?还是我的语法有其他错误?

【问题讨论】:

  • 设置和哪里应该颠倒。
  • ' 可以代替吗?但是,一般来说,逃避它怎么办? \"*.com/questions/6277944/…
  • 只是对问题标题感到好奇,print() 函数在哪里? :)

标签: java mysql sql sql-server


【解决方案1】:

您需要在查询中的文本值周围提供引号,如下所示:

"update ShopSystem.Grocery set g_name='"+g_name +"' where g_id="+g_id+";

但是,我强烈建议您使用参数化查询/准备语句而不是串联。

PreparedStatement stmtUpdate = null;

String strUpdate = "update ShopSystem.Grocery set g_name= ? where g_id = ?";

stmtUpdate = yourconnection.prepareStatement(strUpdate);
stmtUpdate.setString(1,g_name);
stmtUpdate.setInt(2,g_id);
stmtUpdate.executeUpdate();

请注意,上面的代码不包括异常处理和资源释放,但它应该可以帮助您入门。

【讨论】:

  • 您之前关于添加 '' 单引号 dnt 工作的解决方案......继续给出同样的错误,但使用准备好的语句它工作......谢谢 :)
  • 这是除了安全性之外信任准备好的语句的另一个原因 - 您可以避免在串联查询中包含引号等的混乱。
【解决方案2】:

我认为 g_name 是一个 varchar 类型,所以你应该像这样用引号 ('') 将它括起来

int check1 = stmt3.executeUpdate("update ShopSystem.Grocery set g_name='"+g_name+"' where g_id="+g_id );

【讨论】:

    【解决方案3】:

    正如 shree.pat18 所说,我建议您使用参数化查询/准备语句:

    无论如何,您可以使用以下任一简单引号:

    "simple quote here -> ' text ' <-"
    

    或双引号为:

    "double quote here -> \" text \" <-"
    

    【讨论】: