实现向数据库中间插入数据

问题描述:假如现在有个学生表,表里有十条记录,现在要再添加一条记录a那么它会排在最后。

现在想要实现一个功能就是能把这条记录a插入到数据的中间,如插入到序号为3和4的记录的中间。

要实现这个功能要额外添加一个序号no字段,即使是使用的sqlite,mongodb这样本身有数据类型的id字段的数据库也需要添加一个no字段,原因有两点:

1)本身的id字段不能重复,如果把记录a添加到3和4中间,要把记录a的id改为4,原先id大于等于4的都要加1,在这个过程中想要id不重复实现起来会比较复杂

2)倘若还有个班级表,班级与学生之间为一对多关系,那么查询学生时都是根据班级来查询,即只要保证该班级下学生的相对顺序即可。如果仅用主键id字段,要往A班级里中间插入一名学生a,且插入的位置就是A班的第4名,假如原来的A班第4名id为9,现在学生a的id就要为9,而整个学生表里id>=9的都要加1,即B班的学生id也要改动(这是没有必要的),不然id就会重复,这就增加了很多时间成本。

综上所属不管有无自带的自增长整型主键id,都要添加一个Int类型序号字段no。

实现描述:

1)no字段的默认值等于它的id字段

2)要往A班级里中间插入一名学生a,且插入的位置就是A班的第4名,假如原来的A班第4名no为9,现在学生a的no改为9

3)遍历A班的所有学生,若no<9,不做处理,>=9,则no+1,这样A班的no值可能和其他班级的学生no值重复,但这没关系,只要保证A班学生的相对顺序即可,

4)查询时,根据no字段排序即可。

 

 

* 写的有点乱,主要是描述起来确实复杂不太好说。如果有人也想实现这个功能的话可以留言,后续再整理一下加上代码的实现~ 没有就算了~

 

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现该功能的思路如下: 1. 首先需要连接两个数据库,分别为源数据库和目标数据库。 2. 从源数据库中查询出需要读取的表的数据。 3. 将查询出来的数据存储到一个数据结构中,比如 Java 中的 List 或者 Map。 4. 遍历数据结构,将每一行数据插入到目标数据库的对应表中。 具体实现步骤如下: 1. 引入数据库驱动,连接源数据库和目标数据库。 ```java Class.forName("com.mysql.jdbc.Driver"); Connection sourceConn = DriverManager.getConnection("jdbc:mysql://<源数据库IP>/<源数据库名>?useSSL=false", "<用户名>", "<密码>"); Connection targetConn = DriverManager.getConnection("jdbc:mysql://<目标数据库IP>/<目标数据库名>?useSSL=false", "<用户名>", "<密码>"); ``` 2. 查询源数据库中需要读取的表的数据,可以使用 JDBC 中的 PreparedStatement 对象来实现: ```java String sql = "SELECT * FROM <需要读取的表名>"; PreparedStatement pstmt = sourceConn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); ``` 3. 将查询出来的数据存储到一个数据结构中,比如 Java 中的 List: ```java List<Object[]> dataList = new ArrayList<>(); while (rs.next()) { Object[] row = new Object[<表的列数>]; for (int i = 1; i <= <表的列数>; i++) { row[i-1] = rs.getObject(i); } dataList.add(row); } ``` 4. 遍历数据结构,将每一行数据插入到目标数据库的对应表中,可以使用 JDBC 中的 PreparedStatement 对象来实现: ```java String insertSql = "INSERT INTO <目标表名>(<表列1>, <表列2>, ...) VALUES (?, ?, ...)"; PreparedStatement pstmt = targetConn.prepareStatement(insertSql); for (Object[] row : dataList) { for (int i = 0; i < row.length; i++) { pstmt.setObject(i+1, row[i]); } pstmt.executeUpdate(); } ``` 5. 最后记得关闭 ResultSet、Statement 和 Connection 对象: ```java rs.close(); pstmt.close(); sourceConn.close(); targetConn.close(); ``` 以上就是实现读取一个数据库中的某个表,并在另一个数据库中创建并插入数据的思路和步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值