从结果集中移动数组



我一直在尝试实现我的小JFrame。基本上,我试图从连接到数据库的resultSet中构建一个数组,当JFrame被调用时,小框架用数据库中的数据填充数组。

这里是完整的代码,我已经构建了,因为我已经问了周围,没有人有一个解决方案为我:(当然在java中,这必须是一个常规的请求,因为它是在PHP等?

无论如何,如果有人能帮忙,因为这是我的大学项目,我将永远感激。

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class mainStat extends JPanel {

BufferedImage img;
Double[] eleArray;
private Image bg;
private Image pic;
int alt_1 = normalise(eleArray[0]);
int alt_2 = normalise(eleArray[1]);
int alt_3 = normalise(eleArray[2]);
int alt_4 = normalise(eleArray[3]);
int alt_5 = normalise(eleArray[4]);
int alt_6 = normalise(eleArray[5]);
int alt_7 = normalise(eleArray[6]);
int alt_8 = normalise(eleArray[7]);
int alt_9 = normalise(eleArray[8]);
int alt_0 = normalise(eleArray[9]);
private double shop;
private double bike_shop;
private double accomadation;
int alt = 70;
JLabel label1;
private String display_distance;
static String[] eleResults;
Connection con;
Statement stmt;
ResultSet rs;
static double eleOne;
static double eleTwo;
static double eleThree;
static double eleFour;
static double eleFive;
static double eleSix;
static double eleSeven;
static double eleEight;
static double eleNine;
static double eleZero;

//add in constructor method calling paint(Graphics g)
public mainStat(String distance){
    display_distance = distance;

    label1 = new JLabel();
     setBorder(
             BorderFactory.createCompoundBorder(
                        BorderFactory.createCompoundBorder(
                                        BorderFactory.createTitledBorder("Geo-strip"),
                                        BorderFactory.createEmptyBorder(5,5,5,5)),
                        getBorder()));
     add(label1);

}
    public void paintComponent(Graphics g){
    super.paintComponent(g);
    //main GPS strip 
    try {
           img = ImageIO.read(new File("C:\test\geo_strip_box_ex.png"));
           bg = ImageIO.read(new File("C:\test\geo_strip_main_ex.png"));
       } catch (IOException e) {
       }
    // Primary indicator box
    g.setColor(Color.WHITE);
    g.fillRect(20, 45, 75, 60);
    g.drawImage(img, 10, 25, null);
    Font font = new Font("Serif", Font.PLAIN, 25);
    g.setColor(Color.BLACK);
    g.setFont(font);
    g.drawString(display_distance, 16, 80);

    // Main Geo-data
    g.drawImage(bg, 10, 25, null);
    // Altitude data
    // Point 1
    g.setColor(Color.RED);
    g.fillOval(105, alt_1, 10, 10);
    // Point 2
    g.setColor(Color.RED);
    g.fillOval(153, alt_2, 10, 10);
    // Point 3
    g.setColor(Color.RED);
    g.fillOval(201, alt_3, 10, 10);
    // Point 4
    g.setColor(Color.RED);
    g.fillOval(249, alt_4, 10, 10);
    // Point 5
    g.setColor(Color.RED);
    g.fillOval(297, alt_5, 10, 10);
    // Point 6
    g.setColor(Color.RED);
    g.fillOval(345, alt_6, 10, 10);
    // Point 7
    g.setColor(Color.RED);
    g.fillOval(394, alt_7, 10, 10);
    // Point 8
    g.setColor(Color.RED);
    g.fillOval(442, alt_8, 10, 10);
    // Point 9
    g.setColor(Color.RED);
    g.fillOval(490, alt_9, 10, 10);
    // Point 10
    g.setColor(Color.RED);
    g.fillOval(540, alt_0, 10, 10);
    // Performance blocks that are build out of an array
    //first block
    g.setColor(Color.BLUE);
    g.fillRect(108, 144, 108, 12);
    //second block
    g.setColor(Color.GREEN);
    g.fillRect(218, 144, 108, 12);
    //third block
    g.setColor(Color.ORANGE);
    g.fillRect(329, 144, 108, 12);
    //forth block
    g.setColor(Color.RED);
    g.fillRect(439, 144, 108, 12);
}
    private int normalise(double altitude){
        //Build the array once correct this part will be changed to allow data base connectivity
                ;
        //Next stage is to find the max values within the array
        double max = eleArray[0];
            for (int i = 0; i < 10; i++)
        if (eleArray[i]> max) max = eleArray[i];

        //Replicate the double loop control for the min values
        double min = eleArray[0];
            for (int i = 0; i < 10; i++)
        if (eleArray[i]< min) min = eleArray[i];
        //Now set the normalised scale; first with the minimum and then the maximum
        double minNalt = 50;
        double maxNalt = 120;
        double result = maxNalt+(altitude-min)*(minNalt-maxNalt)/(max-min);
        int aInt = (int)result;
        return aInt;
    }
        public void Result() {
        String query = "SELECT trkpt_ele FROM routes where trkseg_name = '2011-06-14'";
        try
        {
          // Connect to the database
          //  Similar to php first I need to create a variable to connect to the MySQL database.
          String url = "jdbc:mysql://localhost:3306/bicycleinformationschema"; 
          // Now we need to include username and pass and test mysql database connection
          Connection con = DriverManager.getConnection(url,"root", "kop98mnbvcxz");
          Statement st = con.createStatement();
          ResultSet rs = st.executeQuery(query);
          ArrayList <Double> eleResults = new ArrayList<Double>();
          while (rs.next())
              eleResults.add(rs.getDouble(1));
              Double[] eleArray = eleResults.toArray(new Double[0]);

          }
        catch (SQLException ex)
        {
          System.err.println(ex.getMessage());
        }
      }
}

我真的希望有人能帮忙,

谢谢

首先,如果您希望一些经验丰富的程序员阅读它,您应该尊重缩进和Java命名约定(我们是人,而不是编译器;))

问题:据我所知,你把结果保存在一个局部变量中,但是你什么都不做,它无处可去。

编辑:我认为你的问题是订单问题。当基于eleArray初始化类时,您正在填充alt_*变量-然而该数组仅在调用Result()方法时填充。

根据定义,该方法必须在类初始化之后发生(您不能获得对类的未构造实例的引用),因此这些变量无法反映数据库查找。

我想说你的代码可以做一些重构来减少字段使用的数量;相反,当您想要使用它们时,可以将它们替换为方法中的局部变量。这将不容易出现排序问题,而且将使您的代码更容易理解。您可能只需要保持对点数组的引用,可能还需要一些GUI内容(例如Connection, StatementResultSet应该是类级别字段的绝对没有理由)。

事实上,我刚刚看过你的代码,你只需要两个字段:

  • displayDistance,这是一个构造函数参数
  • 对数据库查询的规范化结果的引用

其他部分要么未使用,要么仅在单个方法中使用。


你的数据库代码在我看来是正确的(好吧,你每次都在循环中重建eleArray数组,这似乎是多余的,但无害)。

JDBC结果集的典型用法实际上是这样的:

ResultSet rs = stmt.executeQuery("...");
List<MyDomainClass> results = new ArrayList<MyDomainClass>();
while (rs.next()) {
    MyDomainClass obj;
    // create obj by querying rs for this row
    results.add(obj);
}

,这就是你在这里所做的,通过从每一行拉出double并将其添加到eleResults

相关内容

  • 没有找到相关文章

最新更新