Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package login;
- import javafx.application.Application;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.geometry.Insets;
- import javafx.geometry.Pos;
- import javafx.scene.Scene;
- import javafx.scene.control.*;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.layout.VBox;
- import javafx.stage.Stage;
- import java.sql.*;
- public class Main extends Application {
- // поля для подключения
- private static Connection con;
- private static Statement stmt;
- private static ResultSet rs;
- Label labelPicture = new Label();
- ComboBox<String> cbDataBases;
- Label labelInfo = new Label();
- TextField tfUrl = new TextField();
- TextField tfUser = new TextField();
- PasswordField tfPass = new PasswordField();
- // поля с настройками подключения к БД
- private String URL; // = "jdbc:postgresql://127.0.0.1:5432/testdb2";
- // private static final String URL = "jdbc:mysql://localhost:3306/carsfff";
- private String USER; // = "postgres";
- // private static final String USER = "admin"; // mysql
- private String PASS; // = "root";
- // кнопка вкл/выкл
- ToggleButton btnConn = new ToggleButton(" Connect ");
- // Query connectAndQuery = new Query();
- // класс подключения к БД
- ConnectDB connectDB = new ConnectDB();
- // класс отключения от БД
- Disconnect disconnect = new Disconnect();
- Query query = new Query();
- public static void main(String[] args) {
- launch(args);
- }
- public void start(Stage stage){
- //////////////////////////////////////////////TEST/////////////////////////////////////////////////////////////
- // заполняем TextFild и PasswordField для PostgreSql - сервера
- // tfUrl.setText("jdbc:postgresql://127.0.0.1:5432/testdb2");
- // tfUser.setText("postgres");
- // tfPass.setText("root");
- // заполняем TextFild и PasswordField для Mysql - сервера
- // tfUrl.setText("jdbc:mysql://localhost:3306/carsfff");
- // tfUser.setText("admin");
- // tfPass.setText("root");
- // заполняем TextFild и PasswordField для SQLite - сервера
- tfUrl.setText("jdbc:sqlite:C:\\SQLite\\testdb1.db");
- ///////////////////////////////////////////////TEST////////////////////////////////////////////////////////////////
- //считуем значения с TextField и PasswordField
- URL = tfUrl.getText();
- USER = tfUser.getText();
- PASS = tfPass.getText();
- // инициализация переменных URL, USER, PASS
- initUrlUserPass();
- stage.setTitle("Main menu");
- // стиль кнопки из css
- btnConn.setId("btnConnColor");
- // прозрачная подсказка в TestField
- tfUrl.setPromptText(" Enter URL Database");
- tfUser.setPromptText(" Enter username");
- tfPass.setPromptText(" Enter password");
- // задаем размер TestField
- tfUrl.setPrefColumnCount(15);
- tfUser.setPrefColumnCount(15);
- tfPass.setPrefColumnCount(15);
- // создать список с именами Баз типа Observablelist из элементов
- ObservableList<String> basesTypes = FXCollections.observableArrayList("PostgreSqL", "MySqL", "SQLite");
- // создаем комбинироаный список
- cbDataBases = new ComboBox<String>(basesTypes);
- // корневой узел
- VBox root = new VBox();
- // отступ по краям VBox root
- root.setPadding(new Insets(0,0,15,0));
- VBox vBoxTop = new VBox();
- // отступы в vBoxTop
- vBoxTop.setPadding(new Insets(5,0,5,0));
- // промежутки между элементами внутри vBoxTop
- vBoxTop.setSpacing(10);
- // выравнивание по центру текущего окна
- vBoxTop.setAlignment(Pos.CENTER);
- vBoxTop.getChildren().add(cbDataBases);
- // добавляем imageViev в vBoxTop
- vBoxTop.getChildren().add(labelPicture);
- VBox vBoxCenter = new VBox();
- // промежутки между элементами внутри vBoxCenter
- vBoxCenter.setSpacing(5);
- // отступы вокруг vBoxCenter
- vBoxCenter.setPadding(new Insets(5, 20, 10, 20));
- // выравниваем все елементы по центру внутры vBoxCenter
- vBoxCenter.setAlignment(Pos.CENTER);
- vBoxCenter.getChildren().addAll( tfUrl, tfUser, tfPass);
- //----------------- ComboBox, Label, переменная для класа ModalWorkTable
- // установить значение по умолчанию в ComboBox "cbDataBases"
- cbDataBases.setValue("SQLite");
- // добавляем в Label картинку
- labelPicture.setGraphic( sizeLabelPicture("SQLite") );
- //передаем имя базы в ModalWorkTable для вывода значка
- ModalWorkTable.setNameSql("SQLite");
- //--------------------
- //обработчик события на btnConn
- btnConn.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent ev) {
- // повторно считуем данные с TextFiel и PasswordField в переменные
- initUrlUserPass();
- // отключение от базы
- if (cbDataBases.getValue().equals("PostgreSqL") &&
- !(btnConn.isSelected()) &&
- URL.contains("postgresql") ){
- // отключаемся от базы
- disconnect.disconMeth(ConnectDB.getConnection());
- labelInfo.setText("PostgreSqL " + disconnect.getMessage() );
- // делаем активной/ неактивной Combobox, TextField
- activeInactive(false);
- }
- // отключение от базы MySqL , SQLite
- else if (cbDataBases.getValue().equals("MySqL") && !(btnConn.isSelected()) && URL.contains("mysql") ||
- (cbDataBases.getValue().equals("SQLite") && !btnConn.isSelected() && URL.contains("sqlite")) ){
- // отключаемся от базы
- disconnect.disconMeth(ConnectDB.getConnection());
- labelInfo.setText("Mysql " + disconnect.getMessage());
- // делаем активной Combobox, TextField выводим соответствующий текст и цвет button
- // отключаемся от базы
- activeInactive(false);
- }
- // подключаемся к PostgreSqL
- else if ( (cbDataBases.getValue()).equals("PostgreSqL") &&
- btnConn.isSelected() && URL.contains("postgresql") ){
- // подключаемся к базе
- connectDB.conDB(URL, USER, PASS);
- // флаг подключения
- if (ConnectDB.getFlag()){
- // передаем поток Connection в Query
- query.setCon(ConnectDB.getConnection());
- //вызов модального окна
- //////////////////////////////////////////////////////////
- ModalWorkTable.mainTable();
- // сообщение внизу проги об подключении
- labelInfo.setText(cbDataBases.getValue()+ " " + connectDB.getMessage() );
- // делаем не активной Combobox, TextField, делаем соответствующий текст и цвет button
- // подключаемся к базе
- activeInactive(true);
- }
- else{
- // кнопку переводим в режим "невыбраной" если не удалось подключиться
- btnConn.setSelected(false);
- labelInfo.setId("labelInfoDisconColor");
- labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
- }
- }
- // подключаемся к MySqL, SQLite
- else if ( (cbDataBases.getValue().equals("MySqL") && btnConn.isSelected() && URL.contains("mysql")) ||
- (cbDataBases.getValue().equals("SQLite") && btnConn.isSelected() && URL.contains("sqlite")) ){
- // подключаемся к базе
- connectDB.conDB(URL, USER, PASS);
- // флаг подключения
- if (connectDB.getFlag()) {
- // передаем поток Connection в Query
- query.setCon(ConnectDB.getConnection());
- //вызов второго модального окна
- //////////////////////////////////////////////////////////
- ModalWorkTable.mainTable();
- labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
- // делаем не активной Combobox, TextField выводим соответствующий текст и цвет button
- // подключаемся к базе
- activeInactive(true);
- }else{
- // кнопку переводим в режим "невыбраной" если не удалось подключиться
- btnConn.setSelected(false);
- labelInfo.setId("labelInfoDisconColor");
- labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
- }
- }
- //если не подключается
- else {
- // label для отключения красный цвет)
- labelInfo.setId("labelInfoDisconColor");
- labelInfo.setText( "Connection Failed" );
- // кнопку переводим в режим "невыбраной"
- btnConn.setSelected(false);
- }
- }
- });
- //слушатель и обработчик событий ComboBox для смени картинки текущей базу
- cbDataBases.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- if (cbDataBases.getValue().contains( "MySqL") ){
- //выводится значек базы в Main
- labelPicture.setGraphic( sizeLabelPicture( "MySqL" ) );
- //передаем имя базы в ModalWorkTable для вывода значка
- ModalWorkTable.setNameSql("MySqL");
- }
- else if (cbDataBases.getValue().contains( "PostgreSqL" ) ){
- //выводится значек базы в Main
- labelPicture.setGraphic( sizeLabelPicture( "PostgreSqL" ) );
- //передится имя базы в ModalWorkTable для вывода значка и тп.
- ModalWorkTable.setNameSql("PostgreSqL");
- }
- else if (cbDataBases.getValue().contains("SQLite")){
- // выводится значек базы в Main
- labelPicture.setGraphic( sizeLabelPicture("SQLite") );
- // передается имя базы в ModalWorkTable для вывода значка и тп.
- ModalWorkTable.setNameSql("SQLite");
- }
- }
- });
- //всплывающая подсказка ComboBox
- cbDataBases.setTooltip( new Tooltip(" Select DataBase ") );
- VBox vBoxButton= new VBox();
- // отступы вокруг vBoxCenter
- vBoxButton.setPadding(new Insets(10, 0, 0, 0));
- // выравниваем элементы по ценру окна
- vBoxButton.setAlignment(Pos.CENTER);
- vBoxButton.getChildren().add( btnConn);
- // VBOX для LabelInfo
- VBox vBoxLabelInfo = new VBox();
- //отступы вокруг vBoxLabelInfo
- vBoxLabelInfo.setPadding(new Insets(10, 0, 5, 0));
- vBoxLabelInfo.getChildren().add(labelInfo);
- vBoxLabelInfo.setAlignment(Pos.BOTTOM_CENTER);
- // добавляем VBOX-root
- root.getChildren().addAll(vBoxTop,vBoxCenter, vBoxButton, vBoxLabelInfo);
- // создаем сцену
- Scene scene = new Scene(root);
- // сцена на подмостках
- stage.setScene(scene);
- // отключем кнопку маximyze и фиксируем окно
- stage.setResizable(false);
- //по центру
- root.setAlignment(Pos.CENTER);
- // добавляем стиль-css
- scene.getStylesheets().add(Main.class.getResource("MainWindow.css").toExternalForm());
- // показуем подмостку и сцену
- stage.show();
- }
- // задает размер иконки и отправляет в label
- public ImageView sizeLabelPicture(String sqlType){
- ImageView imageViewPic = new ImageView();
- if (sqlType.equals("PostgreSqL")){
- Image image = new Image(getClass().getResourceAsStream("postgreSql.png"));
- imageViewPic.setFitHeight(55);
- imageViewPic.setFitWidth(55);
- imageViewPic.setImage(image);
- // видимые TextField tfUser, tfPass для логина и пароля
- tfUser.setVisible(true);
- tfPass.setVisible(true);
- }
- else if (sqlType.equals("MySqL")){
- Image image = new Image(getClass().getResourceAsStream("mysql.png"));
- imageViewPic.setFitHeight(55);
- imageViewPic.setFitWidth(55);
- imageViewPic.setImage(image);
- // видимые TextField tfUser, tfPass для логина и пароля
- tfUser.setVisible(true);
- tfPass.setVisible(true);
- }
- else if (sqlType.equals("SQLite")){
- Image image = new Image(getClass().getResourceAsStream("SQLite.png"));
- imageViewPic.setFitHeight(55);
- imageViewPic.setFitWidth(120);
- imageViewPic.setImage(image);
- // не видимые TextField tfUser, tfPass для логина и пароля
- tfUser.setVisible(false);
- tfPass.setVisible(false);
- }
- return imageViewPic;
- }
- // делаем активной/ неактивной Combobox, TextField
- public void activeInactive(boolean flag){
- cbDataBases.setDisable(flag);
- tfUrl.setDisable(flag);
- tfUser.setDisable(flag);
- tfPass.setDisable(flag);
- if (flag == true){
- //надпись кнопки
- btnConn.setText("Disconnect");
- // метка, стиль, цвет кнопки
- btnConn.setId("btnDisconColor");
- // создаем метку для удачного подключения(зеленый цвет)
- labelInfo.setId("labelInfoConnColor");
- }
- else {
- btnConn.setText(" Connect ");
- // создаем метку для отключения красный цвет)
- labelInfo.setId("labelInfoDisconColor");
- // метка, стиль, цвет кнопки
- btnConn.setId("btnConnColor");
- //передаем в class ConnectDB flag = false, обнуляем переменную Connection;
- ConnectDB.setFlag(false);
- ConnectDB.setConnection(null);
- }
- }
- public void initUrlUserPass(){
- //считуем значения с TextField и PasswordField в переменные URL USER PASS
- URL = tfUrl.getText();
- USER = tfUser.getText();
- PASS = tfPass.getText();
- }
- }
- package login;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.geometry.Insets;
- import javafx.geometry.Pos;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.*;
- import javafx.scene.effect.DropShadow;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.layout.HBox;
- import javafx.scene.layout.VBox;
- import javafx.stage.Modality;
- import javafx.stage.Stage;
- import javafx.scene.control.TableColumn.CellEditEvent;
- /**
- * Created by Admin on 07.12.2016.
- */
- public class ModalWorkTable {
- // переменная для определеня значка базы в окне класа ModalWorkTable
- private static String nameSql = "";
- // сетер для нинициализации переменной nameSql имя базы
- public static void setNameSql(String nameSql){
- ModalWorkTable.nameSql = nameSql;
- }
- public static String getNameSql(){ return nameSql; }
- // ComboBox для таблиц определенной базы
- static ComboBox<String> cbAllTablesOfDataBase = new ComboBox<>();
- //список для ComboBox cbAllTablesOfDataBase
- static ObservableList<String> baseTablesInBase;
- // выводит количество таблиц в определенной Базе
- static Label labelTotalTablesInBases = new Label();
- static Label labelTotalBases = new Label("Name Base");
- // выводит количество баз
- static Label labelBases = new Label();
- static Label labelTest = new Label("test Label");
- static TableView tableView = new TableView();
- static Button btnOk = new Button("Ok");
- static Button btnDel = new Button("Delete Last Row");
- static Button btnDelTable = new Button("Delete Select Table");
- static Button btnCreateTbl = new Button("Create Table");
- static Query query = new Query();
- public static void mainTable(){
- // делаем кнопки неактивными
- btnOk.setDisable(true);
- btnDel.setDisable(true);
- btnDelTable.setDisable(true);
- // при запуске modalWindowTable очищаем все
- tableView.getSelectionModel().clearSelection();
- tableView.getItems().clear();
- tableView.getColumns().clear();
- cbAllTablesOfDataBase.getSelectionModel().clearSelection();
- // редактирование ComboBox
- cbAllTablesOfDataBase.setEditable(true);
- Query.data.clear();
- // размер таблицы
- tableView.setMinSize(600, 300);
- Main main = new Main();
- Stage stage = new Stage();
- // указываем stage, что окно модальное
- stage.initModality(Modality.APPLICATION_MODAL);
- // таблица доступна для редактирования
- tableView.setEditable(true);
- // эффект тени вокруг таблицы
- tableView.setEffect(new DropShadow());
- HBox hBox = new HBox();
- // VBox для tableView
- VBox tableBox = new VBox();
- // точка с которой начинает отображаться TableView
- tableBox.setLayoutX(25);
- tableBox.setLayoutY(195);
- tableBox.getChildren().add(tableView);
- //отступы вокруг vBoxLabelInfo
- hBox.setPadding(new Insets(0, 10, 0, 10));
- // выводит имя текущей базы для MySqL
- if (nameSql.equals("MySqL")){
- labelBases.setText( query.nameBaseMySqL() );
- }// выводит имя текущей базы для PostgreSql
- else if(nameSql.equals("PostgreSqL")){
- // выводит имя текущей базы PostgreSql в Label
- labelBases.setText( query.nameBasePostgreSqL() );
- }
- // стили для Lables
- styleLabels();
- // заполнение ComboBox - cbAllTablesOfDataBase именами таблиц текущей базы SQL, установка имени Базы в label
- addValuesNameTablesInComboBox();
- // слушатель, обработчик события на ComboBox для Button "active/inActive"
- // при выборе любого елемента в Combobox - кнопки btnOk и btnDel стают активными
- cbAllTablesOfDataBase.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // номер елемента в массиве для Combobox
- if ( (cbAllTablesOfDataBase.getSelectionModel().getSelectedIndex() >= 0 )) {
- // активные кнопки
- btnOk.setDisable(false);
- btnDel.setDisable(false);
- btnDelTable.setDisable(false);
- }else {// неактивные кнопки
- btnOk.setDisable(true);
- btnDel.setDisable(true);
- btnDelTable.setDisable(true);
- }
- }
- });
- // обработчик, слушатель Button
- btnOk.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // refresh
- toDo();
- }
- });
- // удаление таблицы с SQl-базы
- btnDelTable.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // определение выбран ли элемент в combobox
- if (cbAllTablesOfDataBase.getSelectionModel().getSelectedIndex()>=0){
- // получение выбранной строки(таблицы) в comboBox
- String nameTable = cbAllTablesOfDataBase.getSelectionModel().getSelectedItem();
- // вызов метода "delTable()" для удаление таблицы
- labelTest.setText( Query.delTable(nameTable) );
- // обновление списка таблиц в ComboBox cbAllTablesOfDataBase, установка имени Базы в label
- // после создания новой таблицы
- ModalWorkTable.addValuesNameTablesInComboBox();
- }
- }
- });
- // удаление последнего рядка
- btnDel.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent eventDel) {
- //
- // if (getTableObrabotchik().getTableView().isFocused() ){
- //номер текущего рядка удаление последнего рядка таблицы
- String lineQ = Query.delRow(cbAllTablesOfDataBase.getValue());
- labelTest.setText( lineQ);
- // }
- //refresh table
- toDo();
- }
- });
- // вызов окна по созданию новой таблицы
- btnCreateTbl.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // очистка всех элементов CreateTable
- CreateTable.clearAll();
- // запуск формы CreateTable
- CreateTable.createNewTbl();
- }
- });
- // очищаем ComboBox от выбранного элемента при запуске
- cbAllTablesOfDataBase.getSelectionModel().clearSelection();
- // проверка для вывода значка базы в hBox
- if (nameSql.equals("MySqL") ){
- hBox.getChildren().add(main.sizeLabelPicture("MySqL"));
- }
- else if (nameSql.equals("PostgreSqL")){
- hBox.getChildren().add(main.sizeLabelPicture("PostgreSqL"));
- }
- else if (nameSql.equals("SQLite")){
- hBox.getChildren().add(main.sizeLabelPicture("SQLite"));
- }
- VBox vBoxBtn = new VBox();
- vBoxBtn.setSpacing(5);
- vBoxBtn.getChildren().addAll(btnOk, btnCreateTbl, btnDel, btnDelTable);
- hBox.getChildren().addAll( new VBox(labelTotalBases ,labelBases),
- labelTotalTablesInBases, cbAllTablesOfDataBase, vBoxBtn , labelTest );
- hBox.setLayoutX(15);
- hBox.setLayoutY(40);
- // промежутки между элементами внутри vBoxTop
- hBox.setSpacing(10);
- // hBox.setPrefSize(200, 80);
- hBox.setAlignment(Pos.CENTER);
- Group root = new Group();
- stage.setTitle("Окно по работе с базой");
- // задний фон
- Image image = new Image("login/backgroundLamps.jpg");
- ImageView backgroundImage = new ImageView(image);
- root.getChildren().addAll(backgroundImage , hBox, tableBox);
- Scene scene = new Scene(root, 930, 600);
- // scene.getStylesheets().add("login/WorkTable.css");
- // scene.getStylesheets().add(ModalWorkTable.class.getResource("MainWindow.css").toExternalForm());
- stage.setScene(scene);
- // отключем кнопку маximyze и фиксируем окно
- stage.setResizable(false);
- stage.show();
- }
- // стили для Lables
- private static void styleLabels(){
- labelTest.setStyle("-fx-font-size: 20px;"+
- "-fx-font-family: Arial #67f5f5;" +
- "-fx-fill: #fffdf8;" +
- "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
- labelTotalTablesInBases.setStyle("-fx-font-size: 20px;"+
- "-fx-font-family: Arial #67f5f5;" +
- "-fx-fill: #fffdf8;" +
- "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
- labelTotalBases.setStyle("-fx-font-size: 15px;"+
- "-fx-font-family: Arial #67f5f5;" +
- "-fx-fill: #fffdf8;" +
- "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
- labelBases.setStyle("-fx-font-size: 24px;"+
- "-fx-font-family: Arial #39f540;" +
- "-fx-fill: #fffdf8;" +
- "-fx-effect: innershadow( three-pass-box , rgba(57, 245, 64, 0.7) , 6, 0.0 , 0 , 2 );" );
- }
- // заполнение ComboBox - cbAllTablesOfDataBase именами таблиц текущей базы SQL, labelTotalTablesInBases
- public static void addValuesNameTablesInComboBox(){
- // очистка ObservableList перед запуском
- // baseTablesInBase.clear();
- if ( nameSql.equals("MySqL") ){
- // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
- baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArray( labelBases.getText() ));
- // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
- cbAllTablesOfDataBase.setItems(baseTablesInBase);
- // вывод количества таблиц в Базе MySqL
- labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBase( labelBases.getText() ));
- }
- else if ( nameSql.equals("PostgreSqL") ){
- // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
- baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArrayForPostgreSql() );
- // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
- cbAllTablesOfDataBase.setItems(baseTablesInBase);
- // переопределяю количество таблиц в label базы PostgreSqL
- labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBasePostgreSql() );
- }
- else if ( nameSql.equals("SQLite") ){
- // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
- baseTablesInBase = FXCollections.observableArrayList( query.namesTablesInBaseArrayForSQLite() );
- // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
- cbAllTablesOfDataBase.setItems(baseTablesInBase);
- // переопределяю количество таблиц в label базы SQLite
- labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBaseSQLite() );
- }
- }
- // запуск таблицы
- private static void toDo(){
- // очищаем от выбраных элементов в таблице
- tableView.getSelectionModel().clearSelection();
- // очищаем от елементов в таблице
- tableView.getItems().clear();
- // очищаем заголовки колонок таблицы
- tableView.getColumns().clear();
- // передаем пустую в buildData()/ получаем заполненную таблицу
- tableView = Query.buildData( tableView, cbAllTablesOfDataBase.getValue() );
- // вешаем на все столбцы слушаель
- for (int i = 0; i < Query.getArrayListTableColumn().size(); i++) {
- // сушатель с обработчиком на все колонки
- Query.getArrayListTableColumn().get(i).setOnEditCommit(new EventHandler<CellEditEvent>() {
- @Override
- public void handle(CellEditEvent t) {
- // номер строки(Rov), номер Колонки (Column), старое значение ячейки, новое значение ячейки
- labelTotalTablesInBases.setText(String.valueOf(t.getTablePosition().getColumn())
- + " " + String.valueOf(t.getTablePosition().getRow())
- + " " + t.getOldValue().toString().trim() + " " + t.getNewValue().toString().trim()
- + " " + t.getTableColumn().getText() + " "
- + String.valueOf( Query.getArrayListTableColumn().get(0).getText()) +
- " Size Col " + tableView.getColumns().size() +
- " Size Row " + tableView.getItems().size()+" New Row " + t.getTablePosition().getRow());
- /////////////////////// редактирование ячейки таблицы
- // "работа с ячейкой" если(новое знаяение и старое значение в ячейке не совпадают) и ячейка непуста
- if ( !(t.getNewValue().toString().trim().equals( t.getOldValue().toString().trim())) &&
- !(t.getNewValue().toString().trim().isEmpty()) ){
- // сообщение в labelTest
- String massageinfo = "edited row ";
- // определяем какая база выбрана, для выбора метода обновления значений в таблице
- // для MySqL
- if ( nameSql.equals("MySqL") ){
- //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
- Query.editTableMySqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
- // номер текущего рядка
- Integer.valueOf(t.getTablePosition().getRow()+1),
- // имя первой колонки id // новое значение добавленное в ячейку tableView
- String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
- // сообщение в labelTest
- labelTest.setText(massageinfo + (t.getTablePosition().getRow()+1) ) ;
- }// для PostgreSqL, SQLite
- else if ( nameSql.equals("PostgreSqL") || nameSql.equals("SQLite") ){
- //запрос на изменение значения в ячейке ComboBox // имя выбраной таблицы // имя колонки текщей таблицы
- Query.editTablePostgreSqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
- // номер текущего рядка // имя первой колонки id // новое значение добавленное в ячейку ComboBox
- Integer.valueOf(t.getTablePosition().getRow()+1),
- String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
- // сообщение в labelTest
- labelTest.setText(massageinfo + (t.getTablePosition().getRow()+1) );
- }
- }
- ////////////////////// создание пустого рядка и частичное(или полное) его заполнение(одновременно)
- // если последний ряд = выбранному ряду в таблице
- if ( (tableView.getItems().size() - 1) == t.getTablePosition().getRow() &&
- // "работа с ячейкой" если(новое знаяение и старое значение в ячейке не совпадают) и ячейка не пуста
- !(t.getNewValue().toString().trim().equals( t.getOldValue().toString().trim())) &&
- //и новое значение в ячейке непустое
- !(t.getNewValue().toString().trim().isEmpty())){
- // запрос на создание пустого рядка
- String messegeNewRow = Query.gueryAddRow( cbAllTablesOfDataBase.getValue() );
- // создание пустого рядка и заполнеие его одновременно для базы "PostgreSqL", "SQLite"
- if (getNameSql().contains("PostgreSqL") || getNameSql().contains("SQLite")){
- //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
- Query.editTablePostgreSqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
- // номер текущего рядка
- Integer.valueOf(t.getTablePosition().getRow()+1),
- // имя первой колонки id // новое значение добавленное в ячейку tableView
- String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
- }
- // создание пустого рядка и заполнеие его одновременно для базы "MySqL"
- if (getNameSql().contains("MySqL")){
- //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
- Query.editTableMySqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
- // номер текущего рядка
- Integer.valueOf(t.getTablePosition().getRow()+1),
- // имя первой колонки id // новое значение добавленное в ячейку tableView
- String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
- }
- // вывод сообщения
- labelTest.setText(messegeNewRow + " & edited");
- // refresh
- toDo();
- }
- // создание пустого рядка
- // если последний ряд = выбранному ряду и
- if ( (tableView.getItems().size() - 1) == t.getTablePosition().getRow() &&
- // ячейка в режиме редактирования и старое значение пустое и
- t.getTableView().isEditable() && (t.getOldValue().toString().isEmpty()) &&
- // новое введенное значение пустое
- (t.getNewValue().toString().isEmpty()) ){
- // запрос на создание пустого рядка
- String messegeNewRow = Query.gueryAddRow( cbAllTablesOfDataBase.getValue().toString() );
- // текст осоздании рядка
- ModalWorkTable.labelTest.setText(messegeNewRow);
- // refresh
- toDo();
- }
- }
- });
- }
- }
- }
- package login;
- import javafx.beans.property.SimpleStringProperty;
- import javafx.beans.value.ObservableValue;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.TableColumn.CellDataFeatures;
- import javafx.scene.control.TableView;
- import javafx.scene.control.cell.TextFieldTableCell;
- import javafx.util.Callback;
- import java.sql.*;
- import java.util.ArrayList;
- /**
- * Created by Admin on 02.12.2016.
- */
- public class Query {
- // поля для подключения
- private static Statement stmt;
- private static ResultSet rs;
- private static Connection con;
- private static TableColumn col;
- public static TableColumn getCol(){
- return col;
- }
- // список столбцов
- static ArrayList<TableColumn> arrayListTableColumn = new ArrayList<>();
- public static ArrayList<TableColumn> getArrayListTableColumn(){
- return arrayListTableColumn;
- }
- public void setCon(Connection con){
- Query.con = con;
- }
- // запрос получения имени текущей базы в MySqL
- public String nameBaseMySqL(){
- return nameBaseQuary("SELECT DATABASE()");
- }
- // запрос получения имени текущей базы в PostgreSqL
- public String nameBasePostgreSqL(){
- return nameBaseQuary("SELECT current_database()");
- }
- //создаем Array с именами таблиц для PostgreSql
- public ArrayList<String> namesTablesInBaseArrayForPostgreSql(){
- // получение списка таблиц
- return forAllArrayListQuary("Select table_name FROM information_schema.tables WHERE table_schema = 'public'");
- }
- //создаем Array с именами таблиц для SQLite
- public ArrayList<String> namesTablesInBaseArrayForSQLite(){
- // получение списка таблиц
- return forAllArrayListQuary("select * from sqlite_sequence");
- // return forAllArrayListQuary("select name from sqlite_master where type='table'");
- }
- //создаем Array с именами таблиц для MySql
- public ArrayList<String> namesTablesInBaseArray(String nameBase){
- // запрос в базу
- return forAllArrayListQuary("SHOW TABLES from " + nameBase);
- }
- // узнаем к-во таблиц в базе
- int countTablesInDataBase(String nameBase){
- return amountOfElements("SELECT count(*) FROM information_schema.tables where table_schema="+"'"+nameBase+"'");
- }
- // узнаем количество таблиц в базе PostgreSql
- // int countTablesInDataBasePostgreSql(){
- // return amountOfElements("SELECT count(*) FROM pg_database where datistemplate = false;");
- // }
- // 2-й вариант, узнаем количество таблиц в базе PostgreSql
- int countTablesInDataBasePostgreSql(){
- return namesTablesInBaseArrayForPostgreSql().size();
- }
- // получение к-ва таблиц в текущей базе
- int countTablesInDataBaseSQLite(){
- return amountOfElements("select count(*) from sqlite_master where type='table'");
- }
- // метод для возврата Имени базы с
- private String nameBaseQuary(String query){
- String resultQuery = "";
- try{
- stmt = con.createStatement();
- rs = stmt.executeQuery(query);
- while (rs.next()){
- resultQuery = rs.getString(1);
- }
- }
- catch (SQLException e){
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если непустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return resultQuery;
- }
- // метод для возврата ArrayList-ов с именами Баз, Таблиц
- private ArrayList<String> forAllArrayListQuary(String query){
- ArrayList<String> list = new ArrayList<>();
- try{
- stmt = con.createStatement();
- rs = stmt.executeQuery(query);
- while (rs.next()){
- list.add( rs.getString(1) );
- }
- }
- catch (SQLException e){
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если непустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return list;
- }
- //подсчитует и возвращает к-тво Таблиц
- private int amountOfElements(String query){
- int count = 0;
- try{
- stmt = con.createStatement();
- rs = stmt.executeQuery(query);
- while (rs.next())
- count = rs.getInt(1);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если не пустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return count;
- }
- //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно///////////////
- //Tableview and data
- static ObservableList<ObservableList> data = FXCollections.observableArrayList();
- //////////// тестовая колонка// // заголовок//
- // static TableColumn colTest = new TableColumn("edit Column");
- ///////////////////////////////////////////
- //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно//////
- public static TableView buildData(TableView tableView, String tableNameQuary){
- // очищаем arrayListTableColumn (он нужен для редактирования)
- Query.arrayListTableColumn.clear();
- try{
- stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT * from " + tableNameQuary);
- //создаем колонки таблицы
- for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
- final int j = i;
- col = new TableColumn(rs.getMetaData().getColumnName(i+1));
- col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
- public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
- return new SimpleStringProperty(param.getValue().get(j).toString());
- }
- });
- tableView.getColumns().addAll(col);
- // добавление всех Колонок таблицы TableColumn в список для передачи в ModalWorkTable
- arrayListTableColumn.add(col);
- }
- // добавление колонки colTest на край таблицы
- // tableView.getColumns().addAll(colTest);
- // добавление колонки colTest в arrayListTableColumn
- // arrayListTableColumn.add(colTest);
- // empty row для новой строки
- ObservableList<String> rowTest = FXCollections.observableArrayList();
- // проходим по колонкам Columns и строкам Rows
- // для создания ObservableList
- while(rs.next()){
- //Iterate Row
- ObservableList<String> row = FXCollections.observableArrayList();
- for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
- //итерация колонок
- row.add(rs.getString(i));
- // создание новой строки для редактирования
- rowTest.add(new String());
- }
- //System.out.println("Row [1] added "+row );
- data.add(row);
- }
- // добавление новой строки для редактирования в ObservableList "data"
- data.add(rowTest);
- // создаем таблицу с колонками и строками
- tableView.setItems(data);
- // делаем колонки редактируемыми
- Query.todoEditebleColumns();
- }catch(Exception e){
- e.printStackTrace();
- // System.out.println("Error on Building Data");
- }
- finally {
- //закрываем подключение если не пустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return tableView;
- }
- // изменяем значения в таблице MySqL
- public static void editTableMySqL(String tableName, String columnName, int rowNumID , String nameID ,String valueNew ){
- Query.gueryEditTable("UPDATE " + tableName + " SET " + columnName + " ='"+valueNew+"'" +
- " WHERE " + nameID + " ="+"'"+rowNumID+"'");
- }
- // изменяем значения в таблице PostgreSqL, SQLite
- public static void editTablePostgreSqL(String tableName, String columnName, int rowNumID , String nameID ,String valueNew ){
- Query.gueryEditTable("UPDATE " + tableName + " SET " + "\"" +columnName+ "\"" + " ='"+valueNew+"'" +
- " WHERE " + nameID + " ="+"'"+rowNumID+"'");
- }
- // удаление выбраной таблицы
- public static String delTable(String tableName){
- Query.gueryEditTable("DROP TABLE " + tableName);
- return "Table: " + tableName +" Deleted";
- }
- ///////// удаление выбраной строки//////////
- public static String delRow(String tableName ){
- // номер id рядка нужен перед удалением(после удвления "numberIdRow" помещаем
- // с номер auto_increment ) имя id колонки выбраной таблицы
- String numberIdRow = Query.nameLastInIdColl(tableName, Query.nameIdColl(tableName));
- // если номер id больше 1, тогда можно удалить рядок из базы
- if ( Integer.valueOf(numberIdRow) > 1 ){
- // индекс больше 1-ы (оставляем минимум 1 рядок, не удаляем первый рядок)
- if (Integer.valueOf(numberIdRow)> 1){
- //имя id колонки имя id колонки выбраной таблицы номер id рядка
- Query.gueryEditTable("DELETE FROM " + tableName + " WHERE "+Query.nameIdColl(tableName)+"= "+ numberIdRow );
- // рабочий auto_increment для Mysql
- if (ModalWorkTable.getNameSql().contains("MySqL") ){
- // устанавливаем auto_increment на номер удаленного рядка // номер id рядка
- Query.gueryEditTable("ALTER TABLE " + tableName + " auto_increment= "+ numberIdRow );
- } // рабочий auto_increment для PostgreSqL
- else if (ModalWorkTable.getNameSql().contains("PostgreSqL")){
- // устанавливаем auto_increment на номер удаленного рядка имя id-колонки // номер id рядка
- Query.gueryEditTable("ALTER SEQUENCE " + tableName+"_"+ Query.nameIdColl(tableName)+"_seq RESTART WITH " +numberIdRow );
- } // установка auto_increment-а на место удаленного рядка(в SQLite работает автоматом, не нужно указываль рядок id)
- else if (ModalWorkTable.getNameSql().contains("SQLite")){
- // номер последнего номера id-рядка // имя таблицы
- Query.gueryEditTable("UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='"+tableName+"'");
- }
- }
- }
- //имя таблицы и номер id-рядка
- return "row "+numberIdRow+" was removed";
- }
- // создание новой таблицы
- public static String createTable(String nameTable, String query){
- // если база MySqL тогда создается таблица
- if (ModalWorkTable.getNameSql().contains("MySqL")){
- // запрос на создание таблицы
- Query.gueryEditTable("CREATE TABLE " +nameTable+"("+"id int(11) NOT NULL PRIMARY KEY auto_increment,"+
- query+");");
- // создание пустой строки(Row) для редактирования
- Query.gueryAddRow(nameTable);
- }
- // если база PostgreSqL тогда создается таблица
- if (ModalWorkTable.getNameSql().contains("PostgreSqL")){
- // запрос на создание таблицы
- Query.gueryEditTable("CREATE TABLE " +nameTable+" (id SERIAL PRIMARY KEY, "+
- query+");");
- // создание пустой строки(Row) для редактирования
- Query.gueryAddRow(nameTable);
- }
- // если база SQLite тогда создается таблица
- if (ModalWorkTable.getNameSql().contains("SQLite")){
- // запрос на создание таблицы
- Query.gueryEditTable("CREATE TABLE " + nameTable + " (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "+
- query+");");
- // создание пустой строки(Row) для редактирования
- Query.gueryAddRow(nameTable);
- }
- return "Success, table "+nameTable+" created";
- }
- // изменяем значения в таблице SQL
- private static void gueryEditTable(String query ){
- try{
- stmt = con.createStatement();
- // SQL-запрос на изменения значения ячейки таблицы
- stmt.executeUpdate(query);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если не пустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- }
- // возврат последнего номера в колонке ID
- private static String nameLastInIdColl(String tableName, String idName){
- String resultQuery = "";
- int tempNum = 0;
- try{
- stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT "+idName+" FROM " + tableName);
- while (rs.next()){
- // находим найбольшее значение в списке и присваиваем его переменной "resultQuery"
- if (tempNum < Integer.valueOf(rs.getString(1)) ){
- resultQuery = rs.getString(1);
- tempNum = Integer.valueOf(rs.getString(1));
- }
- }
- }
- catch (SQLException e){
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если непустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return resultQuery;
- }
- //имя колонки id
- private static String nameIdColl(String tableName){
- String nameCollId = "";
- try{
- stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
- nameCollId = String.valueOf(rs.getMetaData().getColumnName(1));
- }
- catch (SQLException e){
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если непустое
- try {
- if (stmt != null)
- stmt.close();
- }catch (SQLException se){}
- try {
- if (rs != null)
- rs.close();
- }catch (SQLException se){}
- }
- return nameCollId;
- }
- // добавление нового пустого рядка вконце таблицы и заполнение нулевыми значениями
- public static String gueryAddRow(String tableName ){
- String lastIdValue = "";
- try{
- stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
- // получения List-а с типами колонок (0-й элемент в List-е, это тип для первой колонки)
- ArrayList<String> typeColumns = Query.queryGetTypesColumes(tableName);
- // получение имени последнего значениея в колонке ID // имя колонки ID
- // lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
- // создания пустого рядка для MySqL
- if(ModalWorkTable.getNameSql().contains("MySqL")){
- //(для создания новой строки определяем тип новой колонки) если первая колонка типа VARCHAR или TEXT тогда ставим для колоки значение NULL
- if ( typeColumns.get(0).trim().toUpperCase().contains("VARCHAR") || typeColumns.get(0).trim().toUpperCase().contains("TEXT") ){
- // создание пустой строки в SQl базе
- Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2).toUpperCase()+")" + "VALUES" + "('NULL')");
- }// если первая колонка типа INT тогда ставим для колоки значение 0
- else if ( typeColumns.get(0).trim().toUpperCase().contains("INT") ){
- // создание пустой строки в SQl базе
- Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2)+")" + "VALUES" + "('0')");
- }
- // получение имени последнего значениея в колонке ID // имя колонки ID
- lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
- ///////////////// заполнение пустой строки с listValuesRows(значения для ячеек Row)
- for (int i = 0, g = 0; i < rs.getMetaData().getColumnCount()-1; i++) {
- g = i + 2;
- // если колонка типа "INT" заполняем ее значение "0"-м
- if (typeColumns.get(i).trim().toUpperCase().contains("INT")){
- // колонки таблицы // значение для ячейки row
- Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " ='0'" +
- // имя id-колонки //значение последнего номера id
- " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
- // если колонка типа "VARCHAR" заполняем ее значение " "
- }else if (typeColumns.get(i).trim().toUpperCase().contains("VARCHAR") ) {
- // колонки таблицы //пустое '' значение для ячейки row
- Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " =''" +
- // имя id-колонки //значение последнего номера id
- " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
- }
- }
- // создания пустого рядка для PostgreSqL, SQLite
- }else if (ModalWorkTable.getNameSql().contains("PostgreSqL") || ModalWorkTable.getNameSql().contains("SQLite")){
- // если первая колонка содержит CHAR, TEXT и id колонка не содержит последнего номера(пуста) - создается пустая колонка(пустая строка)
- if ( typeColumns.get(0).trim().toUpperCase().contains("CHAR") || typeColumns.get(0).trim().toUpperCase().contains("TEXT") /* && lastIdValue.isEmpty() */){
- // создание пустой строки внизу непустой таблицы PostGreSQl
- Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim()+"\""+")" + " VALUES " + "('NULL')");
- // запрос по созданию пустой строки в пустой таблице PostGreSQl
- // Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2).trim().toUpperCase()+")" + "VALUES" + "('NULL')");
- // если первая колонка содержит INT - создается пустая колонка(пустая строка)
- }else if (typeColumns.get(0).trim().toUpperCase().contains("INT") ){
- // создание пустой строки внизу непустой таблицы PostGreSQl
- Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim()+"\""+")" + " VALUES " + "('0')");
- }
- //else if (typeColumns.get(0).trim().toUpperCase().contains("CHAR") && !(lastIdValue.isEmpty()) ){
- // создание пустой строки внизу непустой таблицы PostGreSQl
- // Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim().toUpperCase()+"\""+")" + " VALUES " + "('NULL')");
- // }
- // получение имени последнего значениея в колонке ID // имя колонки ID
- lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
- ///////////////// заполнение пустой строки с listValuesRows(значения для ячеек Row)
- for (int i = 0, g = 0; i < rs.getMetaData().getColumnCount()-1; i++) {
- g = i + 2;
- // если колонка типа "INT" заполняем ее значение "0"-м
- if (typeColumns.get(i).trim().toUpperCase().contains("INT")){
- // колонки таблицы // значение для ячейки row, Имя колонки
- Query.gueryEditTable("UPDATE " + tableName + " SET " + "\"" +rs.getMetaData().getColumnName(g)+ "\"" + " ='0'" +
- // имя id-колонки //значение последнего номера id
- " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
- // если колонка типа "CHAR" заполняем ее значение " " для postgreSql тип CHAR
- }else if ( typeColumns.get(i).trim().toUpperCase().contains("CHAR") || typeColumns.get(i).trim().toUpperCase().contains("TEXT")) {
- // колонки таблицы имя колонки //пустое '' значение для ячейки row
- Query.gueryEditTable("UPDATE " + tableName + " SET " +"\"" +rs.getMetaData().getColumnName(g) +"\"" + " =' '" +
- // имя id-колонки //значение последнего номера id
- " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
- }
- }
- lastIdValue = "";
- }
- // заполнение пустой строки с listValuesRows(значения для ячеек Row)
- /* for (int i = 0, g = 0; i < listValuesRows.size(); i++){
- g = i + 2;
- // колонки таблицы // значение для ячейки row
- Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " ='"+listValuesRows.get(i)+"'" +
- // имя id-колонки //значение последнего номера id
- " WHERE " + rs.getMetaData().getColumnName(1) + " ="+"'"+lastIdValue+"'");
- }
- */
- // к-во строк в колонке
- // rs.getMetaData().getColumnName(1).length();
- // количество столбцов
- // rs.getMetaData().getColumnCount();
- // имя колонки по индексу
- // count = rs.getMetaData().getCatalogName(1);
- // int rowIndex = 0;
- // count = rs.getMetaData().getColumnName(1);
- // SQL-запрос на изменения значения ячейки таблицы
- // stmt.executeUpdate(query);
- // тип колонки
- // lastIdValue = rs.getMetaData().getColumnTypeName(1);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если не пустое
- try {
- if (stmt != null){
- stmt.close();
- }
- }catch (SQLException se){}
- try {
- if ( (rs != null )){
- rs.close();
- }
- }catch (SQLException se){}
- }
- return "row "+lastIdValue+" added";
- }
- //делаем все столбцы таблицы редактируемыми
- private static void todoEditebleColumns(){
- for (int i = 1; i < arrayListTableColumn.size(); i++){
- Query.arrayListTableColumn.get(i).setCellFactory(TextFieldTableCell.forTableColumn());
- }
- }
- // создание arraylist-a с типамы колонок переданной таблицы
- public static ArrayList<String> queryGetTypesColumes(String tableName){
- ArrayList<String> arrayListTypes = new ArrayList<String>();
- try{
- stmt = con.createStatement();
- ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
- // начиная со второй колонки
- for (int i = 2; i <= rs.getMetaData().getColumnCount(); i++){
- //int g = i - 1;
- arrayListTypes.add(rs.getMetaData().getColumnTypeName(i));
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- finally {
- //закрываем подключение если не пустое
- try {
- if (stmt != null){
- stmt.close();
- }
- }catch (SQLException se){}
- try {
- if ( (rs != null )){
- rs.close();
- }
- }catch (SQLException se){}
- }
- return arrayListTypes;
- }
- }
- package login;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.event.ActionEvent;
- import javafx.event.EventHandler;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.*;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.cell.ComboBoxTableCell;
- import javafx.scene.control.cell.TextFieldTableCell;
- import javafx.scene.image.Image;
- import javafx.scene.image.ImageView;
- import javafx.scene.layout.HBox;
- import javafx.scene.layout.VBox;
- import javafx.stage.Modality;
- import javafx.stage.Stage;
- import java.util.ArrayList;
- /**
- * Created by Admin on 27.12.2016.
- */
- //
- public class CreateTable {
- // переменная для определеня значка базы в окне класа CreateTable
- private static String nameSql = "";
- //массив заставок для планшета
- private static ArrayList<Image> arrayListImage = new ArrayList<Image>();
- // счетчик для смены обоев в планшете
- // 0-я обоина установлена при запуске, по этому счетчик с 1
- private static int count = 1;
- // таблица
- private static TableView tableView = new TableView();
- // к-тво столбцов в таблице(находится в планшете)
- private static TextField tfCountColuns = new TextField();
- // поле для имени таблицы(находится в планшете)
- private static TextField tfNameTable = new TextField();
- // Label-ы в планшете
- private static Label labelTitleDisplay = new Label("Creating new table");
- private static Label labelInfo = new Label("Text Info");
- private static Button btnOk = new Button();
- // Button btnCancel = new Button();
- private static Button btnRefresh = new Button();
- // Button btnOther = new Button();
- private static Button btnAdd = new Button();
- // колонка с TextField
- private static TableColumn colFieldTf = new TableColumn("Field");
- // колонка с ComboBox
- private static TableColumn colTypeCb = new TableColumn("Type");
- // колонка с TextField
- private static TableColumn colLengthValuesTf = new TableColumn("Length/Values");
- // список из 3-х колонок
- private static ArrayList<TableColumn> columnArrayList = new ArrayList<>();
- // список для колонки colFieldTf
- private static ArrayList<Object> listForColFieldTf = new ArrayList<>();
- // список для колонки colTypeCb
- private static ArrayList<Object> listForColTypeCb = new ArrayList<>();
- // список для колонки colLengthValuesTf
- private static ArrayList<Object> listForColLengthValuesTf = new ArrayList<>();
- // создание новой таблицы
- public static void createNewTbl(){
- // размер(Height) таблицы
- tableView.setMaxHeight(300);
- // создание кнопок с изображением
- Image imageIconOk = new Image("login/CuteBallGo.png");
- // Image imageIconCancel = new Image("login/CuteBallStop.png");
- Image imageIconRefresh = new Image("login/CuteBallReboot.png");
- // Image imageIconOther = new Image("login/CuteBallGames.png");
- Image imageAdd = new Image("login/add.png");
- // силь для Label,Button
- styleLabelButton();
- // добавление иконки в кнопку
- btnOk.graphicProperty().setValue(new ImageView(imageIconOk));
- // btnCancel.graphicProperty().setValue(new ImageView(imageIconCancel));
- btnRefresh.graphicProperty().setValue(new ImageView(imageIconRefresh));
- // btnOther.graphicProperty().setValue(new ImageView(imageIconOther));
- btnAdd.graphicProperty().setValue(new ImageView(imageAdd));
- // инициализируем переменную именем текущей базы
- CreateTable.nameSql = ModalWorkTable.getNameSql();
- Stage stage = new Stage();
- // создаем модальное окно
- stage.initModality(Modality.APPLICATION_MODAL);
- VBox vBoxSqlIcon = new VBox();
- // VBox для tableView
- VBox tableBox = new VBox();
- // для картинки планшета
- VBox vBoxDisplay = new VBox();
- // для фоновых картинок планшета
- VBox vBoxFontDisplay = new VBox();
- // точка с которой начинает отображаться TableView
- tableBox.setLayoutX(210);
- tableBox.setLayoutY(45);
- // VBox для размищения таблицы
- tableBox.getChildren().add(tableView);
- // размещение Lable-а с текстом "Creating tables:" в дисплее планшета
- VBox vBoxTitleDisplayLb = new VBox();
- // VBox для LabelInfo
- VBox vBoxLabelInfo = new VBox();
- vBoxTitleDisplayLb.getChildren().add(labelTitleDisplay);
- vBoxTitleDisplayLb.setLayoutX(300);
- vBoxTitleDisplayLb.setLayoutY(390);
- // labelInfo внутри планшета
- vBoxLabelInfo.getChildren().add(labelInfo);
- vBoxLabelInfo.setLayoutX(270);
- vBoxLabelInfo.setLayoutY(460);
- // подсказка в TextField
- tfNameTable.setPromptText("Enter table name");
- // длина TextField
- tfNameTable.setMaxWidth(105);
- // подсказка в TextField
- tfCountColuns.setPromptText("number of columns");
- // длина TextField
- tfCountColuns.setMaxWidth(120);
- // Label, TextField внутри планшета
- HBox hBoxValInDisplay = new HBox();
- hBoxValInDisplay.setSpacing(5);
- // hBoxValInDisplay размещени TextFiel и Label на дисплее планшета
- hBoxValInDisplay.getChildren().addAll(tfNameTable, tfCountColuns);
- // позиционирование textField-в в экране планшета
- hBoxValInDisplay.setLayoutX(263);
- hBoxValInDisplay.setLayoutY(420);
- VBox vBoxbtnOk = new VBox();
- //пробел между елементами
- vBoxbtnOk.getChildren().addAll(btnOk);
- VBox vBoxbtnRefresh = new VBox();
- vBoxbtnRefresh.getChildren().add(btnRefresh);
- // добавление кнопки в VBox
- VBox vBoxAdd = new VBox();
- vBoxAdd.getChildren().add(btnAdd);
- // проверка для вывода значка базы в hBox
- if (nameSql.equals("MySqL") ){
- vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("MySqL"));
- }
- else if (nameSql.equals("PostgreSqL")){
- vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("PostgreSqL") );
- }
- else if (nameSql.equals("SQLite")){
- vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("SQLite"));
- }
- // размещение значка SQL в VBox на scene
- vBoxSqlIcon.setLayoutX(683);
- vBoxSqlIcon.setLayoutY(407);
- // розмищение кнопки Add для добавления колонок в SQL на scene
- vBoxAdd.setLayoutX(600);
- vBoxAdd.setLayoutY(370);
- // размещение дисплея на scene
- vBoxDisplay.setLayoutX(170);
- vBoxDisplay.setLayoutY(370);
- //размищение кнопок на scene
- vBoxbtnOk.setLayoutX(280);
- vBoxbtnOk.setLayoutY(500);
- vBoxbtnRefresh.setLayoutX(435);
- vBoxbtnRefresh.setLayoutY(500);
- //размещение фона в дисплее
- vBoxFontDisplay.setLayoutX(253);
- vBoxFontDisplay.setLayoutY(390);
- Group root = new Group();
- stage.setTitle("Создание таблицы");
- // задный фон
- Image image = new Image("login/look8.png");
- ImageView backgroundImage = new ImageView(image);
- //картинка дисплея(планшета)
- Image imageDisplay = new Image("login/display.png");
- vBoxDisplay.getChildren().add(new ImageView(imageDisplay));
- //массив заставок для планшета
- arrayListImage.addAll( FXCollections.observableArrayList(new Image("login/fontDisplay8.png"), new Image("login/fontDisplay2.png"),
- new Image("login/fontDisplay3.png"), new Image("login/fontDisplay4.png"),
- new Image("login/fontDisplay5.png"), new Image("login/fontDisplay6.png"),
- new Image("login/fontDisplay7.png"), new Image("login/fontDisplay1.png")));
- // заставка на планшет
- vBoxFontDisplay.getChildren().add(new ImageView(arrayListImage.get(0)));
- // обновление фона планшета по нажатию кнопки
- btnRefresh.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // очищаем vBoxFontDisplay от значенией
- vBoxFontDisplay.getChildren().clear(); // номер обоины в arrayList
- vBoxFontDisplay.getChildren().add( new ImageView(arrayListImage.get(count)) );
- // если счетчик ровняется длине массива-1(с обоинами для планшета) тогда обнуляем счетчик
- if ( count == (arrayListImage.size()-1) )
- count = 0;
- else// иначе инкремент
- count++;
- }
- });
- // кнопка для приема значений с TextField-в планшета
- btnOk.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- //проверка TextFieldes в планшете
- if (checkTfInDispaly())
- createTableView();
- }
- });
- // кнопка по созданию таблицы
- btnAdd.setOnAction(new EventHandler<ActionEvent>() {
- @Override
- public void handle(ActionEvent event) {
- // запрос на добавление таблицы в SQL, имя таблицы, созданный запрос
- labelInfo.setText(Query.createTable(tfNameTable.getText(), createLineQuery()));
- // очистка List-ов колонок от значенией
- listForColFieldTf.clear();
- listForColTypeCb.clear();
- listForColLengthValuesTf.clear();
- // активные btnOk и tfNameTable, tfCountColuns
- onOffTextFieldButton(false);
- // обновление списка таблиц в ComboBox cbAllTablesOfDataBase
- // после создания новой таблицы
- ModalWorkTable.addValuesNameTablesInComboBox();
- // ArrayList<String> testList = new ArrayList<String>();
- // testList = Query.queryGetTypesColumes("tbl1");
- // labelInfo.setText("SIZEarr".concat(String.valueOf(testList.size()) )+ " : " + testList.get(0).concat(testList.get(1)).concat(testList.get(2)) );
- }
- });
- // добавление всех Box-в в Group
- root.getChildren().addAll(backgroundImage, vBoxSqlIcon, vBoxAdd ,tableBox, vBoxDisplay,
- vBoxFontDisplay, hBoxValInDisplay, vBoxbtnOk, vBoxbtnRefresh, vBoxTitleDisplayLb, vBoxLabelInfo);
- // шырина высота
- Scene scene = new Scene(root, 762, 570);
- stage.setScene(scene);
- // отключем кнопку маximyze и фиксируем окно
- stage.setResizable(false);
- // стиль который не работает :(
- // CreateTable.class.getResource("/login/WorkTable.css").toExternalForm();
- stage.show();
- }
- // стили для Label и Button
- private static void styleLabelButton(){
- btnOk.setStyle(
- "-fx-background-radius: 5em; " +
- "-fx-min-width: 40px; " +
- "-fx-min-height: 40px; " +
- "-fx-max-width: 40px; " +
- "-fx-max-height: 40px;"
- );
- btnAdd.setStyle(
- "-fx-background-radius: 5em; " +
- "-fx-min-width: 75px; " +
- "-fx-min-height: 75px; " +
- "-fx-max-width: 75px; " +
- "-fx-max-height: 75px;"
- );
- btnRefresh.setStyle(
- "-fx-background-radius: 5em; " +
- "-fx-min-width: 40px; " +
- "-fx-min-height: 40px; " +
- "-fx-max-width: 40px; " +
- "-fx-max-height: 40px;"
- );
- //стиль labelTitleDisplay
- labelTitleDisplay.setStyle("-fx-font-size: 18px;"+
- "-fx-fill: FIREBRICK;"+
- "-fx-font-weight: bold;"+
- "-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );" );
- //стиль labelInfo
- labelInfo.setStyle("-fx-font-size: 16px;"+
- "-fx-fill: #847de7;"+
- "-fx-font-weight: bold;"+
- "-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );" );
- }
- // создание запроса для SQl базы из колонок (Имя колонки, тип колонки(INT, VARCHAR, TEXT), длина значений в колонке)
- // считка данных с List-ов колонок для создания запроса в SQL-базу
- private static String createLineQuery(){
- String query="";
- // если выбрана Mysql типы (INT, VARCHAR, TEXT)
- if (ModalWorkTable.getNameSql().contains("MySqL")){
- /////////////// работает для VARCHAR и INT(Mysql)
- // проверка не пустые ли ArrayList-ы,длина массивов совпадает ,создание запроса для создания таблицы
- if ((listForColFieldTf.size() > 0 && listForColTypeCb.size() > 0 && listForColLengthValuesTf.size() > 0) &&
- listForColFieldTf.size() == listForColTypeCb.size() &&
- listForColTypeCb.size() == listForColLengthValuesTf.size()){
- // создание запроса для SQL на создание таблицы
- for (int i = 0; i < listForColFieldTf.size(); i++){
- // получение значений с 2-х List-ов(listForColFieldTf, listForColTypeCb)
- // если в listForColTypeCb(типы колонок) есть значения "TEXT", "INT", тогда формаруется запрос без указания длины для типа("TEXT", "INT")
- if (listForColTypeCb.get(i).equals("TEXT") ){
- // если не последняя строка тогда ставится запятая вконце строки
- if (i != listForColFieldTf.size()-1)
- // list с именами колонок, list с именами типов колонок
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+",";
- else// если последняя итерация тогда не ставим "," вконце
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"";
- // получение значений с 3-х List-ов(listForColFieldTf, listForColTypeCb, listForColLengthValuesTf)
- }else {
- // если не последняя строка тогда ставится запятая вконце строки
- if (i != listForColFieldTf.size()-1)
- // list с именами колонок, list с именами типов колонок, list размерами(числа) колонок
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+"),";
- else// если последняя итерация тогда не ставим "," вконце
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+")";
- }
- }
- }
- }// если выбрана PostgreSqL типы (INT, VARCHAR, TEXT)
- else if ( ModalWorkTable.getNameSql().contains("PostgreSqL") || ModalWorkTable.getNameSql().contains("SQLite") ){
- /////////////// работает для VARCHAR и (INT без длины)(PostgreSqL)
- // проверка не пустые ли ArrayList-ы,длина массивов совпадает ,создание запроса для создания таблицы
- if ((listForColFieldTf.size() > 0 && listForColTypeCb.size() > 0 && listForColLengthValuesTf.size() > 0) &&
- listForColFieldTf.size() == listForColTypeCb.size() &&
- listForColTypeCb.size() == listForColLengthValuesTf.size()){
- // создание запроса для SQL на создание таблицы
- for (int i = 0; i < listForColFieldTf.size(); i++){
- // если в listForColTypeCb(типы колонок) есть значения "TEXT", "INT", тогда формаруется запрос без указания длины для типа("TEXT", "INT")
- if (listForColTypeCb.get(i).equals("TEXT") || listForColTypeCb.get(i).equals("INT") ){
- // если не последняя строка тогда ставится запятая вконце строки, запрос без указания длины для типа("TEXT", "INT")
- if (i != listForColFieldTf.size()-1)
- // list с именами колонок, list с именами типов колонок
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+",";
- else// если последняя итерация тогда не ставим "," вконце
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"";
- }else {
- // если не последняя строка тогда ставится запятая вконце строки
- if (i != listForColFieldTf.size()-1)
- // list с именами колонок, list с именами типов колонок, list размерами(числа) колонок
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+"),";
- else// если последняя итерация тогда не ставим "," вконце
- query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+")";
- }
- }
- }
- }
- return query;
- }
- // активные - неактивные btnOk и tfNameTable, tfCountColuns
- private static void onOffTextFieldButton(Boolean flag){
- // активные - неактивные button
- btnOk.setDisable(flag);
- // активные - неактивные TextField-ы
- tfNameTable.setDisable(flag);
- tfCountColuns.setDisable(flag);
- }
- // проверка TextFieldes в планшете
- private static boolean checkTfInDispaly(){
- // флаг для роверки заполненых полей TextField
- boolean flag = false;
- if (tfNameTable.getText().isEmpty() && tfCountColuns.getText().isEmpty()){
- labelInfo.setText("Enter name and value table");
- // края TextField красные красные
- colorTextFields(false, false);
- }
- else if (tfNameTable.getText().isEmpty()){
- labelInfo.setText("Enter name of table");
- // края TextField красные зеленые
- colorTextFields(false, true);
- }
- else if (tfCountColuns.getText().isEmpty()){
- labelInfo.setText("Enter count of table");
- // края TextField зеленые красные
- colorTextFields(true, false);
- }else {
- labelInfo.setText("Values accepted");
- // края TextField зеленые
- colorTextFields(true, true);
- flag = true;
- // неактивные btnOk и tfNameTable, tfCountColuns
- onOffTextFieldButton(flag);
- //видимая таблица
- tableView.setVisible(true);
- }
- return flag;
- }
- // смена цвета border вокруг textField
- private static void colorTextFields(boolean tfName, boolean tfCount){
- // края TextField красные красные
- if (tfName == false && tfCount == false){
- // шырина линиивокруг элемент // округлость по краям
- tfNameTable.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- tfCountColuns.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- }// края TextField красные зеленые
- else if (tfName == false && tfCount == true){
- tfNameTable.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- tfCountColuns.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- }// края TextField зеленые красные
- else if (tfName == true && tfCount == false){
- tfNameTable.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- tfCountColuns.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- }// края TextField зеленые
- else if (tfName == true && tfCount == true){
- tfNameTable.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- tfCountColuns.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
- }
- }
- // заполнение tableView
- private static TableView createTableView(){
- tableView.getSelectionModel().clearSelection();
- tableView.getItems().clear();
- tableView.getColumns().clear();
- columnArrayList.clear();
- // tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
- // таблица доступна для редактирования
- tableView.setEditable(true);
- // empty row для новой строки
- ObservableList<ObservableList> data = FXCollections.observableArrayList();
- //Iterate Row
- ObservableList<ComboBox> row = FXCollections.observableArrayList();
- // значения для ComboBox
- ObservableList<String> valuesInCb = FXCollections.observableArrayList("INT", "VARCHAR", "TEXT");
- // шырина колонки
- colFieldTf.setMinWidth(100);
- colTypeCb.setMinWidth(130);
- colLengthValuesTf.setMinWidth(100);
- // добавление в колонку "colField" TextField-а и доступна для редактирования
- colFieldTf.setCellFactory(TextFieldTableCell.forTableColumn());
- // добавление в колонку ("colField" tableView) значений ObservableList в combobox-ячейку
- colTypeCb.setCellFactory(ComboBoxTableCell.forTableColumn(valuesInCb ));
- // добавление в колонку "colLengthValues" TextField-а и доступна для редактирования
- colLengthValuesTf.setCellFactory(TextFieldTableCell.forTableColumn());
- // заполнение columnArrayList колонками
- columnArrayList.addAll(FXCollections.observableArrayList( colFieldTf, colTypeCb, colLengthValuesTf));
- // добавление колонок для TableView
- // tableView.getColumns().addAll(colFieldTf, colTypeCb , colLengthValuesTf );
- // добавление columnArrayList колонок для TableView
- tableView.getColumns().addAll(columnArrayList);
- // слушатель на все колонки
- for (int i = 0; i < columnArrayList.size(); i++){
- columnArrayList.get(i).setOnEditCommit(new EventHandler<TableColumn.CellEditEvent>() {
- @Override
- public void handle(TableColumn.CellEditEvent event) {
- // выбраный рядок
- int numRow = Integer.valueOf(event.getTablePosition().getRow());
- // заполнение значениями listForColFieldTf первой колонки
- if ( Integer.valueOf(event.getTablePosition().getColumn()) == 0 ){
- // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
- // или размер List-а пустой
- if( (listForColFieldTf.size()-1) < numRow || listForColFieldTf.size() == 0)
- listForColFieldTf.add(numRow, event.getNewValue() );
- //замена значениея в List если размер list-а >= выбранному рядку в taleView,
- // тогда в List-е и размер list-а != 0
- else if ( (listForColFieldTf.size()-1) >= numRow && listForColFieldTf.size() != 0 )
- listForColFieldTf.set(numRow, event.getNewValue() );
- }
- // заполнение значениями listForColTypeCb второй колонки(с Типами данных INT, VARCHAR, TEXT)
- else if ( Integer.valueOf(event.getTablePosition().getColumn()) == 1 ){
- // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
- // или размер List-а пустой
- if( (listForColTypeCb.size()-1) < numRow || listForColTypeCb.size() == 0){
- // если если выбрано во второй колонке "TEXT",
- // добавляется пустое значение в
- // listForColLengthValuesTf(длина значений) для Mysql, PostgreSql // для PostgreSql если если выбрано во второй колонке "INT", добавляется пустое значение " " в listForColLengthValuesTf(длина значений)
- if (event.getNewValue().equals("TEXT") || (event.getNewValue().equals("INT") && ModalWorkTable.getNameSql().contains("PostgreSqL")) ){
- // добавление Типа(TEXT) или (INT) в listForColTypeCb по инрексу текушего рядка "numRow"
- listForColTypeCb.add(numRow, event.getNewValue() );
- // добавление пустого значения "" в listForColLengthValuesTf, так как для "TEXT" или "INT" postgresql не указывается длина
- listForColLengthValuesTf.add(numRow, " ");
- } // добавляется значение в listForColTypeCb введеное в колонку для Mysql и PostgreSql
- else {
- listForColTypeCb.add(numRow, event.getNewValue() );
- }
- }
- //замена значениея в List если размер list-а >= выбранному рядку в taleView,
- // тогда в List-е и размер list-а != 0
- else if ( (listForColTypeCb.size()-1) >= numRow && listForColTypeCb.size() != 0 ){
- listForColTypeCb.set(numRow, event.getNewValue() );
- }
- }
- // заполнение значениями listForColLengthValuesTf третей колонки
- else if ( Integer.valueOf(event.getTablePosition().getColumn()) == 2 ){
- // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
- // или размер List-а пустой
- if( (listForColLengthValuesTf.size()-1) < numRow || listForColLengthValuesTf.size() == 0)
- listForColLengthValuesTf.add(numRow, event.getNewValue() );
- //замена значениея в List если размер list-а >= выбранному рядку в taleView,
- // тогда в List-е и размер list-а != 0
- else if ( (listForColLengthValuesTf.size()-1) >= numRow && listForColLengthValuesTf.size() != 0 )
- listForColLengthValuesTf.set(numRow, event.getNewValue() );
- }
- }
- });
- }
- // добавление новой строки для редактирования в ObservableList "data"
- for (int f = 0; f < Integer.parseInt(tfCountColuns.getText()); f++ ){
- data.add(row);
- }
- // создаем таблицу с колонками и строками
- tableView.setItems(data);
- // tableView.setBlendMode(BlendMode.SOFT_LIGHT);
- // MenuButton с боку tableView
- // tableView.setTableMenuButtonVisible(true);
- return tableView;
- }
- // очистка всех элементов
- public static void clearAll(){
- tableView.getSelectionModel().clearSelection();
- tableView.getItems().clear();
- tableView.getColumns().clear();
- tfCountColuns.clear();
- tfNameTable.clear();
- tfNameTable.setStyle("");
- tfCountColuns.setStyle("");
- labelInfo.setText("");
- labelTitleDisplay.setText("");
- // отключение видимости таблицы
- tableView.setVisible(false);
- // активные Button и TextField
- onOffTextFieldButton(false);
- // очистка columnArrayList списка колонок
- columnArrayList.clear();
- // очистка arrayListImage списка с обоями для планшета
- arrayListImage.clear();
- }
- }
- package login;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- * Created by Admin on 02.12.2016.
- */
- public class ConnectDB {
- private static Connection connection;
- private static boolean flag;
- private String message = "";
- public static Connection getConnection(){
- return connection;
- }
- // set-р нужен чтоб установить null
- public static void setConnection(Connection connection){
- ConnectDB.connection = connection;
- }
- public String getMessage(){
- return message;
- }
- // состояние подключения
- public static boolean getFlag(){ return ConnectDB.flag; }
- // flag устанавливается в false если с Main зашли удачно
- public static void setFlag(boolean flag){
- ConnectDB.flag = flag;
- }
- public void conDB(String URL, String USER, String PASS){
- try {
- if(URL.contains("sqlite")){
- connection = DriverManager.getConnection(URL);
- }
- else {//остальные базы
- connection = DriverManager.getConnection(URL, USER, PASS);
- }
- } catch (SQLException e) {
- ConnectDB.flag = false;
- // e.printStackTrace();
- message = "Connection Failed";
- }
- if (connection != null) {
- message = "Successfully Connected";
- ConnectDB.flag = true;
- } else {
- message = "Connection Failed";
- ConnectDB.flag = false;
- }
- }
- }
- package login;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- /**
- * Created by Admin on 03.12.2016.
- */
- public class Disconnect {
- private String message = "";
- public String getMessage(){
- return message;
- }
- public boolean disconMeth(Connection con){
- //close connection ,stmt and resultset here
- boolean flag = false;
- if (con != null){
- try {con.close(); } catch(SQLException se) { /*can't do anything */ }
- flag = true;
- message = "Disconnected";
- }
- // if (stmt != null){
- // try { stmt.close(); } catch(SQLException se) { /*can't do anything */ }
- // flag = true;
- // }
- // if (rs != null){
- // try { rs.close(); } catch(SQLException se) { /*can't do anything */ }
- // flag = true;
- // }
- return flag;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement