Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Java програма с JDBC database


SSMeniak

Препоръчан отговор


Здравейте. Направих си с JavaFX един графичен интерфейс с който вкарвам информация в базата данни (JDBC:Derby) но сега не знам как да изкарам тази информация в JavaFX TableView или информацията от базата данни да ми се извежда в табличен вид в графичния интерфейс на програмата. Прочетох какви ли не материали в нетa но не можах да се оправя сам. С OS Windows 7 SP1 сам с инсталиран JDK 1.8

 

Това е кода с който селектирам полетата от базата данни и данните от полетата ги вкарвам в ObservableList но не знам как да вкарам сега тези данни от полетата (ObservableList) в колоните на таблицата или колона от базата данни в колона на таблицата.

 

Това е кода от контролера на FXML файла който трябва да показва информацията от база данни в таблицата(TableView)

try {
            String host = "jdbc:derby://localhost:1527/database";
            String userName = "username";
            String password = "password";
            Connection con = DriverManager.getConnection(host, userName, password);
            Statement stmt = con.createStatement();
            String sqlSelect = "SELECT * FROM ARTICLE";
            ResultSet rs = stmt.executeQuery(sqlSelect);

            ObservableList name = FXCollections.observableArrayList();
            ObservableList value = FXCollections.observableArrayList();
            while (rs.next()) {
                name.add(rs.getString("ARTICLENAME"));
                value.add(rs.getString("ARTICLEVALUE"));
            }
            stmt.close();
            con.close();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    Това са имената на таблицата и колоните в контролера които идват от FXML файла
    @FXML
    private TableView<?> article;
    @FXML
    private TableColumn<?, ?> colArticleName;
    @FXML
    private TableColumn<?, ?> colArticleValue;

 

 

Линк към коментара
Сподели в други сайтове

...

Здравейте !

 

Не съм се заигравал много-много с JavaFX, но все пак може да успея да помогна. 

 

1) ObservableList обектите ги създавате в try/catch блок - видимостта им, извън него е нулева и изобщо няма да бъдат намерени, след като се излезе от блока. Още повече, че никъде не се обработват или подават като параметри на методи, които да ги set-ват на каквото и да е TableView (и по - специално - на article). Логично е информацията да не се вижда в крайния резултат. За да проверите, че в базата данните съществуват, принтирайте със System.out.println() елементите от ResultSet-а в конзолата.

 

2) Използването на анонимни класове за Table компонентите е почти сигурна рецепта за проблеми. Специфицирайте какви данни ще съхраняват тези контейнери, тъй като подозирам, че вътрешното им обръщение, ще е към съответния предефиниран метод toString(). Ако имате по - сложна структура, която не предефинира toString() метода на класа си, то текста, който ще получите ще е в "привлекателния" формат 

