N-мерный класс точек
public final class Point {
private List<Double> instance;
public Point(List<Double> instance) {
this.instance=instance;
this.setI(instance);
}
public void setI(List<Double> instance) {
this.instance = instance;
}
public List<Double> getI() {
return this.instance;
}
protected static Point getPoint(List<Double> Instance)throws SQLException {
List<Double> instance=Instance;
return new Point(instance);
}
protected static List getPoints()throws SQLException {
ResultSet rs;
List points = new ArrayList();
List x = new ArrayList();
int rowCount = 0;
String query1 = "Select count(*) from website;";
Connection conn = Connection2 .getConnection("localhost", "1433", "trafficwebsite", "KEREM", "keremgulmaths");
ResultSet rs1 = Connection3.getTableDataForQuery(query1, conn);
while (rs1.next()) {
rowCount = rs1.getInt(1); }
if (conn != null) {
String query = "SELECT*FROM website";
rs = Connection3.getTableDataForQuery(query, conn);
ResultSetMetaData rsmd=rs.getMetaData();
//rowCount = getRowCount(rs);
while (rs1.next()) {
rowCount = rs1.getInt(1); }
if (rowCount > 0)
{ points = new ArrayList(rowCount);
for(int i = 0; i < rowCount; i++) {
rs.next();
x.add(rsmd.getColumnName(i));
points.add(getPoint(x));
}
} System.out.println(points);
}
return points;
}
public static void main(String[] args) throws SQLException{
List<Double> data=new ArrayList();
data=Point.getPoints();
System.out.println("Data: "+data);
}}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getColumn(SQLServerResultSet.java:695)
at com.microsoft.sqlserver.jdbc.SQLServerResultSetMetaData.getColumnName(SQLServerResultSetMetaData.java:103)
at n.dimensional.point.Point.getPoints(Point.java:79)
at n.dimensional.point.Point.main(Point.java:95)
Java Результат: 1
Как решаются эти проблемы?
Как данные назначаются точке, откуда они поступили из базы данных?
1 ответ
Было бы достаточно сделать getPoints
следующее:
protected static List<Double> getPoints() throws SQLException {
List<Double> points = new ArrayList<>();
if (conn != null) {
String query = "SELECT point FROM website"; // point ?
try (PreparedStatement stm = conn.prepareStatement(query);
ResultSet rs = stm.executeQuery()) {
while (rs.next()) {
points.add(rs.getDouble(1));
}
}
}
return points;
}
Это упрощает запросы. rsmd.getColumnName(i)
был передан не номер столбца на основе 1, а индекс строки на основе 0.
Попробуй с ресурсами try (DECLARATIONS) { ... }
гарантирует, что объявленные переменные всегда закрыты.
SELECT *
является пустой тратой и, как правило, требует определения столбцов базы данных в определенном порядке.
Совет:
public List<Double> getI() {
return Collections.unmodifiableList(instance);
}
тогда исходный объект Point нельзя изменить, изменив возвращенный список.
public static void main(String[] args) throws SQLException {
List<Double> data = Point.getPoints();
Point pt = new Point(data);
System.out.println("Data: "+data);
}