关于java转义字符提交保存到数据库的问题。

问题描述

最近做了一个简单的自动计算工资的功能。其中用到国内的开源的框架:IKExpression处理其中的计算工资的公式解析问题。在IKExpression中规定:公式中的字符串之间的比较解析,需要给字符串添加转义符。如下公式:String exp = "(角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0)))";如下参数:variables.add(Variable.createVariable("角色", "中转计量"));variables.add(Variable.createVariable("计量工资", new Double(100.0)));variables.add(Variable.createVariable("基本工资", new Double(100.0)));variables.add(Variable.createVariable("绩效分数", new Double(90.0)));variables.add(Variable.createVariable("岗位基数", new Double(5000)));在TestCase中测试OK,没有问题。执行前打印公式:expression : (角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0)))转义符自动转换了。既然解决了问题,咱就开始前台设计了。把上面的公式,带转义符的设置到前台。然后保存进数据库。在根据业务从数据库中读取出来。这时候问题来了。转义字符一直存在。公式无法解析。提示有非法的字符:测试很多次无果。强烈以为数据在保存进oracle的时候,编码被数据库给改变,导致java自身识别不了,无法自动解析这"转义符号。最后过次测试。把前台的公式编辑器里保存提交时候的公式写成如下:(角色 == "小麦计量")?((计量工资+基本工资*0.3)*0.5*(1+绩效分数*0.01)):((角色 == "中转计量")?(绩效分数*(岗位基数+计量工资)*0.01):((角色 == "内勤")?(绩效分数*0.01*岗位基数):(0)))然后,什么问题都没有了。接着,我的疑问来了。前台提交字符串: 角色=="测试"我们都知道String test = ""; 这是java中的字符定义方式。那再action中传递来的字符: 角色=="测试"在获取的时候 难道不是 : "角色=="测试"" 这样的?如果是这样的话,那字符不就被截断成:"角色==","测试" 这样2个字符?这里的本来应该有的" 哪里去了,自动处理还是?反正不用转义符这样的变量:角色=="测试"应该是无法申明或者赋值的吧。

解决方案

JVM中的一个字符串,不管有多少双引号都没有关系,它自己会认识的,比如你从文件中读取一个字符串:角色=="测试",那么JVM中的字符串就还是原样的字符串,不存在截断的问题。要转义,主要是显式写在代码中时,需要加进行转义,还有进行字符串拼接时。
解决方案二:
你可以测试下从前台传入 " 如果后台得到的长度是2那么就是两个字符 而表达字面量时是一个字符

时间: 2024-09-22 06:03:03

关于java转义字符提交保存到数据库的问题。的相关文章

java把图片保存到数据库中的例子

例子代码 Class.forName("com.mysql.jdbc.Driver");  //System.out.print("加载驱动完毕");  String url="jdbc:mysql://localhost:3306/studentmanager";  String username="root";  String password="root";  String sql1="se

收藏 用JAVA获取了RSS的资源,但如何把这些都保存到数据库?

问题描述 package com.ttol.spider;import java.io.IOException;import java.net.URL;import java.util.List;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;public class SipderRss {/** * @param arg

用Java实现可保存状态的数据库生成XML树(2)

xml|生成xml|数据|数据库 4.3.构造生成XML的servlet这一步的主要实现是从数据表中提取符合要求的记录生成嵌套的XML,servlet的源码是XMLServlet.java,选用oracle作数据库服务器.对数据库记录处理的过程基本上类似于XSL模版的处理:先查找layer的值为0的记录,对该记录进行分析,分析是否具有下级节点,这是通过该记录的href是否为空来进行分支处理的,href为空时,通过id的输入参数进行递归查找,请参见XMLServlet.java源码. /*RowS

用Java实现可保存状态的数据库生成XML树(1)-基于weblogic,包括一些基础问题,非常详细的。

web|xml|生成xml|数据|数据库|问题 用Java实现可保存状态的数据库生成XML树目录  0.    关键字词注释    11.    目的    12.    设计思想    13.    实现概要    14.    实现步骤    24.1.XML文档结构定义    24.2.数据表的结构定义    44.3.构造生成XML的servlet    44.4.构造显示树型结构的XSL模版    84.5.构造生成点击树型XMl显示详细节点内容的Servlet    124.6.Se

这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来

问题描述 这段代码输出保存在数据库中的json格式数据怎么用java代码在前端显示出来 public class SaveHotKeySkillReq extends CommandBase { @Resource //数据库操作 private EntityManager em; protected void execute() throws GMessageException { CRequesthotKeyChange msg = pak.readMsg(CRequesthotKeyCha

Java里大型数组如何保存到数据库的问题!!

问题描述 现在有一个float[20000]数组,我想保存到数据库,然后还可以从数据库里面还原成float数组,该如何操作,有什么思路.我的想法:把数组转换成字符串,然后写入数据库,完了再把字符串解析成数组,但是怎么把数组转换成字符串呢,Java里面有什么命令可以快速转换呢?这样做比较麻烦,有其它简单的方法吗? 问题补充:看来同志们各有各的方法啊,有没有一种最简单,效率最高的方法呢?? 解决方案 Stringbuffer sb = new StringBuffer(20000);for(floa

php实现上传图片保存到数据库的方法

 这篇文章主要介绍了php实现上传图片保存到数据库的方法,可通过将图片保存在数据库实现多台服务器共享文件的功能,非常具有实用价值,需要的朋友可以参考下     php实现上传图片保存到数据库的方法.分享给大家供大家参考.具体分析如下: php 上传图片,一般都使用move_uploaded_file方法保存在服务器上.但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外) 如果把图片数据保存到数据库中,多台服务器间可以实现文件共享,节省空间. 首先图片文

二进制-html表单上传file,php获取然后保存到数据库中,类型blob

问题描述 html表单上传file,php获取然后保存到数据库中,类型blob <form action="../php/teest.php" method="post"> <input type="file" name="pic"/> <input type="submit" value="提交"/> </form> php: requi

ueditor 如何将带有格式的文本保存在数据库中

问题描述 ueditor 如何将带有格式的文本保存在数据库中 请问如何将ueditor中带有格式的文本保存在数据库中,在另一页面显示时会显示带有格式的文本. 解决方案 你的ueditor放到表单里面,提交表单到动态页,提交前ueditor会自动将编辑器中的内容赋值给表单中的隐藏域的. 隐藏域默认的键名称为editorValue,你也可以配置textarea指定这个名称. 入库是html格式的,读出来的也是html格式的直接显示就行 注意你服务器端的配置,有些可能会配置过将html标签替换为实例对