[Ljava.lang.String;@15db9742

След малко търсене, попаднах на това, това и това. Мисля, че ще Ви помогнат да огледате кода си и да го пипнете, където трябва.

 

Поздрави !

Линк към коментара
Сподели в други сайтове

Здравейте и благодаря за информацията и линковете но там листовете са с предварително дефинирани стойности и няма проблем кода си работи но когато се опитам да имплементирам посочените примери с база данни нищо не става освен да ми даде грешка. Ето ми и целия код от контролера на FXML файла за да не ви обърквам и да видите до къде сам я докарал.

А и в Java толкова ли е трудно да вкараш някаква информация от база данни в таблица та се разтягат толкова големи гимнастики? Аз пиша PHP по принцип но реших да видя какво е това Java и ако трябва да изпиша 200 реда код за такава лесна манипулация не си струва да се занимавам.

import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;

public class Screen1Controller implements Initializable {

    @FXML
    private TextField articleName;
    @FXML
    private TextField articleValue;
    @FXML
    private TextField articleNamesSell;
    @FXML
    private TextField articleValueSell;
    @FXML
    private TableView<String> article;
    @FXML
    private TableColumn<String, String> colArticleName;
    @FXML
    private TableColumn<String, String> colArticleValue;
    ObservableList<String> name;
    ObservableList<String> value;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        try {
            String host = "jdbc:derby://localhost:1527/database";
            String userName = "username";
            String password = "password";
            Connection con = DriverManager.getConnection(host, userName, password);
            Statement stmt = con.createStatement();
            String sqlSelect = "SELECT * FROM ARTICLE";
            ResultSet rs = stmt.executeQuery(sqlSelect);

            name = FXCollections.observableArrayList();
            value = FXCollections.observableArrayList();
            while (rs.next()) {
                name.add(rs.getString("ARTICLENAME"));
                value.add(rs.getString("ARTICLEVALUE"));
            }
            stmt.close();
            con.close();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }

    @FXML
    private void addArticle(ActionEvent event) {
        String aName = articleName.getText();
        String str = articleValue.getText();
        Double aValue = Double.parseDouble(String.valueOf(str));
        try {
            String host = "jdbc:derby://localhost:1527/database";
            String userName = "username";
            String password = "password";
            Connection con = DriverManager.getConnection(host, userName, password);
            Statement stmt = con.createStatement();
            String sqlInsert = "INSERT INTO ARTICLE(ARTICLENAME, ARTICLEVALUE) VALUES ('" + aName + "', " + aValue + ")";
            stmt.execute(sqlInsert);
            initialize(null, null);
            stmt.close();
            con.close();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        articleName.setText("");
        articleValue.setText("");
    }
}
Линк към коментара
Сподели в други сайтове

 

Здравейте и благодаря за информацията и линковете но там листовете са с предварително дефинирани стойности и няма проблем кода си работи но когато се опитам да имплементирам посочените примери с база данни нищо не става освен да ми даде грешка. Ето ми и целия код от контролера на FXML файла за да не ви обърквам и да видите до къде сам я докарал.

А и в Java толкова ли е трудно да вкараш някаква информация от база данни в таблица та се разтягат толкова големи гимнастики? Аз пиша PHP по принцип но реших да видя какво е това Java и ако трябва да изпиша 200 реда код за такава лесна манипулация не си струва да се занимавам.

...

Не виждам проблеми по логиката на кода, което вече навежда над въпросите дали в базата има нещо / дали се записва нещо и другото е по-скоро свързано с FXML файла, който би трябвало да описва този контролер. Предполагам цялата постановка си има стартиращ клас, който да имплементира Application, нали ? Може в някой от тези места да има нещо куцо ...

 

 

 

А и в Java толкова ли е трудно да вкараш някаква информация от база данни в таблица та се разтягат толкова големи гимнастики? Аз пиша PHP по принцип но реших да видя какво е това Java и ако трябва да изпиша 200 реда код за такава лесна манипулация не си струва да се занимавам.

Не, не е трудно, стига да се знае как да се вкарва. Виждате, че метода за addArticle не е 200 реда. А и метода за изчитане е 20 реда. Няма да коментирам кода, но с малко оглед ще се види как се спестяват поне 20% от написаното.

 

Java не е PHP. За приложения от типа "Страничката на домашния любимец" e пълен overhead - това е нещо, което има приложение за големи проекти с достатъчно голяма база, обекти и логика. Честно казано се учудвам на решението Ви да започнете от JavaFX - това е доста специализирано течение на Java development-а, което се различава чувствително от стандартните подходи. И доколкото имам поглед, не е и широко разпространено - главно защото Java не е толкова силна в десктоп / native UI приложенията. 

 

Прегледайте FXML файла и Application-имплементиращия клас, евентуално там дали няма проблеми ...

 

Поздрави !

Линк към коментара
Сподели в други сайтове

Знам че кода който сам представил е под всякаква критика но неговата цел е да видя дали ще сработи и ако сработи естествено ще си го напиша  както трябва да се напише.

 

Заинтересуваха ме десктоп приложенията и ей така на собствена глава си рекох Java, запознах се с основата и се заинтересувах как вече да направя нещо с графичен интерфейс макар и максимално просто да е. Намерих в един сайт уроци за Java Swing и там ми препоръчаха JavaFX

 

И понеже целта да започна да уча Java е именно защото искам да пиша десктоп приложения и ако има език който е по добър от Java в това моля кажете.

 

Благодаря ви за отделеното време.

 

 


Линк към коментара
Сподели в други сайтове

Знам че кода който сам представил е под всякаква критика но неговата цел е да видя дали ще сработи и ако сработи естествено ще си го напиша  както трябва да се напише.

Именно, това както отбелязахме не е цел на дискусия :).

Заинтересуваха ме десктоп приложенията и ей така на собствена глава си рекох Java, запознах се с основата и се заинтересувах как вече да направя нещо с графичен интерфейс макар и максимално просто да е. Намерих в един сайт уроци за Java Swing и там ми препоръчаха JavaFX

Swing беше актуален миналото десетилетие. В това отношение JavaFX си е направо "модерно" - въпреки, че пак е на 5 години някъде ...

 

И понеже целта да започна да уча Java е именно защото искам да пиша десктоп приложения и ако има език който е по добър от Java в това моля кажете.

Много зависи за каква ОС ще правите тези приложения. JavaFX има смисъл, ако става дума, ако целта е многоплатформени приложение - да работят на MacOS, Windows, Linux и т.н. Ако целта е само Windows или само MacOS, тогава може да се насочите към C# / .NET / Visual C++ за Windows и ObjectiveC за MacOS. За линукс, честно казано не мога да дам съвет - там съм попадал и на Java и на Python и на C++. 

В този ред на мисли, огледайте какъв тип приложение искате да създавате - технологии много, но не всички са идеални за дадена ОС. 

 

Ако след това, все още искате да се занимавате с JavaFX, ще отделя време да направя подобно sample приложение, за да видим тая работа защо не иска да тръгне. 

 

Поздрави !

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване