iobject操作mysql数据库数据源的问题

0 投票

   使用iobject创建一个数据集,成功,给数据集添加字段成功,但是给这个数据集添加数据,只有第一次能添加成功,之后再次调用相同的方法就无法添加了,很困惑啊

这是封装的方法:

    public boolean addGeo(String datasetname, DatasourceConnectionInfo conn, Geometry geometry,
            Map<String, Object> map) {
        DatasetVector datasetVector = (DatasetVector) das.getDatasets().get(datasetname);
        // 查询结果集
        Recordset rs = datasetVector.getRecordset(false, CursorType.DYNAMIC);
        boolean boo = rs.addNew(geometry,map);
        @SuppressWarnings("unused")
        int smid = rs.getID();
        rs.update();
        rs.close();
        geometry.dispose();
        rs.dispose();
        return boo;
    }

2月 24, 2017 分类:  798次浏览 | 用户: zhulei 才疏学浅 (18 分)

1个回答

0 投票

MySQl什么版本的?建议MySQL 5.6.16。从代码上看,记录集释放就行,如

        rs.update();
        rs.dispose();
        geometry.dispose();

其他地方也没发现错误的地方。你结合数据调试一下,看下数据类型是否对啊、字段是否不对应等等,看有什么报错,错误发出来,我们一起看一下。

2月 24, 2017 用户: 秦凰 (2 分)
修改于 2月 24, 2017 用户:秦凰
mysql是5.6.35的64位的

我刚才测试了一下,我只添加一个最简单的GeoPoint,还是添加了一个数据集后,只能给数据集添加第一次,再次添加,我看记录及的addNew()方法返回的是true,但是数据库表里没有记录

找到原因了,

把rs.update();放到rs.getId();之前就可以了。update似乎要紧跟addNew()

 boolean boo = rs.addNew(geometry,map);
        @SuppressWarnings("unused") 
        int smid = rs.getID(); 如果在update之前,就添加失败
        rs.update();

这个方法是拷的同事的代码,似乎用在oracle数据库下没有问题的,但是mysql就不行了
...