最近研究JDBC,发现里面插入的语句十分复杂,让人很纠结...然后寻找替代方法,找到了个MessageFormat.format( a ,b)的方法。然后问题就来了:我想向数据库中插入一条语句,是从控制台接收变量插入,如例:String sql=MessageFormat.format(
"insert table1 vales('{0}','{1}',{2})",loginid,pwd,sid);其中loginid和pwd都是String型,sid是int型。我发现这样就用不了这个简单的方法,很纠结。因为这样sql输出的是 insert table1 values({0},{1},3)...如果前面不用’单引号引起来,就是insert table1 values(superadmin,sa123,3),但是这样插到数据库中又报有语法错误,原因是缺少’单引号。真是让人纠结啊,不知道有什么解决的方法没?我连用\去转义单引号都做了,但是还是不行......真的郁闷了。求教....

解决方案 »

  1.   

    补充:我还知道一个用?问号做占位符的方法,但是我不喜欢那样,我就想像C#里那样的用format方法,不知道是否有解决办法?!
      

  2.   

    用占位符的方法比用format格式化好,用format每次出来的sql语句都不一定相同,造成数据库多次编译sql语句,降低了sql语句的运行速度,增加了服务器负担,而占位符的sql语句在数据库中只有一条语句,所以只编译一次,所以尽量用占位符而不是format。要好写可以用hibernate框架。
      

  3.   

    "insert table1 vales(char(39){0}char(39),char(39){1}char(39),char(39){2}char(39))",loginid,pwd,sid);
    可以试试这个!
      

  4.   

    MessageFormat.format("insert into table1 vales(''{0}'',''{1}'',{2})",loginid,pwd,sid);其他信息
    在 String 中,"''" 表示单引号。QuotedString 可以包含除单引号之外的任意字符;围绕的单引号被移除。UnquotedString 可以包含除单引号和左花括号之外的任意字符。因此,格式化后消息字符串为 "'{0}'" 的字符串可以写作 "'''{'0}''" 或 "'''{0}'''"。 
      

  5.   


    十分感谢虎翼兄!问题已经解决了,就是用两个’’去表示单引号!我刚刚一试用发现没有出错,呵呵,也感谢大家的一些意见!我也不是非用这个format不可,只是想到了这个用法然后又不知道该怎么解决心理不舒服而已~