在java中怎么处理才能将数据存入postgresql数据库中类型为hstore的字段?

风停-云不过 发布于 2015/07/17 11:14
阅读 1K+
收藏 0

    /**

     * 增加批量导入映射.
     * 
     * @param
     * @return
     */
    @Action(value = "addImportMapper", results = { @Result(name = "addImportMapper", type = "json", params = {
            "root", "jsonResult" }) })
    public String addImportMapper() {
        Boolean operateResult = getImportMapperService().addImportMapper(
                assembleParameterToAddImportMapper());
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("result", operateResult);


        jsonResult = map;


        return "addImportMapper";
    }


    /**
     * 由于是对外提供接口,不宜显式地暴露对象. <br/>
     * 故将参数组装成对象.
     * 
     * @return
     */
    @SuppressWarnings("unchecked")
    private ImportMapper assembleParameterToAddImportMapper() {
        ImportMapper importMapper = new ImportMapper();


        importMapper.setUuid(UUIDGenerator.genUuidStr());
        importMapper.setMapperName("教职工姓名");
        importMapper.setMatchedOrgUuid("123456");
        importMapper.setMapperRule("name=>name,age=>20");  //hstore类型
        importMapper.setCreatorUuid("789456");


        return importMapper;
    }


<!-- 添加一条批量导入映射 -->
    <insert id="insertImportMapper"
        parameterType="net.firstelite.bicp.dtd.personnel$manage.system.ImportMapper">
        insert into t_pm_sys_import_mapper (
        uuid,
        mapper_name,
        matched_org_uuid,
        mapper_rule,
        creator_uuid,
        create_time,
        modify_time
        )values(
        #{uuid},
        #{mapperName},
        #{matchedOrgUuid},
        #{mapperRule},
        #{creatorUuid},
        current_timestamp(0),
        current_timestamp(0)
        )
    </insert>

加载中
0
moliunian
moliunian

我查了一下,发现语句要启用hstore扩展,我用的环境是SpringMVC+mybatis+postgre,然后XXXMapper.xml里面的配置为如下,发现能用了!(关键加上 ::hstore)

<insert id="insertHstore" parameterType="String" >

  insert into hstore_tb(key_value) values(#{key_value}::hstore);
  </insert>
0
loyal
loyal
hstore不就是个字符串么?这有什么可纠结的?
0
风停-云不过

对 但就是存不到数据库 提示

不知道怎么转型

0
moliunian
moliunian

 importMapper.setMapperRule("name=>name,age=>20");  //hstore类型

不能这样写吧

应该是这样,‘“name”=>"name,"age"=>"20"’

0
moliunian
moliunian

上面的是sql语句中写法,下面的是Java普通程序中的写法,web程序中懒得配置所以没测,你可以参考参考!

给一个代码给你吗,亲测可用

try {

String sql = "INSERT INTO hstore_tb(key_value) VALUES (?);";
pstmt = con.prepareStatement(sql);
String str = "name=>hello, age=>world";
pstmt.setObject(1, str,Types.OTHER);

pstmt.executeUpdate();



} catch (SQLException e) {

e.printStackTrace();
}
0
风停-云不过
@wtzheng你好, 谢谢解答。 但还是转型错误 ,还有其他方法么?
0
moliunian
moliunian
可以试试在Mapper.xml中映射一下,Model ImportMapper的 MapperRule变量映射到表mapper_rule字段,同时指定它的类型为“java.sql.Types.OTHER"
0
风停-云不过
@wtzheng 谢谢您的解答,很早之前就试过了,还是一样的结果。
0
风停-云不过
@wtzheng 非常感谢您的解答!以前只想过这么用【<insert id="insertHstore" parameterType="String" > 
insert into hstore_tb(key_value) values(#{key_value::hstore}); </insert>】却没想过这样用【<insert id="insertHstore" parameterType="String" >  insert into hstore_tb(key_value) values(#{key_value}::hstore);
</insert>】前者试了N遍,后者却没试过,谢谢
返回顶部
顶部