前两天,上面叫我改一下一个查询的sql语句,改成模糊查询。觉得这个非常简单,于是在mysql中查询之后,看到数据正常,就直接写到代码里面去了,没有测试直接交了上去。今天部门老大突然给我发了一个异常过来,刚刚开始怀疑部门老大发错地方了,结果才发现原来就是自己错了。感觉很没面子,这么点小东西都没做好,刚刚开始还不知道问题出在哪里,怎么看都像是对的,在网上查阅之后发现真的很容易出错,所以贴出来,希望以后不要遇到同样的事情,然后不管多简单的东西,记得测试之后再交上去。
在mysql中的测试语句:select serviceCode from smsconfiginfo where configName like '%aa%'
这样肯定是没问题的。
用预编译PreparedStatement,直接把语句改成了
stmt = con.prepareStatement(select serviceCode from smsconfiginfo where configName like '%?%')
然后stmt.setString(1,serviceNameKeyword);
是否貌似没什么问题。
当查询的时候发现抛这样一个异常:
java.sql.SQLException: No parameters defined during prepareCall()
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ServerPreparedStatement.getBinding(ServerPreparedStatement.java:751)
at com.mysql.jdbc.ServerPreparedStatement.setString(ServerPreparedStatement.java:1857)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:131)
at org.apache.jsp.stat.statSmsMainProcessInclude_jsp._jspService(statSmsMainProcessInclude_jsp.java:195)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966)
at org.apache.jsp.stat.smsYuanjing_jsp._jspService(smsYuanjing_jsp.java:59)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
刚刚开始找到问题的根源,只知道自己只改了那一点代码于是先把
stmt = con.prepareStatement(select serviceCode from smsconfiginfo where configName like '%?%')
这个改为
stmt = con.prepareStatement(select serviceCode from smsconfiginfo where configName like '%aa%')
屏蔽掉设置参数,发现异常没有了
问题肯定就出在这个问号上,但是想象设置参数不就是用问号吗
仔细观察,发现这里把问号当成了条件,而不是参数的设置
这样
stmt = con.prepareStatement(select serviceCode from smsconfiginfo where configName like '%'?'%')
就可以了。
别小看字符串的问题,越容易的东西越容易出错。
分享到:
相关推荐
总的来说,"gmp预编译库文件"提供了一个方便的、高精度的算术运算解决方案,通过动态或静态链接方式,开发者可以在他们的应用程序中利用GMP的强大功能,而无需从源代码编译整个库。这个4.2.1版本的预编译库,经过...
如果一个 DLL 提供一个能够创建数据的函数,那么这个 DLL 同时应该提供一个函数销毁这些数据。 7. DLL 的灾难。如果将 Debug 和 Release 版的 DLL 混合在一起使用,可能会导致程序出现错误。 因此,在编写程序时,...
因为freeglut3.0之后没有再直接提供预编译版本的lib和dll,这是一个已经经过cmake编译好的windows平台下的freeglut的预编译内容,包含头文件,lib和dll,有debug版本和release版本两种
接下来,"Sixxpack24.zip"可能包含的是一个加壳工具,如Sixxpack,用于将程序的原始二进制代码包装在一个外壳程序中。加壳技术能够隐藏程序的真实入口点,增加逆向工程的难度。外壳程序通常会执行一些验证步骤,如...
C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。...
在C++编程环境中,预编译头文件`stdafx.h`是一个常见的概念,特别是在使用Microsoft Visual Studio等IDE时。这个头文件的主要目的是为了提高编译效率,通过预编译一些经常改变但不常重新编译的代码,从而减少编译...
qt安装自带的qtwebengine不支持视频,要支持需要自己使用-webengine-proprietary-codecs编译。编译时间很长,很容易出错。这里提供vs2019编译的64位版本。qt5.15.0版本的qtwebengine
语法分析从词法分析程序取得源程序,并将一个或多个单词组合为语言的各种语法类;语义分析确定源程序的意义(语义);代码生成将源程序的中间形式转化为汇编语言或机器语言;代码优化获得更高效的目标程序;出错处理...
DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它封装了可重用的函数和资源,供多个程序共享。在编程领域,有时我们需要查看或理解DLL文件内部的代码逻辑,这时就涉及到了“反编译”技术。反...
标题中的"C# 反编译NET_IL命令查询器"指的是一个工具或软件,它主要用于查看和解析C#程序集中的中间语言(IL)指令。中间语言是.NET框架的一部分,它是源代码编译后的二进制表示,介于高级语言(如C#)和机器码之间...
首先,"Depends"是一个常见的反编译工具,它主要用于查看可执行文件的依赖性。当你运行一个.exe或.dll文件时,"Depends"可以帮助你识别这个文件需要哪些动态链接库(DLLs)才能正常工作。这些DLLs包含了程序运行所需...
Zint库是一个开源项目,主要用于生成各种类型的条形码和二维码。这个压缩包包含了在Windows环境下编译好的Zint库的动态链接库(dll)和库文件(lib),分为release和debug两个版本,以满足不同开发需求。 1. **Zint...
delphi7编译慢 或linking阶段会出错 经常会出现内存泄漏或不足 或RLink32.DLL访问出错 直接把bolndmm.dll与rlink32.dll拷贝至delphi7下的bin目录中可以调试了 按网友的说法 新版的内存管理器或连接器 bolndmm.dll...
标题 "VFP 反编译工具全集" 涉及到的是Visual FoxPro(VFP)编程环境下的一个特定领域——反编译技术。Visual FoxPro是Microsoft开发的一种关系数据库管理和开发工具,广泛用于创建桌面应用程序。在描述中提到的“可...
以上内容详细阐述了李文生版《编译原理》教材中关于编译程序结构、功能、伙伴工具、类型、遍以及错误检测和处理的核心知识点,同时也提供了词法分析和语法分析的具体示例,加深了对编译原理的理解。
在描述中提到的文件"ex4 to mq4"很可能是一个反编译工具或者教程,帮助用户进行`.ex4`到`.mq4`的转换。使用这样的工具时,应确保遵循以下步骤: 1. 下载并安装反编译软件,如"Ex4ToMq4"。 2. 将`.ex4`文件拖放到...
1. "红色黑客联盟 软件说明.htm" - 这可能是一个关于反编译工具或相关软件的使用说明文档,详细介绍了软件的功能、操作步骤和注意事项。 2. "优秀投稿动画奖励计划.txt" - 这可能是某个社区或平台的奖励计划,可能与...
【标题】"已经编译好的Openssl"指出的是一个预编译的OpenSSL软件包,这个包包含了在Windows 7环境下可以直接使用的OpenSSL库和工具。OpenSSL是一个强大的安全套接字层密码库,含有各种主要的密码算法、常用的密钥和...
- 过程:从一个简单的核心语言开始,通过不断扩展语言特性和编写相应的编译程序,最终达到所需的语言级别。 - 例子:逐步扩展语言特性,如从L0扩展到L1,再到L2等。 以上是对《编译原理》课程中一些基础知识和...