我拼接了一个sql,在数据库中sql语句可正确运行,但在java代码中报错,sql命令未正确结束。

StringBuilder strSql = new StringBuilder();
strSql.append("SELECT A.FILEOPSW4,A.FILEOPSW36,A.FILEOPSW1,to_char(A.FILEOPSW9,'yyyy-MM-dd') as FILEOPSW9,");
strSql.append("A.FILEOPSW5,A.FILEOPSW34,B.TAG20,A.FILEOPSW28,A.FILEOPSW6,FILEOPSW35,A.FILEOPSW13,");
strSql.append("(select PRODUCTNAME from FILEFUND where CUSTID=a.FILEOPSW42 and PRODUCTID=a.FILEOPSW43) ");
strSql.append("as PRODUCTNAME,A.FILEOPSW41,A.FILEOPSW42,A.FILEOPSW43,a.FILEOPSW37,a.CALCELFLAG ");
strSql.append("FROM FILEOPSW A,SWIFTDATA B WHERE A.FILEOPSW1=B.SWIFTSEQNO ");
strSql.append("order by a.FILEOPSW9 desc ");

executeQuery是专门用于执行sql查询的方法,从你的sql来开不是查询,而是执行的见表和插入语句,这种操作应该使用executeUpdate方法,同时不要把见表语句和insert语句拼成一个整个的语句去执行,这种方式在数据库直接执行ok没问题,但通过代码走
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-10
StringBuilder strSql = new StringBuilder();
strSql.append(" SELECT A.FILEOPSW4,A.FILEOPSW36,A.FILEOPSW1,to_char(A.FILEOPSW9,'yyyy-MM-dd') as FILEOPSW9,");
strSql.append(" A.FILEOPSW5,A.FILEOPSW34,B.TAG20,A.FILEOPSW28,A.FILEOPSW6,FILEOPSW35,A.FILEOPSW13,");
strSql.append("( select PRODUCTNAME from FILEFUND where CUSTID=a.FILEOPSW42 and PRODUCTID=a.FILEOPSW43) ");
strSql.append(" as PRODUCTNAME,A.FILEOPSW41,A.FILEOPSW42,A.FILEOPSW43,a.FILEOPSW37,a.CALCELFLAG ");
strSql.append(" FROM FILEOPSW A,SWIFTDATA B WHERE A.FILEOPSW1=B.SWIFTSEQNO ");
strSql.append("order by a.FILEOPSW9 desc ");

拼接的时候  注意在每一个字符开头空一个 空字符出来,不然sql脚本里面会出错的

追问

我按照您说的方法加空格也不行
1至6条是之前拼接的,可以执行,第7条是我后加的排序,运行时就报
WARN - SQL Error: 933, SQLState: 42000
ERROR - ORA-00933: SQL 命令未正确结束
INFO - org.hibernate.exception.SQLGrammarException: could not extract ResultSet

追答

strSql.append("order by a.FILEOPSW9 desc "); 改为 strSql.append("order by a.[FILEOPSW9] desc "); 呢?

追问

ERROR - ORA-01747: user.table.column, table.column 或列说明无效
又报这个错了

追答

strSql.append("order by a.FILEOPSW9 desc ");
改为
strSql.append("order by a.FILEOPSW9 desc; "); 后面加一个分号呢?

追问

WARN - SQL Error: 911, SQLState: 22019
ERROR - ORA-00911: 无效字符
告诉我无效字符,我在数据库执行没错,但在java中运行就报错,而且是加上最后一条排序的

追答StringBuilder strSql = new StringBuilder();
strSql.append(" SELECT A.FILEOPSW4,A.FILEOPSW36,A.FILEOPSW1,to_char(A.FILEOPSW9,'yyyy-MM-dd') as FILEOPSW9_,");
strSql.append(" A.FILEOPSW5,A.FILEOPSW34,B.TAG20,A.FILEOPSW28,A.FILEOPSW6,FILEOPSW35,A.FILEOPSW13,");
strSql.append("( select PRODUCTNAME from FILEFUND where CUSTID=a.FILEOPSW42 and PRODUCTID=a.FILEOPSW43) ");
strSql.append(" as PRODUCTNAME,A.FILEOPSW41,A.FILEOPSW42,A.FILEOPSW43,a.FILEOPSW37,a.CALCELFLAG ");
strSql.append(" FROM FILEOPSW A,SWIFTDATA B WHERE A.FILEOPSW1=B.SWIFTSEQNO ");
strSql.append("order by a.FILEOPSW9 desc ");

第一行 to_char(A.FILEOPSW9,'yyyy-MM-dd') as FILEOPSW9 修改为 to_char(A.FILEOPSW9,'yyyy-MM-dd') as FILEOPSW9Extend

本回答被网友采纳
相似回答