我有一张这样的桌子。

AreaId  LineId  ShapePointno    x   y
1             0    0            2   3
1             0    1            2   5
1             0    2            3   8
1             1    0            2   6
1             1    1            3   2


在开始讨论问题之前,我将在现场进行解释。
属于AreaId1 1的线ID 0具有3个形状点,分别标记为0,1和2。其x和y对应于其坐标位置。

在这种背景下,让我解决这个问题。

我需要获取这些记录并将其带到Java。

引入时,我需要将其作为线条的形状点块。 (即)第1 3行作为一个块,而下2行作为不同的块。这背后的原因是我需要修改x和y值,并且修改函数需要以下参数。

  i)AreaID, LineId, A 2D array of its shape points).


这是我尝试过的。

 Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost/task4DB?"
              + "user=root&password=123");
    PreparedStatement st = con.prepareStatement("select Distinct AreaId from TableName")
    ResultSet r1=st.executeQuery();
   while (r1.next())
    {
    int id = r1.getInt("AreaId");
    PreparedStatement st1 = con.prepareStatement("select Distinct LineId where AreaId = id")
    ResultSet r2=st1.executeQuery();
    while (r2.next())
    {
      int lineid = r2.getInt("LineId");
      PreparedStatement st2 = con.prepareStatement("select x,y  where AreaId = id and LineId = lineid")
      ResultSet r3=st2.executeQuery();
      int size = 0;
      int [][]xy = new int[r3.getCount()][r3.getCount()]
       while (r3.next())
      {

       xy[size][0] = r3.getInt("x");
       xy[size][1] = r3.getInt("y");
       size++;
      }
     callShapePointConv(id,lineId,xy);
    }
 }


我没有得到预期的结果,但显示垃圾值/

请帮帮我。

另外,还有没有其他更好的替代方法可用,而不是三个while循环?

请帮我。
提前致谢!

最佳答案

我只是在这里提问,但是您的选择在很多方面都有缺陷。

select Distinct LineId where AreaId = id


首先,您在哪里FROM表声明。
第二:您是否要根据先前检索的ID来获取LineId的唯一列表?

如果是这样,则参数化的select应该如下所示:

select Distinct LineId from table_2 where AreaId = ?


但是,您真正应该查找的是如何在select语句中使用联接。

更新资料

您的代码不再有意义。

首先,您获得唯一的AreaIds。 -> 1

然后您获得唯一的LineIds-> 0,1

然后从表格中选择所有元素,其中

(1) while: AreaId = 1
   and L
   (2) while:
          (loop 1) lineId = 0
          (loop 2) lineId = 1


最终将返回表内容:)

也许,这可以帮助您:

这将基于areaId和lineId将x和y分组为值列表。

SELECT
    AreaId,
    LineId,
    GROUP_CONCAT(table.x),
    GROUP_CONCAT(table.y)
FROM
    `table`
GROUP BY
    AreaId,
    LineId
ORDER BY
    table.ShapePointno


结果:

AreaId LineId GROUP_CONCAT(table.x)  GROUP_CONCAT(table.y)
1      0      "2,2,3"                "3,5,8"
1      1      "2,3"                  "6,2"

09-25 19:32