关于“XX 附近有语法错误!”

本文介绍了使用EJB调用不同数据库(如Mysql和SqlServer)的存储过程的方法及注意事项,包括语法差异和常见错误处理。

最近在学习用Ejb调用存储过程,代码其实很简单,如下:

 private String QueryStoreProcedure(){
        //调用无返回参数的存储过程
     Query query = em.createNativeQuery("{call AddPerson()}");
        query.executeUpdate();
        StringBuffer out = new StringBuffer("******* QueryStoreProcedure 结果打印 ***********");
        return out.toString();       
    }

 

这段代码,如果使用Mysql数据库的话,一点问题都没有。不过如果使用SqlServer的话,问题就大了。它会不停报这个错误“XX  附近有语法错误。”因此,在这里做一下简单的记录。对应SqlServer的话,应该这样写:

 private String QueryStoreProcedure(){
        //调用无返回参数的存储过程
     Query query = em.createNativeQuery("exec AddPerson()");
        query.executeUpdate();
        StringBuffer out = new StringBuffer("******* QueryStoreProcedure 结果打印 ***********");
        return out.toString();       
    }

 

当然,还有其他很多要注意的地方。比如使用“query.getSingleResult()”。我到目前为止,一直没有调通。一直报“top 附近有语法错误。”要知道,我只是根据ID查询一条数据而已,哪里有什么top关键字啊

。所以后来没有办法,统一使用“query.getResult()”,然后判断大小,如果大于0,则取这个list的get(0),否则返回空。原因到现在不是很明白,只有先这样了。O(∩_∩)O哈哈~。以后有问题再总结。

### Bash 报错:未预期的符号 `newline' 附近语法错误 该错误通常发生在 Bash 解析器遇到意外换行符(`newline`)时,表明脚本或命令中存在语法问题。Bash 预期的是合法的命令结构或符号,但由于某些非法字符、格式错误或非 Shell 文件被误执行,导致解析中断。 最常见的原因包括以下几种: - **文件类型不匹配**:尝试执行一个非 Shell 脚本的文件,例如 `.xml` 或 `.conf` 文件,其中包含的内容不符合 Bash 的语法规范,这将直接引发此类错误[^1]。 - **引号未闭合**:在 Shell 脚本中使用了未正确闭合的引号(如单引号 `'` 或双引号 `"`),导致解析器在遇到换行符时仍处于字符串内部。 - **特殊字符处理不当**:例如 `<`、`>`、`&` 等符号未进行转义或未正确使用引号包裹,尤其在拼接命令或变量赋值时容易出错。 - **行结束符格式错误**:在 Windows 系统上编辑的脚本可能带有 `\r\n` 换行符,而 Linux 环境期望的是 `\n`。这种格式差异可能导致 Bash 解析失败。 - **多行命令未正确连接**:使用反斜杠 `\` 连接多行命令时,若其后存在空格或注释,可能导致 Bash 忽略后续内容,从而在下一行触发 `newline` 错误。 #### 示例场景 当执行如下命令时: ```bash sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_XX/bin/javac" 1 ``` 如果路径中含有特殊字符且未用英文引号包裹,或者命令被截断,可能会出现 `newline` 错误[^2]。 又例如,以下命令因 URL 中含有换行符导致语法错误: ```bash sudo curl -L https://github.com/weaveworks/scope/releases/do wnload/latest_release/scope -o /usr/local/bin/scope ``` 此处由于网址被错误地拆分,Bash 将 `do` 后面的内容视为新命令,从而报错[^3]。 --- ### 排查与修复方法 - **确认文件类型**:检查被执行的文件是否为有效的 Shell 脚本,避免误执行 XML、JSON 或配置文件等非脚本内容[^1]。 - **检查引号闭合情况**:确保所有字符串都使用成对的引号包裹,避免因遗漏引号导致解析异常。 - **处理特殊字符**:对于包含 `<`、`>`、`|`、`&` 等符号的变量或参数,应使用引号包裹或进行转义处理。 - **转换换行符格式**:使用 `dos2unix` 工具将脚本转换为 Unix 格式,确保每行以 `\n` 结尾。 - **验证多行命令结构**:确保使用反斜杠 `\` 连接多行命令时,其后紧跟换行符,不应有空格或注释干扰。 --- ### 示例修复代码 ```bash # 正确使用引号包裹含特殊字符的变量 filename="file<with>special&chars.txt" echo "$filename" # 使用 dos2unix 转换文件格式 dos2unix myscript.sh ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值