java中把一个集合写入数据库,存在就更新,不存在就新增,用java语言怎么写
REPLACE INTO test_table(id,username) VALUES(1,'admin');
这个只需要改sql语句就好了。
不存在即插入,存在即更新
先进行查询不就好了,查集合里面元素是否都存在,将不存在的插入数据库
也可以先更新,更新语句会返回更新的数据条数,如果返回值为0,说明没有数据,再进行插入操作。
首先需求确认集合中存储的内容是什么,假设是一系列的用户对象,那么要确认数据库是否有对应的用户表,表的字段要与对象的属性匹配
假设以上条件满足,那么可以安装以下思路:
1、遍历集合,把遍历出的每个对象根据对象的属性(例如:名称)去数据库的表中查询
2、对查询出来的结果进行判断,如果为null,就新增一条数据到数据库的表中
3、如果不为null,就将遍历出的对象进行更新到数据库的表中
注意:多次执行新增、修改操作要开启事务
如有帮助,请采纳,十分感谢!
你是写后端要这个逻辑,还是单纯的java代码?后端里面你用mybatis,先查询一遍数据库中有没有该集合(行信息),根据返回的值确定是否有,没有就写入,有就更新。
如果是单纯的java操作数据库,那就用JDBC,逻辑是上面一样的,网上一搜就有这些代码的实现。
循环list列表,然后单条操作,对应sql为REPLACE INTO table(id,xxx) VALUES(xxx,xxx);
看你用的什么数据库,mysql 先查询,没有就插入数据,有就更新数据
利用 insert into ...... on duplicate key 语法 结合唯一性约束(创建唯一索引,或直接用主键)去做。
例如:insert into table1 (a,b,c) values ('aa','bb','cc') on duplicate key update a = 'aa', b = 'bb', c='cc'
假设其中a创建了唯一索引,因为a字段有唯一性约束,所以在执行上述语句的时候mysql会自动辨别a字段是否存在,如果存在就更新,不存在就插入。
<insert id="insertOrUpdate" parameterType="java.util.List">
insert into tableName
(id,lastname,createTime,updateTime)
values
<foreach collection="list" item="item" separator=",">
(#{item.id,jdbcType=VARCHAR},#{item.lastname,jdbcType=VARCHAR},now(), now()
)
</foreach>
ON DUPLICATE KEY UPDATE
lastname = values(lastname),
updateTime = values(updateTime)
</insert>
ON DUPLICATE KEY UPDATE 这句话后面就是更新时要更新的内容;这个是可以根据主键来更新的。
先查询数据库是否有,没有就插入,有就修改
先查询主键是否存在,存在就更新,不存在就增加