Advertisement
DeveloperSergio

MySqL&&JavaFX&&PostGreSqL Part4

Dec 20th, 2016
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.56 KB | None | 0 0
  1. package login;
  2.  
  3. import javafx.application.Application;
  4. import javafx.collections.FXCollections;
  5. import javafx.collections.ObservableList;
  6. import javafx.event.ActionEvent;
  7. import javafx.event.EventHandler;
  8. import javafx.geometry.Insets;
  9. import javafx.geometry.Pos;
  10. import javafx.scene.Scene;
  11. import javafx.scene.control.*;
  12. import javafx.scene.image.Image;
  13. import javafx.scene.image.ImageView;
  14. import javafx.scene.layout.VBox;
  15. import javafx.stage.Stage;
  16.  
  17. import java.sql.*;
  18.  
  19.  
  20. public class Main extends Application {
  21.  
  22. // поля для подключения
  23. private static Connection con;
  24. private static Statement stmt;
  25. private static ResultSet rs;
  26.  
  27.  
  28. Label labelPicture = new Label();
  29.  
  30. ComboBox<String> cbDataBases;
  31.  
  32. Label labelInfo = new Label();
  33.  
  34. TextField tfUrl = new TextField();
  35. TextField tfUser = new TextField();
  36. PasswordField tfPass = new PasswordField();
  37.  
  38. // поля с настройками подключения к БД
  39. private String URL; // = "jdbc:postgresql://127.0.0.1:5432/testdb2";
  40. // private static final String URL = "jdbc:mysql://localhost:3306/carsfff";
  41. private String USER; // = "postgres";
  42. // private static final String USER = "admin"; // mysql
  43. private String PASS; // = "root";
  44.  
  45. // кнопка вкл/выкл
  46. ToggleButton btnConn = new ToggleButton(" Connect ");
  47.  
  48.  
  49. // Query connectAndQuery = new Query();
  50. // класс подключения к БД
  51. ConnectDB connectDB = new ConnectDB();
  52. // класс отключения от БД
  53. Disconnect disconnect = new Disconnect();
  54.  
  55. Query query = new Query();
  56.  
  57. public static void main(String[] args) {
  58. launch(args);
  59. }
  60.  
  61. public void start(Stage stage){
  62.  
  63. //////////////////////////////////////////////TEST/////////////////////////////////////////////////////////////
  64. // заполняем TextFild и PasswordField для PostgreSql - сервера
  65. // tfUrl.setText("jdbc:postgresql://127.0.0.1:5432/testdb2");
  66. // tfUser.setText("postgres");
  67. // tfPass.setText("root");
  68.  
  69. // заполняем TextFild и PasswordField для Mysql - сервера
  70. tfUrl.setText("jdbc:mysql://localhost:3306/carsfff");
  71. tfUser.setText("admin");
  72. tfPass.setText("root");
  73. ///////////////////////////////////////////////TEST////////////////////////////////////////////////////////////////
  74.  
  75. //считуем значения с TextField и PasswordField
  76. URL = tfUrl.getText();
  77. USER = tfUser.getText();
  78. PASS = tfPass.getText();
  79.  
  80. // инициализация переменных URL, USER, PASS
  81. initUrlUserPass();
  82.  
  83. stage.setTitle("Main menu");
  84.  
  85. // стиль кнопки из css
  86. btnConn.setId("btnConnColor");
  87.  
  88. // прозрачная подсказка в TestField
  89. tfUrl.setPromptText(" Enter URL Database");
  90. tfUser.setPromptText(" Enter username");
  91. tfPass.setPromptText(" Enter password");
  92.  
  93. // задаем размер TestField
  94. tfUrl.setPrefColumnCount(15);
  95. tfUser.setPrefColumnCount(15);
  96. tfPass.setPrefColumnCount(15);
  97.  
  98. // создать список типа Observablelist из элементов
  99. ObservableList<String> basesTypes = FXCollections.observableArrayList("PostgreSqL", "MySqL");
  100.  
  101. // создаем комбинироаный список
  102. cbDataBases = new ComboBox<String>(basesTypes);
  103.  
  104. // корневой узел
  105. VBox root = new VBox();
  106.  
  107. // отступ по краям VBox root
  108. root.setPadding(new Insets(0,0,15,0));
  109.  
  110.  
  111.  
  112.  
  113. VBox vBoxTop = new VBox();
  114.  
  115. // отступы в vBoxTop
  116. vBoxTop.setPadding(new Insets(5,0,5,0));
  117.  
  118. // промежутки между элементами внутри vBoxTop
  119. vBoxTop.setSpacing(10);
  120. vBoxTop.setAlignment(Pos.CENTER);
  121.  
  122.  
  123.  
  124.  
  125. vBoxTop.getChildren().add(cbDataBases);
  126.  
  127. // добавляем imageViev в vBoxTop
  128. vBoxTop.getChildren().add(labelPicture);
  129.  
  130. VBox vBoxCenter = new VBox();
  131.  
  132. // промежутки между элементами внутри vBoxCenter
  133. vBoxCenter.setSpacing(5);
  134. // отступы вокруг vBoxCenter
  135. vBoxCenter.setPadding(new Insets(5, 20, 10, 20));
  136. // выравниваем все елементы по центру внутры vBoxCenter
  137. vBoxCenter.setAlignment(Pos.CENTER);
  138.  
  139. vBoxCenter.getChildren().addAll( tfUrl, tfUser, tfPass);
  140.  
  141. //----------------- ComboBox, Label, переменная для класа ModalWorkTable
  142. // установить значение по умолчанию в ComboBox "cbDataBases"
  143. cbDataBases.setValue("MySqL");
  144. // добавляем в Label картинку
  145. labelPicture.setGraphic( sizeLabelPicture("MySqL") );
  146. //передаем имя базы в ModalWorkTable для вывода значка
  147. ModalWorkTable.setNameSql("MySqL");
  148. //--------------------
  149.  
  150. //обработчик события на кнопку
  151. btnConn.setOnAction(new EventHandler<ActionEvent>() {
  152. @Override
  153. public void handle(ActionEvent ev) {
  154. // повторно считуем данные с TextFiel и PasswordField в переменные
  155. initUrlUserPass();
  156.  
  157. // выбираем базу
  158. if (cbDataBases.getValue().equals("PostgreSqL") &&
  159. !(btnConn.isSelected()) &&
  160. URL.contains("postgresql") ){
  161.  
  162. // отключаемся от базы
  163. disconnect.disconMeth(ConnectDB.getConnection());
  164.  
  165. labelInfo.setText("PostgreSqL " + disconnect.getMessage() );
  166.  
  167. activeInactive(false);
  168.  
  169. }
  170.  
  171. else if (cbDataBases.getValue().equals("MySqL") &&
  172. !(btnConn.isSelected())&&
  173. URL.contains("mysql") ){
  174.  
  175. // отключаемся от базы
  176. disconnect.disconMeth(ConnectDB.getConnection());
  177.  
  178. labelInfo.setText("Mysql " + disconnect.getMessage());
  179.  
  180. // делаем активной Combobox, TextField выводим соответствующий текст и цвет button
  181. // отключаемся от базы
  182. activeInactive(false);
  183. }
  184.  
  185.  
  186. // подключаемся к PostgreSqL
  187. else if ( (cbDataBases.getValue()).equals("PostgreSqL") &&
  188. btnConn.isSelected() && URL.contains("postgresql") ){
  189. // подключаемся к базе
  190. connectDB.conDB(URL, USER, PASS);
  191.  
  192. // флаг подключения
  193. if (ConnectDB.getFlag()){
  194.  
  195. // передаем поток Connection в Query
  196. query.setCon(ConnectDB.getConnection());
  197.  
  198. //вызов второго модального окна
  199. //////////////////////////////////////////////////////////
  200. ModalWorkTable.testTable();
  201.  
  202.  
  203. // сообщение внизу проги об подключении
  204. labelInfo.setText(cbDataBases.getValue()+ " " + connectDB.getMessage() );
  205.  
  206.  
  207. // делаем не активной Combobox, TextField, делаем соответствующий текст и цвет button
  208. // подключаемся к базе
  209. activeInactive(true);
  210.  
  211. }
  212. else{
  213. // кнопку переводим в режим "невыбраной"
  214. btnConn.setSelected(false);
  215. labelInfo.setId("labelInfoDisconColor");
  216. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  217. }
  218. }
  219.  
  220.  
  221. // подключаемся к MySqL
  222. else if ( cbDataBases.getValue().equals("MySqL") &&
  223. btnConn.isSelected() && URL.contains("mysql") ){
  224.  
  225.  
  226. // подключаемся к базе
  227. connectDB.conDB(URL, USER, PASS);
  228.  
  229. // флаг подключения
  230. if (connectDB.getFlag()) {
  231.  
  232. // передаем поток Connection в Query
  233. query.setCon(ConnectDB.getConnection());
  234.  
  235. //вызов второго модального окна
  236. //////////////////////////////////////////////////////////
  237. ModalWorkTable.testTable();
  238.  
  239.  
  240. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  241. // делаем не активной Combobox, TextField выводим соответствующий текст и цвет button
  242. // подключаемся к базе
  243. activeInactive(true);
  244.  
  245.  
  246. }else{
  247. // кнопку переводим в режим "невыбраной"
  248. btnConn.setSelected(false);
  249. labelInfo.setId("labelInfoDisconColor");
  250. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  251. }
  252.  
  253. }
  254.  
  255. //если не подключается
  256. else {
  257. // создаем метку для отключения красный цвет)
  258. labelInfo.setId("labelInfoDisconColor");
  259. labelInfo.setText( "Connection Failed" );
  260. // кнопку переводим в режим "невыбраной"
  261. btnConn.setSelected(false);
  262. }
  263.  
  264.  
  265.  
  266. }
  267. });
  268.  
  269. //слушатель и обработчик событий ComboBox для смени картинки
  270. cbDataBases.setOnAction(new EventHandler<ActionEvent>() {
  271. @Override
  272. public void handle(ActionEvent event) {
  273.  
  274. if (cbDataBases.getValue().contains( "MySqL") ){
  275.  
  276. //выводим значек базы в Main
  277. labelPicture.setGraphic( sizeLabelPicture("MySqL") );
  278. //передаем имя базы в ModalWorkTable для вывода значка
  279. ModalWorkTable.setNameSql("MySqL");
  280. }
  281. else if (cbDataBases.getValue().contains( "PostgreSqL") ){
  282.  
  283. //выводим значек базы в Main
  284. labelPicture.setGraphic( sizeLabelPicture("PostgreSqL") );
  285. //передаем имя базы в ModalWorkTable для вывода значка
  286. ModalWorkTable.setNameSql("PostgreSqL");
  287. }
  288.  
  289.  
  290.  
  291. }
  292. });
  293.  
  294. //сплывающая подсказка ComboBox
  295. cbDataBases.setTooltip( new Tooltip(" Select DataBase ") );
  296.  
  297. VBox vBoxButton= new VBox();
  298.  
  299.  
  300. // отступы вокруг vBoxCenter
  301. vBoxButton.setPadding(new Insets(10, 0, 0, 0));
  302.  
  303. // выравниваем элементы по ценру окна
  304. vBoxButton.setAlignment(Pos.CENTER);
  305.  
  306. vBoxButton.getChildren().add( btnConn);
  307.  
  308. // VBOX для LabelInfo
  309. VBox vBoxLabelInfo = new VBox();
  310. //отступы вокруг vBoxLabelInfo
  311. vBoxLabelInfo.setPadding(new Insets(10, 0, 5, 0));
  312.  
  313. vBoxLabelInfo.getChildren().add(labelInfo);
  314.  
  315. vBoxLabelInfo.setAlignment(Pos.BOTTOM_CENTER);
  316.  
  317. // добавляем VBOX-root
  318. root.getChildren().addAll(vBoxTop,vBoxCenter, vBoxButton, vBoxLabelInfo);
  319.  
  320. // создаем сцену
  321. Scene scene = new Scene(root);
  322.  
  323. // сцена на подмостках
  324. stage.setScene(scene);
  325.  
  326. // отключем кнопку маximyze и фиксируем окно
  327. stage.setResizable(false);
  328.  
  329.  
  330. //по центру
  331. root.setAlignment(Pos.CENTER);
  332.  
  333. // добавляем стиль-css
  334. scene.getStylesheets().add(Main.class.getResource("MainWindow.css").toExternalForm());
  335.  
  336.  
  337. // показуем подмостку и сцену
  338. stage.show();
  339.  
  340. }
  341.  
  342.  
  343. // метод задает размер иконки и отправляет в label
  344. public ImageView sizeLabelPicture(String sqlType){
  345.  
  346. ImageView imageViewPic = new ImageView();
  347. if (sqlType.equals("PostgreSqL")){
  348. Image image = new Image(getClass().getResourceAsStream("postgreSql.png"));
  349.  
  350. imageViewPic.setFitHeight(55);
  351. imageViewPic.setFitWidth(55);
  352. imageViewPic.setImage(image);
  353. }
  354. else if (sqlType.equals("MySqL")){
  355. Image image = new Image(getClass().getResourceAsStream("mysql.png"));
  356. imageViewPic.setFitHeight(55);
  357. imageViewPic.setFitWidth(55);
  358. imageViewPic.setImage(image);
  359. }
  360.  
  361. return imageViewPic;
  362. }
  363.  
  364. // делаем активной/ неактивной Combobox, TextField
  365. public void activeInactive(boolean flag){
  366.  
  367. cbDataBases.setDisable(flag);
  368. tfUrl.setDisable(flag);
  369. tfUser.setDisable(flag);
  370. tfPass.setDisable(flag);
  371. if (flag == true){
  372.  
  373. //надпись кнопки
  374. btnConn.setText("Disconnect");
  375.  
  376. // метка, стиль, цвет кнопки
  377. btnConn.setId("btnDisconColor");
  378.  
  379. // создаем метку для удачного подключения(зеленый цвет)
  380. labelInfo.setId("labelInfoConnColor");
  381. }
  382. else {
  383. btnConn.setText(" Connect ");
  384. // создаем метку для отключения красный цвет)
  385. labelInfo.setId("labelInfoDisconColor");
  386.  
  387. // метка, стиль, цвет кнопки
  388. btnConn.setId("btnConnColor");
  389.  
  390. //передаем в class ConnectDB flag = false, обнуляем переменную Connection;
  391. ConnectDB.setFlag(false);
  392. ConnectDB.setConnection(null);
  393. }
  394. }
  395.  
  396. public void initUrlUserPass(){
  397. //считуем значения с TextField и PasswordField в переменные URL USER PASS
  398. URL = tfUrl.getText();
  399. USER = tfUser.getText();
  400. PASS = tfPass.getText();
  401. }
  402.  
  403.  
  404. }
  405.  
  406. package login;
  407.  
  408. import javafx.collections.FXCollections;
  409. import javafx.collections.ObservableList;
  410. import javafx.event.ActionEvent;
  411. import javafx.event.EventHandler;
  412. import javafx.geometry.Insets;
  413. import javafx.geometry.Pos;
  414. import javafx.scene.Group;
  415. import javafx.scene.Scene;
  416. import javafx.scene.control.*;
  417. import javafx.scene.control.cell.TextFieldTableCell;
  418. import javafx.scene.image.Image;
  419. import javafx.scene.image.ImageView;
  420. import javafx.scene.layout.HBox;
  421. import javafx.scene.layout.VBox;
  422. import javafx.stage.Modality;
  423. import javafx.stage.Stage;
  424. import javafx.scene.control.TableColumn.CellEditEvent;
  425.  
  426.  
  427. /**
  428. * Created by Admin on 07.12.2016.
  429. */
  430. public class ModalWorkTable {
  431. // переменная для определеня значка базы в окне класа ModalWorkTable
  432. private static String nameSql = "";
  433.  
  434. // сетер для нинициализации переменной nameSql
  435. public static void setNameSql(String nameSql){
  436. ModalWorkTable.nameSql = nameSql;
  437. }
  438.  
  439.  
  440. // ComboBox для таблиц определенной базы
  441. static ComboBox<String> cbAllTablesOfDataBase = new ComboBox<>();
  442.  
  443. //список для ComboBox cbAllTablesOfDataBase
  444. static ObservableList<String> baseTablesInBase;
  445.  
  446. // создать список типа Observablelist для заполнения CombBox из имен базы MySqL или PostgreSql
  447. static ObservableList<String> basesTypes;
  448.  
  449. // список баз в ComboBox
  450. //static ComboBox<String> cbAllDataBases;
  451.  
  452. // выводит количество таблиц в определенной Базе
  453. static Label labelTotalTablesInBases = new Label();
  454.  
  455. static Label labelTotalBases = new Label("Name Base");
  456.  
  457. // выводит количество баз
  458. static Label labelBases = new Label();
  459.  
  460. static Label labelTest = new Label("test Label");
  461.  
  462. static TableView tableView = new TableView();
  463.  
  464. static Button btnOk = new Button("Ok");
  465.  
  466.  
  467. static Query query = new Query();
  468.  
  469.  
  470.  
  471. public static void testTable(){
  472.  
  473. // делаем кнопку неактивной
  474. btnOk.setDisable(true);
  475.  
  476. tableView.getSelectionModel().clearSelection();
  477. tableView.getItems().clear();
  478. tableView.getColumns().clear();
  479. cbAllTablesOfDataBase.getSelectionModel().clearSelection();
  480. Query.data.clear();
  481.  
  482.  
  483. // передаем пустую таблицу в Query
  484. // Query.setTableView(tableView);
  485.  
  486. tableView.setMinSize(600, 300);
  487.  
  488. // ModalWorkTable.tableView =(Query.buildData("tbl1") );
  489.  
  490.  
  491. Main main = new Main();
  492.  
  493. Stage stage = new Stage();
  494.  
  495. // указываем stage, что оно модальное
  496. stage.initModality(Modality.APPLICATION_MODAL);
  497.  
  498. // таблица доступна для редактирования
  499. tableView.setEditable(true);
  500.  
  501.  
  502. HBox hBox = new HBox();
  503.  
  504. // VBox для tableView
  505. VBox tableBox = new VBox();
  506.  
  507. // точка с которой начинает отображаться TableView
  508. tableBox.setLayoutX(25);
  509. tableBox.setLayoutY(195);
  510.  
  511. tableBox.getChildren().add(tableView);
  512.  
  513. //отступы вокруг vBoxLabelInfo
  514. hBox.setPadding(new Insets(0, 10, 0, 10));
  515.  
  516. //----------------
  517.  
  518.  
  519. // запрос на количество баз для MySqL
  520. if (nameSql.equals("MySqL")){
  521.  
  522. labelBases.setText( query.nameBaseMySqL() );
  523.  
  524. }// запрос на количество баз для PostgreSql
  525. else if(nameSql.equals("PostgreSqL")){
  526.  
  527. // выводит количество баз PostgreSql в Label
  528. labelBases.setText( query.nameBasePostgreSqL() );
  529.  
  530. }
  531.  
  532.  
  533. labelTotalTablesInBases.setStyle("-fx-font-size: 20px;"+
  534. "-fx-font-family: Arial #67f5f5;" +
  535. "-fx-fill: #fffdf8;" +
  536. "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
  537.  
  538. labelTotalBases.setStyle("-fx-font-size: 15px;"+
  539. "-fx-font-family: Arial #67f5f5;" +
  540. "-fx-fill: #fffdf8;" +
  541. "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
  542.  
  543. labelBases.setStyle("-fx-font-size: 24px;"+
  544. "-fx-font-family: Arial #39f540;" +
  545. "-fx-fill: #fffdf8;" +
  546. "-fx-effect: innershadow( three-pass-box , rgba(57, 245, 64, 0.7) , 6, 0.0 , 0 , 2 );" );
  547.  
  548.  
  549.  
  550. if ( nameSql.equals("MySqL") ){
  551.  
  552. // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
  553. baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArray( labelBases.getText() ));
  554. // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
  555. cbAllTablesOfDataBase.setItems(baseTablesInBase);
  556. // выводим количество таблиц в Базе MySqL
  557. labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBase( labelBases.getText() ));
  558. }
  559. else if ( nameSql.equals("PostgreSqL") ){
  560. // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
  561. baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArrayForPostgreSql() );
  562. // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
  563. cbAllTablesOfDataBase.setItems(baseTablesInBase);
  564. // переопределяем количество таблиц в label базы PostgreSqL
  565. labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBasePostgreSql() );
  566.  
  567. }
  568.  
  569.  
  570.  
  571.  
  572. // слушатель, обработчик собтытия на ComboBox для Button "active/inActive"
  573. cbAllTablesOfDataBase.setOnAction(new EventHandler<ActionEvent>() {
  574. @Override
  575. public void handle(ActionEvent event) {
  576.  
  577.  
  578. // номер елемента в массиве для Combobox
  579. if ( (cbAllTablesOfDataBase.getSelectionModel().getSelectedIndex() >= 0 )) {
  580. btnOk.setDisable(false);
  581. }else {
  582. btnOk.setDisable(true);
  583. }
  584.  
  585. }
  586. });
  587.  
  588.  
  589. // обработчик, слушатель Button
  590. btnOk.setOnAction(new EventHandler<ActionEvent>() {
  591. @Override
  592. public void handle(ActionEvent event) {
  593.  
  594. // очищаем от выбраных элементов в таблице
  595. tableView.getSelectionModel().clearSelection();
  596. // очищаем от елементов в таблице
  597. tableView.getItems().clear();
  598. // очищаем заголовки таблицы
  599. tableView.getColumns().clear();
  600. // передаем пустую/ получаем заполненную таблицу
  601. tableView = Query.buildData( tableView, cbAllTablesOfDataBase.getValue() );
  602. /////////////////////////////////////////////////
  603. // tableView.setEditable(true);
  604.  
  605. //делаем последний столбец доступным для редактирования
  606. // Query.getCol().setCellFactory(TextFieldTableCell.forTableColumn());
  607.  
  608. // делаем все стодбцы доступными для редактирования
  609. for (int i = 0; i < Query.getArrayList().size(); i++) {
  610. Query.getArrayList().get(i).setCellFactory(TextFieldTableCell.forTableColumn());
  611.  
  612. // сушатель с обработчиком на все колонки
  613. Query.getArrayList().get(i).setOnEditCommit(new EventHandler<CellEditEvent>() {
  614.  
  615. @Override
  616. public void handle(CellEditEvent t) {
  617. // номер строки(Rov), номер Колонки (Column), старое значение ячейки, новое значение ячейки
  618. labelTotalTablesInBases.setText(String.valueOf(t.getTablePosition().getColumn()
  619. + " " + String.valueOf(t.getTablePosition().getRow()))
  620. + " " + t.getOldValue().toString().trim() + " " + t.getNewValue().toString().trim()
  621. + " " + t.getTableColumn().getText() );
  622. //запрос на изменение значения в ячейки ComboBox // имя выбраной таблицы // имя колонки текщей таблицы
  623. Query.editTable(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
  624. // номер текущего рядка // новое значение добавленное в ячейку ComboBox
  625. Integer.valueOf(t.getTablePosition().getRow()+1), t.getNewValue().toString().trim() );
  626.  
  627. }
  628. });
  629.  
  630.  
  631. }
  632.  
  633. }
  634. });
  635.  
  636. // labelTest.setText( Query.editTable().toString() );
  637.  
  638.  
  639. // очищаем ComboBox от выбранного элемента при запуске
  640. cbAllTablesOfDataBase.getSelectionModel().clearSelection();
  641.  
  642.  
  643. // проверка для вывода значка базы в hBox
  644. if (nameSql.equals("MySqL") ){
  645. hBox.getChildren().add(main.sizeLabelPicture("MySqL"));
  646. }
  647. else if (nameSql.equals("PostgreSqL")){
  648. hBox.getChildren().add(main.sizeLabelPicture("PostgreSqL"));
  649. }
  650.  
  651.  
  652. hBox.getChildren().addAll( new VBox(labelTotalBases ,labelBases),
  653. labelTotalTablesInBases, cbAllTablesOfDataBase, btnOk, labelTest );
  654.  
  655. hBox.setLayoutX(15);
  656. hBox.setLayoutY(40);
  657. // промежутки между элементами внутри vBoxTop
  658. hBox.setSpacing(10);
  659. // hBox.setPrefSize(200, 80);
  660. hBox.setAlignment(Pos.CENTER);
  661.  
  662. Group root = new Group();
  663.  
  664. stage.setTitle("Окно по работе с базой");
  665.  
  666.  
  667. // задний фон
  668. Image image = new Image("login/backgroundLamps.jpg");
  669. ImageView backgroundImage = new ImageView(image);
  670.  
  671. root.getChildren().addAll(backgroundImage , hBox, tableBox);
  672.  
  673. Scene scene = new Scene(root, 930, 600);
  674.  
  675.  
  676. // scene.getStylesheets().add("login/WorkTable.css");
  677. // scene.getStylesheets().add(ModalWorkTable.class.getResource("MainWindow.css").toExternalForm());
  678.  
  679.  
  680. stage.setScene(scene);
  681.  
  682. // отключем кнопку маximyze и фиксируем окно
  683. stage.setResizable(false);
  684.  
  685. stage.show();
  686. }
  687.  
  688.  
  689. }
  690.  
  691.  
  692. package login;
  693.  
  694. import javafx.beans.property.SimpleStringProperty;
  695. import javafx.beans.value.ObservableValue;
  696. import javafx.collections.FXCollections;
  697. import javafx.collections.ObservableList;
  698. import javafx.scene.control.TableColumn;
  699. import javafx.scene.control.TableColumn.CellDataFeatures;
  700. import javafx.scene.control.TableView;
  701. import javafx.util.Callback;
  702.  
  703. import java.sql.*;
  704. import java.util.ArrayList;
  705.  
  706.  
  707.  
  708. /**
  709. * Created by Admin on 02.12.2016.
  710. */
  711. public class Query {
  712.  
  713.  
  714. // поля для подключения
  715. private static Statement stmt;
  716. private static ResultSet rs;
  717. private static Connection con;
  718.  
  719. private static TableColumn col;
  720.  
  721. public static TableColumn getCol(){
  722. return col;
  723. }
  724.  
  725. // список столбцов
  726. static ArrayList<TableColumn> arrayListTableColumn = new ArrayList<>();
  727.  
  728. public static ArrayList<TableColumn> getArrayList(){
  729. return arrayListTableColumn;
  730. }
  731.  
  732. // private static TableView tableView;
  733.  
  734. // получаем таблицу с ModalWorktable
  735. // public static void setTableView(TableView tableView){
  736. // Query.tableView = tableView;
  737. // }
  738.  
  739. // public static TableView getTableView (){
  740. // return Query.tableView;
  741. // }
  742.  
  743. public void setCon(Connection con){
  744. Query.con = con;
  745. }
  746.  
  747.  
  748.  
  749. // public static void setStmt(Statement stmt){
  750. // Query.stmt = stmt;
  751. // }
  752.  
  753. /*
  754. public String runDb(){
  755.  
  756. String lineCommand = "";
  757. String query = "select * from tbl1";
  758. try{
  759. // ткрываем подключение к БД
  760. con = DriverManager.getConnection(URL, USER, PASS);
  761.  
  762. stmt = con.createStatement();
  763.  
  764. // запрос
  765. rs = stmt.executeQuery(query);
  766.  
  767. while (rs.next()){
  768. lineCommand = rs.getString(2);
  769. }
  770. } catch (SQLException e) {
  771. e.printStackTrace();
  772. }
  773. finally {
  774. //закрываем подключение
  775. try {
  776. con.close();
  777. }catch (SQLException se){}
  778. try {
  779. stmt.close();
  780. }catch (SQLException se){}
  781. try {
  782. rs.close();
  783. }catch (SQLException se){}
  784. }
  785.  
  786. return lineCommand;
  787. }
  788. */
  789.  
  790.  
  791. //создаем Array с именами Баз MySQL
  792. // public ArrayList<String> namesBaseArray(){
  793.  
  794. // return forAllArrayListQuary("show databases");
  795. // return forAllArrayListQuary("SELECT DATABASE()");
  796. // }
  797.  
  798. //создаем Array с именами Баз для PostgreSql
  799. // public ArrayList<String> namesBaseArrayForPostgreSql(){
  800. // return forAllArrayListQuary("SELECT datname FROM pg_database WHERE datistemplate = false;");
  801. // return forAllArrayListQuary("SELECT current_database()");
  802. // }
  803.  
  804. // запрос получения имени текущей базы в MySqL
  805. public String nameBaseMySqL(){
  806. return nameBaseQuary("SELECT DATABASE()");
  807. }
  808.  
  809. // запрос получения имени текущей базы в PostgreSqL
  810. public String nameBasePostgreSqL(){
  811. return nameBaseQuary("SELECT current_database()");
  812. }
  813.  
  814. // узнаем к-тво Баз в PostgreSql
  815. // int countDataBasesOffPostgreSql(){
  816.  
  817. // return amountOfElements("SELECT count(*) FROM pg_database where datistemplate = false");
  818. // }
  819.  
  820.  
  821. // узнаем к-тво Баз
  822. // int countDataBases(){
  823.  
  824. // return amountOfElements("SELECT count(*) FROM information_schema.schemata");
  825. // }
  826.  
  827. //создаем Array с именами таблиц для PostgreSql
  828. public ArrayList<String> namesTablesInBaseArrayForPostgreSql(){
  829.  
  830. return forAllArrayListQuary("Select table_name FROM information_schema.tables WHERE table_schema = 'public'");
  831. }
  832.  
  833. //создаем Array с именами таблиц для MySql
  834. public ArrayList<String> namesTablesInBaseArray(String nameBase){
  835.  
  836. return forAllArrayListQuary("SHOW TABLES from " + nameBase);
  837. }
  838.  
  839.  
  840. // узнаем к-во таблиц в базе
  841. int countTablesInDataBase(String nameBase){
  842.  
  843. return amountOfElements("SELECT count(*) FROM information_schema.tables where table_schema="+"'"+nameBase+"'");
  844. }
  845.  
  846.  
  847. // узнаем количество таблиц в базе PostgreSql
  848. // int countTablesInDataBasePostgreSql(){
  849. // return amountOfElements("SELECT count(*) FROM pg_database where datistemplate = false;");
  850. // }
  851.  
  852. // 2-й вариант, узнаем количество таблиц в базе PostgreSql
  853. int countTablesInDataBasePostgreSql(){
  854.  
  855. return namesTablesInBaseArrayForPostgreSql().size();
  856. }
  857.  
  858. // метод для возврата Имени базы с
  859. private String nameBaseQuary(String query){
  860.  
  861. String resultQuery = "";
  862.  
  863. try{
  864.  
  865. stmt = con.createStatement();
  866.  
  867. rs = stmt.executeQuery(query);
  868.  
  869. while (rs.next()){
  870. resultQuery = rs.getString(1);
  871. }
  872.  
  873. }
  874. catch (SQLException e){
  875. e.printStackTrace();
  876. }
  877. finally {
  878. //закрываем подключение если непустое
  879. try {
  880. if (stmt != null)
  881. stmt.close();
  882. }catch (SQLException se){}
  883. try {
  884. if (rs != null)
  885. rs.close();
  886. }catch (SQLException se){}
  887. }
  888.  
  889. return resultQuery;
  890. }
  891.  
  892.  
  893. // метод для возврата ArrayList-ов с именами Баз, Таблиц
  894. private ArrayList<String> forAllArrayListQuary(String query){
  895.  
  896. ArrayList<String> list = new ArrayList<>();
  897.  
  898. try{
  899.  
  900. stmt = con.createStatement();
  901.  
  902. rs = stmt.executeQuery(query);
  903.  
  904. while (rs.next()){
  905.  
  906. list.add( rs.getString(1) );
  907.  
  908. }
  909.  
  910. }
  911. catch (SQLException e){
  912. e.printStackTrace();
  913. }
  914. finally {
  915. //закрываем подключение если непустое
  916. try {
  917. if (stmt != null)
  918. stmt.close();
  919. }catch (SQLException se){}
  920. try {
  921. if (rs != null)
  922. rs.close();
  923. }catch (SQLException se){}
  924. }
  925.  
  926. return list;
  927. }
  928.  
  929. //подсчитует и возвращает к-тво Баз, Таблиц
  930. private int amountOfElements(String query){
  931.  
  932. int count = 0;
  933. try{
  934.  
  935. stmt = con.createStatement();
  936.  
  937. rs = stmt.executeQuery(query);
  938.  
  939. while (rs.next())
  940. count = rs.getInt(1);
  941.  
  942. } catch (SQLException e) {
  943. e.printStackTrace();
  944. }
  945. finally {
  946. //закрываем подключение если не пустое
  947. try {
  948. if (stmt != null)
  949. stmt.close();
  950. }catch (SQLException se){}
  951. try {
  952. if (rs != null)
  953. rs.close();
  954. }catch (SQLException se){}
  955. }
  956.  
  957. return count;
  958. }
  959.  
  960. //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно///////////////
  961.  
  962. //Tableview and data
  963. static ObservableList<ObservableList> data = FXCollections.observableArrayList();
  964. //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно//////
  965. public static TableView buildData(TableView tableView, String tableNameQuary){
  966.  
  967.  
  968. try{
  969.  
  970. stmt = con.createStatement();
  971.  
  972.  
  973. ResultSet rs = stmt.executeQuery("SELECT * from " + tableNameQuary);
  974.  
  975. //создаем колонки таблицы
  976. for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
  977.  
  978. final int j = i;
  979. col = new TableColumn(rs.getMetaData().getColumnName(i+1));
  980. col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
  981. public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
  982. return new SimpleStringProperty(param.getValue().get(j).toString());
  983. }
  984. });
  985. tableView.getColumns().addAll(col);
  986.  
  987. // добавляем все Колонки таблици TableColumn в список для передачи в ModalWorkTable
  988. arrayListTableColumn.add(col);
  989.  
  990. }
  991. // проходим по колонкам Columns и строкам Rows
  992. // для создания ObservableList
  993. while(rs.next()){
  994. //Iterate Row
  995. ObservableList<String> row = FXCollections.observableArrayList();
  996. for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
  997. //итерация колонок
  998. row.add(rs.getString(i));
  999. }
  1000. //System.out.println("Row [1] added "+row );
  1001. data.add(row);
  1002. }
  1003. //создаем таблицу с колонками и строками
  1004. tableView.setItems(data);
  1005.  
  1006. }catch(Exception e){
  1007. e.printStackTrace();
  1008. // System.out.println("Error on Building Data");
  1009. }
  1010. finally {
  1011. //закрываем подключение если не пустое
  1012. try {
  1013. if (stmt != null)
  1014. stmt.close();
  1015. }catch (SQLException se){}
  1016. try {
  1017. if (rs != null)
  1018. rs.close();
  1019. }catch (SQLException se){}
  1020.  
  1021. }
  1022.  
  1023. return tableView;
  1024. }
  1025.  
  1026.  
  1027. // изменяем значения в таблице
  1028. public static void editTable(String tableName, String columnName, int rowNumID , String valueNew ){
  1029. try{
  1030.  
  1031. stmt = con.createStatement();
  1032. // количество столбцов
  1033. // rs.getMetaData().getColumnCount();
  1034. // имя колонки по индексу
  1035. // count = rs.getMetaData().getCatalogName(1);
  1036.  
  1037. // int rowIndex = 0;
  1038. // count = rs.getMetaData().getColumnName(1);
  1039.  
  1040. // SQL-запрос на изменения значения ячейки таблицы
  1041. stmt.executeUpdate("UPDATE " + tableName + " SET " + columnName.toUpperCase() + " ='"+valueNew+"'" +
  1042. " WHERE id ="+"'"+rowNumID+"'");
  1043.  
  1044.  
  1045. } catch (SQLException e) {
  1046. e.printStackTrace();
  1047. }
  1048. finally {
  1049. //закрываем подключение если не пустое
  1050. try {
  1051. if (stmt != null)
  1052. stmt.close();
  1053. }catch (SQLException se){}
  1054. try {
  1055. if (rs != null)
  1056. rs.close();
  1057. }catch (SQLException se){}
  1058. }
  1059.  
  1060.  
  1061. }
  1062.  
  1063. }
  1064.  
  1065. package login;
  1066.  
  1067. import java.sql.Connection;
  1068. import java.sql.DriverManager;
  1069. import java.sql.SQLException;
  1070. import java.sql.Statement;
  1071.  
  1072. /**
  1073. * Created by Admin on 02.12.2016.
  1074. */
  1075. public class ConnectDB {
  1076.  
  1077.  
  1078. private static Connection connection;
  1079.  
  1080.  
  1081. private static boolean flag;
  1082. private String message = "";
  1083.  
  1084.  
  1085. public static Connection getConnection(){
  1086. return connection;
  1087. }
  1088.  
  1089. // seter нужен чтоб установить null
  1090. public static void setConnection(Connection connection){
  1091. ConnectDB.connection = connection;
  1092. }
  1093.  
  1094. public String getMessage(){
  1095. return message;
  1096. }
  1097.  
  1098.  
  1099.  
  1100. // состояние подключения
  1101. public static boolean getFlag(){ return ConnectDB.flag; }
  1102.  
  1103. // flag устанавливается в false если с Main зашли удачно
  1104. public static void setFlag(boolean flag){
  1105. ConnectDB.flag = flag;
  1106. }
  1107.  
  1108. public void conDB(String URL, String USER, String PASS){
  1109.  
  1110.  
  1111.  
  1112. try {
  1113.  
  1114. connection = DriverManager.getConnection(URL, USER, PASS);
  1115.  
  1116.  
  1117. } catch (SQLException e) {
  1118. ConnectDB.flag = false;
  1119. // e.printStackTrace();
  1120. message = "Connection Failed";
  1121. }
  1122.  
  1123. if (connection != null) {
  1124. message = "Successfully Connected";
  1125. ConnectDB.flag = true;
  1126. } else {
  1127. message = "Connection Failed";
  1128. ConnectDB.flag = false;
  1129. }
  1130. }
  1131.  
  1132.  
  1133.  
  1134.  
  1135. }
  1136.  
  1137.  
  1138. package login;
  1139.  
  1140. import java.sql.Connection;
  1141. import java.sql.ResultSet;
  1142. import java.sql.SQLException;
  1143. import java.sql.Statement;
  1144.  
  1145. /**
  1146. * Created by Admin on 03.12.2016.
  1147. */
  1148. public class Disconnect {
  1149.  
  1150.  
  1151. private String message = "";
  1152.  
  1153. public String getMessage(){
  1154. return message;
  1155. }
  1156.  
  1157.  
  1158. public boolean disconMeth(Connection con){
  1159. //close connection ,stmt and resultset here
  1160. boolean flag = false;
  1161.  
  1162. if (con != null){
  1163. try {con.close(); } catch(SQLException se) { /*can't do anything */ }
  1164. flag = true;
  1165. message = "Disconnected";
  1166. }
  1167.  
  1168. // if (stmt != null){
  1169. // try { stmt.close(); } catch(SQLException se) { /*can't do anything */ }
  1170. // flag = true;
  1171. // }
  1172.  
  1173. // if (rs != null){
  1174. // try { rs.close(); } catch(SQLException se) { /*can't do anything */ }
  1175. // flag = true;
  1176. // }
  1177.  
  1178. return flag;
  1179. }
  1180.  
  1181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement