数据库表里存小段java代码

b_wu 2019-08-07 09:51:59
请问大佬们,往数据库表里某个字段存一小段java代码(例如一段if,else),然后后台查到该字段值后再继续运行该逻辑,这个可行不?
...全文
407 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京不不 2019-09-09
  • 打赏
  • 举报
回复
用数据库存储过程去处理数据逻辑吧。
K G 2019-08-25
  • 打赏
  • 举报
回复
那我觉得你吃多了没事干,浪费资源
qq_35151346 2019-08-18
  • 打赏
  • 举报
回复
第一次见这种需求,可以试下,在查询出来之后,拼接字符串。通过io操作生产.java文件。再获取编译器。通过filemanager获取文件管理系统。将.java编译成.class文件。在通过classforname或者loaderclass动态加载.class。再通过反射获取里面的方法。通过invoke调用里面的方法。执行。
一丝混乱 2019-08-14
  • 打赏
  • 举报
回复
12楼正解 我觉得楼主的状况应该是逻辑变化比较频繁,但是逻辑本身比较简单。 这种情况比较适合使用脚本语言。 常见的方案是用js或者lua
CS_草祭先生 2019-08-13
  • 打赏
  • 举报
回复
如果有这个业务,还是老老实实用规则引擎吧。 看起来很难的东西,不学就一直不懂,学了才知道好用。 相当于你传一些值到后台,然后通过读取数据库数据中这一些规则将这个值处理成你想要的结果。
b_wu 2019-08-13
  • 打赏
  • 举报
回复
引用 12 楼 baichangda234的回复:
哈哈,脑洞很大啊 不过存java代码不行,如果你会写js代码,就可以,java里面有个js代码解析器,可以解析并执行js代码 其实如果是很简答的代码,js和java语法差不多,如下

public static void main(String[] args) throws Exception {
        ScriptEngine scriptEngine= MANAGER.getEngineByName("js");
        scriptEngine.put("a",2);
        scriptEngine.put("b",2);
        System.out.println(scriptEngine.eval("if(a=1){b-100}else{5}"));

    }
OK,谢谢大佬
wixy008 2019-08-13
  • 打赏
  • 举报
回复
groovy或者dlr 了解下
b_wu 2019-08-13
  • 打赏
  • 举报
回复
引用 19 楼 aw277866304的回复:
[quote=引用 18 楼 bing_wu123 的回复:] [quote=引用 17 楼 aw277866304的回复:]如果有这个业务,还是老老实实用规则引擎吧。 看起来很难的东西,不学就一直不懂,学了才知道好用。 相当于你传一些值到后台,然后通过读取数据库数据中这一些规则将这个值处理成你想要的结果。
嗯嗯,没有那么多这方面的业现在务,只是想对交易上送报文和返回报文中的某些值作一定的转换。[/quote] 那你直接用java代码写一个通用的转换方法就能实现,没必要搞那么复杂。[/quote] 嗯,但是需要定几种规则,1.直接替换新值,2.将旧值进行简单计算,然后转换成新值......等等。
CS_草祭先生 2019-08-13
  • 打赏
  • 举报
回复
引用 18 楼 bing_wu123 的回复:
[quote=引用 17 楼 aw277866304的回复:]如果有这个业务,还是老老实实用规则引擎吧。 看起来很难的东西,不学就一直不懂,学了才知道好用。 相当于你传一些值到后台,然后通过读取数据库数据中这一些规则将这个值处理成你想要的结果。
嗯嗯,没有那么多这方面的业现在务,只是想对交易上送报文和返回报文中的某些值作一定的转换。[/quote] 那你直接用java代码写一个通用的转换方法就能实现,没必要搞那么复杂。
b_wu 2019-08-13
  • 打赏
  • 举报
回复
引用 17 楼 aw277866304的回复:
如果有这个业务,还是老老实实用规则引擎吧。 看起来很难的东西,不学就一直不懂,学了才知道好用。 相当于你传一些值到后台,然后通过读取数据库数据中这一些规则将这个值处理成你想要的结果。
嗯嗯,没有那么多这方面的业现在务,只是想对交易上送报文和返回报文中的某些值作一定的转换。
tianfang 2019-08-12
  • 打赏
  • 举报
回复
用于jython,groovy等虚拟机语言即可 规则引擎太庞大,而且不自由
nayi_224 2019-08-12
  • 打赏
  • 举报
回复
肯定可以啊,就是把字符串动态编译成class文件,再动态执行都行(以前看到某篇文章写过)。或者也可以参考jsp的那一套。 规则引擎这东西基本上也不用自己写,直接调用工具包。你可以百度一下jexl
baichangda234 2019-08-12
  • 打赏
  • 举报
回复
漏了一行代码

private final static ScriptEngineManager MANAGER = new ScriptEngineManager();
baichangda234 2019-08-12
  • 打赏
  • 举报
回复
哈哈,脑洞很大啊 不过存java代码不行,如果你会写js代码,就可以,java里面有个js代码解析器,可以解析并执行js代码 其实如果是很简答的代码,js和java语法差不多,如下

public static void main(String[] args) throws Exception {
        ScriptEngine scriptEngine= MANAGER.getEngineByName("js");
        scriptEngine.put("a",2);
        scriptEngine.put("b",2);
        System.out.println(scriptEngine.eval("if(a=1){b-100}else{5}"));

    }
b_wu 2019-08-07
  • 打赏
  • 举报
回复
引用 7 楼 maradona1984的回复:
你想要的东西应该叫 规则引擎
特地搜了下,是这么个玩意
maradona1984 2019-08-07
  • 打赏
  • 举报
回复
你想要的东西应该叫 规则引擎
b_wu 2019-08-07
  • 打赏
  • 举报
回复
引用 5 楼 weixin_40290083的回复:
是的,但是你查到的数据只能做为程序的变量,可以对变量进行计算,就是业务逻辑所要加工的材料,但是不能做为逻辑。
嗯,👌,明白了,谢谢哥。
weixin_40290083 2019-08-07
  • 打赏
  • 举报
回复
是的,但是你查到的数据只能做为程序的变量,可以对变量进行计算,就是业务逻辑所要加工的材料,但是不能做为逻辑。
b_wu 2019-08-07
  • 打赏
  • 举报
回复
引用 3 楼 weixin_40290083的回复:
即然不是字节码,那就不行
啊,我明白了。项目启动后,先编译成字节码,然后二进制,然后再运行方法,运行方法时如果需要数据库的查询则再查询,对吧?
weixin_40290083 2019-08-07
  • 打赏
  • 举报
回复
即然不是字节码,那就不行
加载更多回复(5)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