java连接sqlserver,提示语法错误
发布网友
发布时间:2022-04-27 12:10
我来回答
共5个回答
热心网友
时间:2022-05-04 03:06
SQL Server端运行的语句是如下吧:
select * from (select src.*, row_number() over (order by src.id asc) rownum from (select id, parentid, name, enable from configcity where 1 = 1 ) src) row_ where row_.rownum < 15
这个语句是没错的。
你的调试下程序,看传递到后台语句是不是对的。
where row_.rownum < 15,这个是有个参数传递的,传递的结果可能不对。
具体要看你程序怎么写。
一般是where子句根据条件判断生成后,再与主SQL语句合并。这个过程中,有逻辑漏洞的话,where子句会生是一个“ where ” 之类
这样程序运行的SQL,实际上就会是如下:
select * from (select src.*, row_number() over (order by src.id asc) rownum from (select id, parentid, name, enable from configcity where 1 = 1 ) src) row_ where
这样就会出错。
这个问题,估计不是SQL语句的错,是程序生成SQL或传递SQL时的错。不要查语句问题了,查程序的SQL语句生成或传递的部分吧。
你还是把程序最后生成的SQL,输出后检查下吧。形如? Parameters: [15]之类的,最后生成的SQL绝不会有这些的。追问我在程序中是一步一步进行断点调试的,到最后一步查询的时候sql语句就是上面那条语句,参数是个数组Parameters: [15],之前所有的都没问题,就最后执行的时候报错,报错信息就是之前发的那个
另外,之前用mysql就没问题,当然用mysql查询语句就不是这样了,最后只有“limit ?”
追答你所说的这些还不是最后一步呢。
你这只是把sql语句、参数传递完成。最后执行的sql语句是什么,你还没看到呢。
run.query()的返回就是已经执行完的结果么?那这样的话,中间还封装了有生成sql语句的过程。
你是用org.apache.commons.dbutils吧?我没用过,你看下封装的对象有没有提供输出sql语句的方法:
1、有的话,输出sql,然后检查下输出的语句,也即是最后在数据库端执行的那个sql,肯定是有问题的;
这时候,可以看下sql出问题的地方,是程序哪个地方生成的,那个地方的代码应该是有问题的;
2、没有办法获得输出的sql语句的话,只有笨办法:试:
先替换参数,不用参数的话,看下正常不。
2.1异常,则语句确实有问题,或者这个封装对象有问题;
语句问题的话,可能是有异常字符,比如全角空格、字符之类,逐段替换测试吧;
封装对象问题的话,更新个对象版本吧。
2.2正常,则参数有问题,或者封装的这个对象处理参数的功能有问题;
确认下参数没有问题,没有异常字符的话,更新个封装对象的版本吧。
热心网友
时间:2022-05-04 04:24
有两种可能:
第一、你写的字段和你数据库实际的数量不对。
第二、user是sql server中的关键字要使用[user]这样追问第一,字段没有问题,把这条语句放在数据库中可以正常执行;
第二,我这里没有user啊???
热心网友
时间:2022-05-04 05:59
只给错误不给代码不知道追问数据库查询使用的是org.apache.commons.dbutils.QueryRunner.query,程序中最后执行的语句是:this.list = run.query(querySql, new BeanListHandler(clazz, DbOperator.BEAN_ROW_PROCESSOR), params);
热心网友
时间:2022-05-04 07:50
参数怎么设的?
cstmt.setInt(1, 15); 这样吗?追问用的c3p0连接池和org.apache.commons.dbutils,最后执行的语句:this.list = run.query(querySql, new BeanListHandler(clazz, DbOperator.BEAN_ROW_PROCESSOR), params);
追答因为看不到具体写的过程,这个还真的很难说。
where 1 = 1 这个去掉呢?