簡體   English   中英

在mybatis中傳遞數據庫名稱

[英]Passing database name in mybatis

我需要通過哈希圖中的參數傳遞數據庫名稱。

我的 Mybatis XML 是

<select id="getById" parameterType="hashmap" resultMap="result">
    SELECT * FROM #{db}.CONTACT WHERE CONTACT_NAME = #{name}
</select>

我的 Java 調用是

hm.put("db","abc");
hm.put("name","def");
Contact c=contactDAO.selectById(hm);

但我收到以下錯誤

The error occurred while setting parameters
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your      
SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax    
to   use near ''abc'.CONTACT WHERE CONTACT_NAME = 'def'' at line 1

我們不能在 mybatis 中將數據庫名稱作為參數傳遞嗎?

您需要使用${}而不是#{}進行直接String替換。

<select id="getById" parameterType="hashmap" resultMap="result">
    SELECT * FROM ${db}.CONTACT WHERE CONTACT_NAME = #{name}
</select>

它終於奏效了。 我所做的改變是

<select id="getById" parameterType="hashmap" resultMap="result">
SELECT * FROM ${db}.CONTACT WHERE CONTACT_NAME = #{name}
</select>

經過一番研究,不同的是'#'用於PreparedStatement替換。 '$' 用於直接字符串替換。

正如@yalpertem 所說(我還不能添加評論):

您需要使用 ${} 而不是 #{} 進行直接字符串替換。

但是當數據庫以數字開頭時就會出現問題。 通常這是在數據庫名稱上使用“”解決的。

 select * from "4dbname".tablename;

或者在 MyBatis 上;

<select id="getById" parameterType="hashmap" resultMap="result">
    SELECT * FROM "${db}".CONTACT WHERE CONTACT_NAME = #{name}
</select>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM