寻找成环数据并插入到新表内


DROP TABLE IF EXISTS `hw_end`;
CREATE TABLE `hw_end`  (
  `rmUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `subnetrmUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `xPos` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `yPos` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `aEndname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `zEndname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `aEndrmUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `zEndrmUID` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `rate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `direction` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `aLevel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `zLevel` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;

数据库如上,逻辑是先找出在相同subnetrmUID下的不同rmUID,根据不同的rmUID找出对应的aEndrmUID并且它的aLevel是汇聚点作为起始点,得到对应的一条数据,根据当前数据的zEndrmUID等于下一条的数据aEndrmUID,找出下一条数据,因为从第一条数据找到的下一条数据aEndrmUID有很多aEndrmUID,所以说要循环很多次去进行拿值,传值,之后找到的数据也是这种情况,这种情况下,能确定是的所有的aEndrmUID基本都是不同subnetrmUID下的rmUID,大致可以根据这个确定循环的次数,因为aEndrmUID基本在之前查找出rmUID的集合内,因为我每次拿值和获取值都是根据上一次查询的结果来获取的,这个在循环里怎么解决?还有需要把每次根据rmUID查找出来的数据进行排序,还一个是不同的rmUID也需要编号,怎么在循环里解决

下面是成环的数据,参考一下

img

根据我搜索到的信息,你可以使用JDBC(Java Database Connectivity)API来实现你的需求。123 你需要先建立两个数据库连接,一个用于查询原表,一个用于插入新表。1 然后,你需要使用Statement或PreparedStatement对象来执行SQL语句。23 你可以使用addBatch()和executeBatch()方法来批量执行多条SQL语句。2 你还需要使用ResultSet对象来获取查询结果,并使用next()方法来遍历每一条记录。3 你可以使用getXXX()方法来获取记录的各个字段值,然后使用setXXX()方法来设置插入语句的参数值。3

下面是一个示例代码,仅供参考:


import java.sql.*;

public class FindCycleData {

  public static void main(String[] args) {
    //定义数据库连接信息
    String url = "jdbc:sqlserver://localhost:1433;databaseName=your_db_name";
    String user = "your_user_name";
    String password = "your_password";

    //定义SQL语句
    String sql_select = "SELECT * FROM hw_end WHERE aLevel = '汇聚点'"; //根据条件查询原表
    String sql_insert = "INSERT INTO hw_end_cycle (rmUID, subnetrmUID, xPos, yPos, aEndname, zEndname, aEndrmUID, zEndrmUID, rate, direction, aLevel, zLevel) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; //插入新表

    try {
      //建立两个数据库连接
      Connection conn_select = DriverManager.getConnection(url, user, password); //用于查询原表
      Connection conn_insert = DriverManager.getConnection(url, user, password); //用于插入新表

      //创建Statement或PreparedStatement对象
      Statement stmt_select = conn_select.createStatement(); //用于执行查询语句
      PreparedStatement pstmt_insert = conn_insert.prepareStatement(sql_insert); //用于执行插入语句

      //执行查询语句,获取结果集
      ResultSet rs = stmt_select.executeQuery(sql_select);

      //遍历结果集,获取每一条记录的字段值
      while (rs.next()) {
        String rmUID = rs.getString("rmUID");
        String subnetrmUID = rs.getString("subnetrmUID");
        String xPos = rs.getString("xPos");
        String yPos = rs.getString("yPos");
        String aEndname = rs.getString("aEndname");
        String zEndname = rs.getString("zEndname");
        String aEndrmUID = rs.getString("aEndrmUID");
        String zEndrmUID = rs.getString("zEndrmUID");
        String rate = rs.getString("rate");
        String direction = rs.getString("direction");
        String aLevel = rs.getString("aLevel");
        String zLevel = rs.getString("zLevel");

        //设置插入语句的参数值
        pstmt_insert.setString(1, rmUID);
        pstmt_insert.setString(2, subnetrmUID);
        pstmt_insert.setString(3, xPos);
        pstmt_insert.setString(4, yPos);
        pstmt_insert.setString(5, aEndname);
        pstmt_insert.setString(6, zEndname);
        pstmt_insert.setString(7, aEndrmUID);
        pstmt_insert.setString(8, zEndrmUID);
        pstmt_insert.setString(9, rate);
        pstmt_insert.setString(10, direction);
        pstmt_insert.setString(11, aLevel);
        pstmt_insert.setString(12, zLevel);

        //添加到批处理中
        pstmt_insert.addBatch();
      }

      //执行批处理,插入新表
      int[] counts = pstmt_insert.executeBatch();

      //打印插入结果
      System.out.println("