Перемещение массивов из результата Set - PullRequest
0 голосов
/ 21 ноября 2011

Я застрял при попытке реализовать мой маленький 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());
        }

      }
}

Я действительно надеюсь, что кто-то может помочь,

спасибо

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

Прежде всего, вы должны соблюдать соглашения об отступах и именах Java, если вы ожидаете, что какой-нибудь опытный программист прочтет его (мы люди, а не компиляторы;))

Проблема: насколько я понимаю, вы храните результаты в локальной переменной, но ничего не делаете с ней, она никуда не денется.

1 голос
/ 21 ноября 2011

РЕДАКТИРОВАТЬ: Я думаю, что ваша проблема заключается в заказе.Вы заполняете переменные alt_*, когда класс инициализируется на основе eleArray - но этот массив заполняется только при вызове метода Result().

По определению, этот метод должен произойти послекласс инициализирован (вы не можете получить ссылку на неструктурированный экземпляр класса), поэтому эти переменные никак не могут отразить поиск в базе данных.

Я бы сказал, что ваш код мог бы справиться с рефакторингомуменьшить количество полей , которые оно использует;вместо этого замените их локальными переменными в методах, когда вы хотите их использовать.Это будет менее подвержено проблемам с заказом, и, кроме того, сделает ваш код намного проще для понимания.Вероятно, вам нужно только сохранить ссылку на массив точек и, возможно, некоторые графические элементы (определенно нет причин, по которым Connection, Statement и ResultSet, например, должны быть полями уровня класса).

На самом деле я только что просмотрел ваш код, и вам нужны только два поля в его нынешнем виде:

  • 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.

...