Advertisement
DeveloperSergio

MySqL&&JavaFX&&PostGreSqL&&SQLite Part8

Jan 22nd, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 104.25 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.  
  74. // заполняем TextFild и PasswordField для SQLite - сервера
  75. tfUrl.setText("jdbc:sqlite:C:\\SQLite\\testdb1.db");
  76. ///////////////////////////////////////////////TEST////////////////////////////////////////////////////////////////
  77.  
  78. //считуем значения с TextField и PasswordField
  79. URL = tfUrl.getText();
  80. USER = tfUser.getText();
  81. PASS = tfPass.getText();
  82.  
  83. // инициализация переменных URL, USER, PASS
  84. initUrlUserPass();
  85.  
  86. stage.setTitle("Main menu");
  87.  
  88. // стиль кнопки из css
  89. btnConn.setId("btnConnColor");
  90.  
  91. // прозрачная подсказка в TestField
  92. tfUrl.setPromptText(" Enter URL Database");
  93. tfUser.setPromptText(" Enter username");
  94. tfPass.setPromptText(" Enter password");
  95.  
  96. // задаем размер TestField
  97. tfUrl.setPrefColumnCount(15);
  98. tfUser.setPrefColumnCount(15);
  99. tfPass.setPrefColumnCount(15);
  100.  
  101. // создать список с именами Баз типа Observablelist из элементов
  102. ObservableList<String> basesTypes = FXCollections.observableArrayList("PostgreSqL", "MySqL", "SQLite");
  103.  
  104. // создаем комбинироаный список
  105. cbDataBases = new ComboBox<String>(basesTypes);
  106.  
  107. // корневой узел
  108. VBox root = new VBox();
  109.  
  110. // отступ по краям VBox root
  111. root.setPadding(new Insets(0,0,15,0));
  112.  
  113.  
  114.  
  115.  
  116. VBox vBoxTop = new VBox();
  117.  
  118. // отступы в vBoxTop
  119. vBoxTop.setPadding(new Insets(5,0,5,0));
  120.  
  121. // промежутки между элементами внутри vBoxTop
  122. vBoxTop.setSpacing(10);
  123. // выравнивание по центру текущего окна
  124. vBoxTop.setAlignment(Pos.CENTER);
  125.  
  126.  
  127.  
  128.  
  129. vBoxTop.getChildren().add(cbDataBases);
  130.  
  131. // добавляем imageViev в vBoxTop
  132. vBoxTop.getChildren().add(labelPicture);
  133.  
  134. VBox vBoxCenter = new VBox();
  135.  
  136. // промежутки между элементами внутри vBoxCenter
  137. vBoxCenter.setSpacing(5);
  138. // отступы вокруг vBoxCenter
  139. vBoxCenter.setPadding(new Insets(5, 20, 10, 20));
  140. // выравниваем все елементы по центру внутры vBoxCenter
  141. vBoxCenter.setAlignment(Pos.CENTER);
  142.  
  143. vBoxCenter.getChildren().addAll( tfUrl, tfUser, tfPass);
  144.  
  145. //----------------- ComboBox, Label, переменная для класа ModalWorkTable
  146. // установить значение по умолчанию в ComboBox "cbDataBases"
  147. cbDataBases.setValue("SQLite");
  148. // добавляем в Label картинку
  149. labelPicture.setGraphic( sizeLabelPicture("SQLite") );
  150. //передаем имя базы в ModalWorkTable для вывода значка
  151. ModalWorkTable.setNameSql("SQLite");
  152. //--------------------
  153.  
  154. //обработчик события на btnConn
  155. btnConn.setOnAction(new EventHandler<ActionEvent>() {
  156. @Override
  157. public void handle(ActionEvent ev) {
  158. // повторно считуем данные с TextFiel и PasswordField в переменные
  159. initUrlUserPass();
  160.  
  161. // отключение от базы
  162. if (cbDataBases.getValue().equals("PostgreSqL") &&
  163. !(btnConn.isSelected()) &&
  164. URL.contains("postgresql") ){
  165.  
  166. // отключаемся от базы
  167. disconnect.disconMeth(ConnectDB.getConnection());
  168.  
  169. labelInfo.setText("PostgreSqL " + disconnect.getMessage() );
  170.  
  171. // делаем активной/ неактивной Combobox, TextField
  172. activeInactive(false);
  173.  
  174. }
  175. // отключение от базы MySqL , SQLite
  176. else if (cbDataBases.getValue().equals("MySqL") && !(btnConn.isSelected()) && URL.contains("mysql") ||
  177. (cbDataBases.getValue().equals("SQLite") && !btnConn.isSelected() && URL.contains("sqlite")) ){
  178.  
  179. // отключаемся от базы
  180. disconnect.disconMeth(ConnectDB.getConnection());
  181.  
  182. labelInfo.setText("Mysql " + disconnect.getMessage());
  183.  
  184. // делаем активной Combobox, TextField выводим соответствующий текст и цвет button
  185. // отключаемся от базы
  186. activeInactive(false);
  187. }
  188.  
  189.  
  190. // подключаемся к PostgreSqL
  191. else if ( (cbDataBases.getValue()).equals("PostgreSqL") &&
  192. btnConn.isSelected() && URL.contains("postgresql") ){
  193. // подключаемся к базе
  194. connectDB.conDB(URL, USER, PASS);
  195.  
  196. // флаг подключения
  197. if (ConnectDB.getFlag()){
  198.  
  199. // передаем поток Connection в Query
  200. query.setCon(ConnectDB.getConnection());
  201.  
  202. //вызов модального окна
  203. //////////////////////////////////////////////////////////
  204. ModalWorkTable.mainTable();
  205.  
  206. // сообщение внизу проги об подключении
  207. labelInfo.setText(cbDataBases.getValue()+ " " + connectDB.getMessage() );
  208.  
  209.  
  210. // делаем не активной Combobox, TextField, делаем соответствующий текст и цвет button
  211. // подключаемся к базе
  212. activeInactive(true);
  213.  
  214. }
  215. else{
  216. // кнопку переводим в режим "невыбраной" если не удалось подключиться
  217. btnConn.setSelected(false);
  218. labelInfo.setId("labelInfoDisconColor");
  219. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  220. }
  221. }
  222.  
  223.  
  224. // подключаемся к MySqL, SQLite
  225. else if ( (cbDataBases.getValue().equals("MySqL") && btnConn.isSelected() && URL.contains("mysql")) ||
  226. (cbDataBases.getValue().equals("SQLite") && btnConn.isSelected() && URL.contains("sqlite")) ){
  227.  
  228. // подключаемся к базе
  229. connectDB.conDB(URL, USER, PASS);
  230.  
  231. // флаг подключения
  232. if (connectDB.getFlag()) {
  233.  
  234. // передаем поток Connection в Query
  235. query.setCon(ConnectDB.getConnection());
  236.  
  237. //вызов второго модального окна
  238. //////////////////////////////////////////////////////////
  239. ModalWorkTable.mainTable();
  240.  
  241. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  242. // делаем не активной Combobox, TextField выводим соответствующий текст и цвет button
  243. // подключаемся к базе
  244. activeInactive(true);
  245.  
  246.  
  247. }else{
  248. // кнопку переводим в режим "невыбраной" если не удалось подключиться
  249. btnConn.setSelected(false);
  250. labelInfo.setId("labelInfoDisconColor");
  251. labelInfo.setText(cbDataBases.getValue() + " " + connectDB.getMessage());
  252. }
  253.  
  254. }
  255.  
  256. //если не подключается
  257. else {
  258. // label для отключения красный цвет)
  259. labelInfo.setId("labelInfoDisconColor");
  260. labelInfo.setText( "Connection Failed" );
  261. // кнопку переводим в режим "невыбраной"
  262. btnConn.setSelected(false);
  263. }
  264.  
  265.  
  266.  
  267. }
  268. });
  269.  
  270. //слушатель и обработчик событий ComboBox для смени картинки текущей базу
  271. cbDataBases.setOnAction(new EventHandler<ActionEvent>() {
  272. @Override
  273. public void handle(ActionEvent event) {
  274.  
  275. if (cbDataBases.getValue().contains( "MySqL") ){
  276.  
  277. //выводится значек базы в Main
  278. labelPicture.setGraphic( sizeLabelPicture( "MySqL" ) );
  279. //передаем имя базы в ModalWorkTable для вывода значка
  280. ModalWorkTable.setNameSql("MySqL");
  281. }
  282. else if (cbDataBases.getValue().contains( "PostgreSqL" ) ){
  283.  
  284. //выводится значек базы в Main
  285. labelPicture.setGraphic( sizeLabelPicture( "PostgreSqL" ) );
  286. //передится имя базы в ModalWorkTable для вывода значка и тп.
  287. ModalWorkTable.setNameSql("PostgreSqL");
  288. }
  289. else if (cbDataBases.getValue().contains("SQLite")){
  290.  
  291. // выводится значек базы в Main
  292. labelPicture.setGraphic( sizeLabelPicture("SQLite") );
  293. // передается имя базы в ModalWorkTable для вывода значка и тп.
  294. ModalWorkTable.setNameSql("SQLite");
  295. }
  296.  
  297.  
  298.  
  299. }
  300. });
  301.  
  302. //всплывающая подсказка ComboBox
  303. cbDataBases.setTooltip( new Tooltip(" Select DataBase ") );
  304.  
  305. VBox vBoxButton= new VBox();
  306.  
  307.  
  308. // отступы вокруг vBoxCenter
  309. vBoxButton.setPadding(new Insets(10, 0, 0, 0));
  310.  
  311. // выравниваем элементы по ценру окна
  312. vBoxButton.setAlignment(Pos.CENTER);
  313.  
  314. vBoxButton.getChildren().add( btnConn);
  315.  
  316. // VBOX для LabelInfo
  317. VBox vBoxLabelInfo = new VBox();
  318. //отступы вокруг vBoxLabelInfo
  319. vBoxLabelInfo.setPadding(new Insets(10, 0, 5, 0));
  320.  
  321. vBoxLabelInfo.getChildren().add(labelInfo);
  322.  
  323. vBoxLabelInfo.setAlignment(Pos.BOTTOM_CENTER);
  324.  
  325. // добавляем VBOX-root
  326. root.getChildren().addAll(vBoxTop,vBoxCenter, vBoxButton, vBoxLabelInfo);
  327.  
  328. // создаем сцену
  329. Scene scene = new Scene(root);
  330.  
  331. // сцена на подмостках
  332. stage.setScene(scene);
  333.  
  334. // отключем кнопку маximyze и фиксируем окно
  335. stage.setResizable(false);
  336.  
  337.  
  338. //по центру
  339. root.setAlignment(Pos.CENTER);
  340.  
  341. // добавляем стиль-css
  342. scene.getStylesheets().add(Main.class.getResource("MainWindow.css").toExternalForm());
  343.  
  344.  
  345. // показуем подмостку и сцену
  346. stage.show();
  347.  
  348. }
  349.  
  350.  
  351. // задает размер иконки и отправляет в label
  352. public ImageView sizeLabelPicture(String sqlType){
  353.  
  354. ImageView imageViewPic = new ImageView();
  355. if (sqlType.equals("PostgreSqL")){
  356. Image image = new Image(getClass().getResourceAsStream("postgreSql.png"));
  357. imageViewPic.setFitHeight(55);
  358. imageViewPic.setFitWidth(55);
  359. imageViewPic.setImage(image);
  360.  
  361. // видимые TextField tfUser, tfPass для логина и пароля
  362. tfUser.setVisible(true);
  363. tfPass.setVisible(true);
  364. }
  365. else if (sqlType.equals("MySqL")){
  366. Image image = new Image(getClass().getResourceAsStream("mysql.png"));
  367. imageViewPic.setFitHeight(55);
  368. imageViewPic.setFitWidth(55);
  369. imageViewPic.setImage(image);
  370.  
  371. // видимые TextField tfUser, tfPass для логина и пароля
  372. tfUser.setVisible(true);
  373. tfPass.setVisible(true);
  374. }
  375. else if (sqlType.equals("SQLite")){
  376. Image image = new Image(getClass().getResourceAsStream("SQLite.png"));
  377. imageViewPic.setFitHeight(55);
  378. imageViewPic.setFitWidth(120);
  379. imageViewPic.setImage(image);
  380.  
  381. // не видимые TextField tfUser, tfPass для логина и пароля
  382. tfUser.setVisible(false);
  383. tfPass.setVisible(false);
  384. }
  385.  
  386.  
  387.  
  388. return imageViewPic;
  389. }
  390.  
  391. // делаем активной/ неактивной Combobox, TextField
  392. public void activeInactive(boolean flag){
  393.  
  394. cbDataBases.setDisable(flag);
  395. tfUrl.setDisable(flag);
  396. tfUser.setDisable(flag);
  397. tfPass.setDisable(flag);
  398. if (flag == true){
  399.  
  400. //надпись кнопки
  401. btnConn.setText("Disconnect");
  402.  
  403. // метка, стиль, цвет кнопки
  404. btnConn.setId("btnDisconColor");
  405.  
  406. // создаем метку для удачного подключения(зеленый цвет)
  407. labelInfo.setId("labelInfoConnColor");
  408. }
  409. else {
  410. btnConn.setText(" Connect ");
  411. // создаем метку для отключения красный цвет)
  412. labelInfo.setId("labelInfoDisconColor");
  413.  
  414. // метка, стиль, цвет кнопки
  415. btnConn.setId("btnConnColor");
  416.  
  417. //передаем в class ConnectDB flag = false, обнуляем переменную Connection;
  418. ConnectDB.setFlag(false);
  419. ConnectDB.setConnection(null);
  420. }
  421. }
  422.  
  423. public void initUrlUserPass(){
  424. //считуем значения с TextField и PasswordField в переменные URL USER PASS
  425. URL = tfUrl.getText();
  426. USER = tfUser.getText();
  427. PASS = tfPass.getText();
  428. }
  429.  
  430.  
  431. }
  432.  
  433.  
  434. package login;
  435.  
  436. import javafx.collections.FXCollections;
  437. import javafx.collections.ObservableList;
  438. import javafx.event.ActionEvent;
  439. import javafx.event.EventHandler;
  440. import javafx.geometry.Insets;
  441. import javafx.geometry.Pos;
  442. import javafx.scene.Group;
  443. import javafx.scene.Scene;
  444. import javafx.scene.control.*;
  445. import javafx.scene.effect.DropShadow;
  446. import javafx.scene.image.Image;
  447. import javafx.scene.image.ImageView;
  448. import javafx.scene.layout.HBox;
  449. import javafx.scene.layout.VBox;
  450. import javafx.stage.Modality;
  451. import javafx.stage.Stage;
  452. import javafx.scene.control.TableColumn.CellEditEvent;
  453.  
  454.  
  455.  
  456. /**
  457. * Created by Admin on 07.12.2016.
  458. */
  459. public class ModalWorkTable {
  460.  
  461. // переменная для определеня значка базы в окне класа ModalWorkTable
  462. private static String nameSql = "";
  463.  
  464. // сетер для нинициализации переменной nameSql имя базы
  465. public static void setNameSql(String nameSql){
  466. ModalWorkTable.nameSql = nameSql;
  467. }
  468.  
  469. public static String getNameSql(){ return nameSql; }
  470.  
  471. // ComboBox для таблиц определенной базы
  472. static ComboBox<String> cbAllTablesOfDataBase = new ComboBox<>();
  473.  
  474. //список для ComboBox cbAllTablesOfDataBase
  475. static ObservableList<String> baseTablesInBase;
  476.  
  477.  
  478. // выводит количество таблиц в определенной Базе
  479. static Label labelTotalTablesInBases = new Label();
  480.  
  481. static Label labelTotalBases = new Label("Name Base");
  482.  
  483. // выводит количество баз
  484. static Label labelBases = new Label();
  485.  
  486. static Label labelTest = new Label("test Label");
  487.  
  488. static TableView tableView = new TableView();
  489.  
  490. static Button btnOk = new Button("Ok");
  491. static Button btnDel = new Button("Delete Last Row");
  492. static Button btnDelTable = new Button("Delete Select Table");
  493. static Button btnCreateTbl = new Button("Create Table");
  494.  
  495.  
  496.  
  497. static Query query = new Query();
  498.  
  499.  
  500. public static void mainTable(){
  501.  
  502. // делаем кнопки неактивными
  503. btnOk.setDisable(true);
  504. btnDel.setDisable(true);
  505. btnDelTable.setDisable(true);
  506.  
  507.  
  508. // при запуске modalWindowTable очищаем все
  509. tableView.getSelectionModel().clearSelection();
  510. tableView.getItems().clear();
  511. tableView.getColumns().clear();
  512. cbAllTablesOfDataBase.getSelectionModel().clearSelection();
  513. // редактирование ComboBox
  514. cbAllTablesOfDataBase.setEditable(true);
  515.  
  516. Query.data.clear();
  517.  
  518. // размер таблицы
  519. tableView.setMinSize(600, 300);
  520.  
  521.  
  522. Main main = new Main();
  523.  
  524. Stage stage = new Stage();
  525.  
  526. // указываем stage, что окно модальное
  527. stage.initModality(Modality.APPLICATION_MODAL);
  528.  
  529. // таблица доступна для редактирования
  530. tableView.setEditable(true);
  531. // эффект тени вокруг таблицы
  532. tableView.setEffect(new DropShadow());
  533.  
  534.  
  535. HBox hBox = new HBox();
  536.  
  537. // VBox для tableView
  538. VBox tableBox = new VBox();
  539.  
  540. // точка с которой начинает отображаться TableView
  541. tableBox.setLayoutX(25);
  542. tableBox.setLayoutY(195);
  543.  
  544. tableBox.getChildren().add(tableView);
  545.  
  546. //отступы вокруг vBoxLabelInfo
  547. hBox.setPadding(new Insets(0, 10, 0, 10));
  548.  
  549.  
  550.  
  551. // выводит имя текущей базы для MySqL
  552. if (nameSql.equals("MySqL")){
  553.  
  554. labelBases.setText( query.nameBaseMySqL() );
  555.  
  556. }// выводит имя текущей базы для PostgreSql
  557. else if(nameSql.equals("PostgreSqL")){
  558.  
  559. // выводит имя текущей базы PostgreSql в Label
  560. labelBases.setText( query.nameBasePostgreSqL() );
  561.  
  562. }
  563.  
  564. // стили для Lables
  565. styleLabels();
  566.  
  567. // заполнение ComboBox - cbAllTablesOfDataBase именами таблиц текущей базы SQL, установка имени Базы в label
  568. addValuesNameTablesInComboBox();
  569.  
  570.  
  571. // слушатель, обработчик события на ComboBox для Button "active/inActive"
  572. // при выборе любого елемента в Combobox - кнопки btnOk и btnDel стают активными
  573. cbAllTablesOfDataBase.setOnAction(new EventHandler<ActionEvent>() {
  574. @Override
  575. public void handle(ActionEvent event) {
  576.  
  577. // номер елемента в массиве для Combobox
  578. if ( (cbAllTablesOfDataBase.getSelectionModel().getSelectedIndex() >= 0 )) {
  579. // активные кнопки
  580. btnOk.setDisable(false);
  581. btnDel.setDisable(false);
  582. btnDelTable.setDisable(false);
  583. }else {// неактивные кнопки
  584. btnOk.setDisable(true);
  585. btnDel.setDisable(true);
  586. btnDelTable.setDisable(true);
  587. }
  588.  
  589. }
  590. });
  591.  
  592.  
  593.  
  594. // обработчик, слушатель Button
  595. btnOk.setOnAction(new EventHandler<ActionEvent>() {
  596. @Override
  597. public void handle(ActionEvent event) {
  598. // refresh
  599. toDo();
  600. }
  601. });
  602.  
  603. // удаление таблицы с SQl-базы
  604. btnDelTable.setOnAction(new EventHandler<ActionEvent>() {
  605. @Override
  606. public void handle(ActionEvent event) {
  607. // определение выбран ли элемент в combobox
  608. if (cbAllTablesOfDataBase.getSelectionModel().getSelectedIndex()>=0){
  609.  
  610. // получение выбранной строки(таблицы) в comboBox
  611. String nameTable = cbAllTablesOfDataBase.getSelectionModel().getSelectedItem();
  612.  
  613. // вызов метода "delTable()" для удаление таблицы
  614. labelTest.setText( Query.delTable(nameTable) );
  615.  
  616. // обновление списка таблиц в ComboBox cbAllTablesOfDataBase, установка имени Базы в label
  617. // после создания новой таблицы
  618. ModalWorkTable.addValuesNameTablesInComboBox();
  619. }
  620. }
  621. });
  622.  
  623.  
  624. // удаление последнего рядка
  625. btnDel.setOnAction(new EventHandler<ActionEvent>() {
  626. @Override
  627. public void handle(ActionEvent eventDel) {
  628.  
  629. //
  630. // if (getTableObrabotchik().getTableView().isFocused() ){
  631. //номер текущего рядка удаление последнего рядка таблицы
  632. String lineQ = Query.delRow(cbAllTablesOfDataBase.getValue());
  633.  
  634. labelTest.setText( lineQ);
  635. // }
  636.  
  637. //refresh table
  638. toDo();
  639.  
  640. }
  641. });
  642.  
  643. // вызов окна по созданию новой таблицы
  644. btnCreateTbl.setOnAction(new EventHandler<ActionEvent>() {
  645. @Override
  646. public void handle(ActionEvent event) {
  647. // очистка всех элементов CreateTable
  648. CreateTable.clearAll();
  649. // запуск формы CreateTable
  650. CreateTable.createNewTbl();
  651. }
  652. });
  653.  
  654.  
  655.  
  656. // очищаем ComboBox от выбранного элемента при запуске
  657. cbAllTablesOfDataBase.getSelectionModel().clearSelection();
  658.  
  659.  
  660. // проверка для вывода значка базы в hBox
  661. if (nameSql.equals("MySqL") ){
  662. hBox.getChildren().add(main.sizeLabelPicture("MySqL"));
  663. }
  664. else if (nameSql.equals("PostgreSqL")){
  665. hBox.getChildren().add(main.sizeLabelPicture("PostgreSqL"));
  666. }
  667. else if (nameSql.equals("SQLite")){
  668. hBox.getChildren().add(main.sizeLabelPicture("SQLite"));
  669. }
  670.  
  671. VBox vBoxBtn = new VBox();
  672. vBoxBtn.setSpacing(5);
  673. vBoxBtn.getChildren().addAll(btnOk, btnCreateTbl, btnDel, btnDelTable);
  674.  
  675. hBox.getChildren().addAll( new VBox(labelTotalBases ,labelBases),
  676. labelTotalTablesInBases, cbAllTablesOfDataBase, vBoxBtn , labelTest );
  677.  
  678. hBox.setLayoutX(15);
  679. hBox.setLayoutY(40);
  680. // промежутки между элементами внутри vBoxTop
  681. hBox.setSpacing(10);
  682. // hBox.setPrefSize(200, 80);
  683. hBox.setAlignment(Pos.CENTER);
  684.  
  685. Group root = new Group();
  686.  
  687. stage.setTitle("Окно по работе с базой");
  688.  
  689.  
  690. // задний фон
  691. Image image = new Image("login/backgroundLamps.jpg");
  692. ImageView backgroundImage = new ImageView(image);
  693.  
  694.  
  695. root.getChildren().addAll(backgroundImage , hBox, tableBox);
  696.  
  697. Scene scene = new Scene(root, 930, 600);
  698.  
  699.  
  700. // scene.getStylesheets().add("login/WorkTable.css");
  701. // scene.getStylesheets().add(ModalWorkTable.class.getResource("MainWindow.css").toExternalForm());
  702.  
  703.  
  704. stage.setScene(scene);
  705.  
  706. // отключем кнопку маximyze и фиксируем окно
  707. stage.setResizable(false);
  708.  
  709. stage.show();
  710. }
  711.  
  712. // стили для Lables
  713. private static void styleLabels(){
  714.  
  715.  
  716. labelTest.setStyle("-fx-font-size: 20px;"+
  717. "-fx-font-family: Arial #67f5f5;" +
  718. "-fx-fill: #fffdf8;" +
  719. "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
  720.  
  721.  
  722. labelTotalTablesInBases.setStyle("-fx-font-size: 20px;"+
  723. "-fx-font-family: Arial #67f5f5;" +
  724. "-fx-fill: #fffdf8;" +
  725. "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
  726.  
  727. labelTotalBases.setStyle("-fx-font-size: 15px;"+
  728. "-fx-font-family: Arial #67f5f5;" +
  729. "-fx-fill: #fffdf8;" +
  730. "-fx-effect: innershadow( three-pass-box , rgba(103, 245, 245, 0.7) , 6, 0.0 , 0 , 2 );");
  731.  
  732. labelBases.setStyle("-fx-font-size: 24px;"+
  733. "-fx-font-family: Arial #39f540;" +
  734. "-fx-fill: #fffdf8;" +
  735. "-fx-effect: innershadow( three-pass-box , rgba(57, 245, 64, 0.7) , 6, 0.0 , 0 , 2 );" );
  736.  
  737.  
  738. }
  739.  
  740. // заполнение ComboBox - cbAllTablesOfDataBase именами таблиц текущей базы SQL, labelTotalTablesInBases
  741. public static void addValuesNameTablesInComboBox(){
  742. // очистка ObservableList перед запуском
  743. // baseTablesInBase.clear();
  744.  
  745. if ( nameSql.equals("MySqL") ){
  746.  
  747. // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
  748. baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArray( labelBases.getText() ));
  749. // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
  750. cbAllTablesOfDataBase.setItems(baseTablesInBase);
  751. // вывод количества таблиц в Базе MySqL
  752. labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBase( labelBases.getText() ));
  753. }
  754. else if ( nameSql.equals("PostgreSqL") ){
  755. // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
  756. baseTablesInBase = FXCollections.observableArrayList(query.namesTablesInBaseArrayForPostgreSql() );
  757. // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
  758. cbAllTablesOfDataBase.setItems(baseTablesInBase);
  759. // переопределяю количество таблиц в label базы PostgreSqL
  760. labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBasePostgreSql() );
  761. }
  762. else if ( nameSql.equals("SQLite") ){
  763. // создаю колекцию имен таблиц по выбраной базе в Combobox "cbAllDataBases"
  764. baseTablesInBase = FXCollections.observableArrayList( query.namesTablesInBaseArrayForSQLite() );
  765. // добавляю новую колекцию в Combobox "cbAllTablesOfDataBase" для таблиц
  766. cbAllTablesOfDataBase.setItems(baseTablesInBase);
  767. // переопределяю количество таблиц в label базы SQLite
  768. labelTotalTablesInBases.setText("Total Tables: " + query.countTablesInDataBaseSQLite() );
  769.  
  770. }
  771.  
  772. }
  773.  
  774.  
  775.  
  776. // запуск таблицы
  777. private static void toDo(){
  778. // очищаем от выбраных элементов в таблице
  779. tableView.getSelectionModel().clearSelection();
  780. // очищаем от елементов в таблице
  781. tableView.getItems().clear();
  782. // очищаем заголовки колонок таблицы
  783. tableView.getColumns().clear();
  784. // передаем пустую в buildData()/ получаем заполненную таблицу
  785. tableView = Query.buildData( tableView, cbAllTablesOfDataBase.getValue() );
  786.  
  787.  
  788. // вешаем на все столбцы слушаель
  789. for (int i = 0; i < Query.getArrayListTableColumn().size(); i++) {
  790.  
  791. // сушатель с обработчиком на все колонки
  792. Query.getArrayListTableColumn().get(i).setOnEditCommit(new EventHandler<CellEditEvent>() {
  793.  
  794. @Override
  795. public void handle(CellEditEvent t) {
  796.  
  797.  
  798. // номер строки(Rov), номер Колонки (Column), старое значение ячейки, новое значение ячейки
  799. labelTotalTablesInBases.setText(String.valueOf(t.getTablePosition().getColumn())
  800. + " " + String.valueOf(t.getTablePosition().getRow())
  801. + " " + t.getOldValue().toString().trim() + " " + t.getNewValue().toString().trim()
  802. + " " + t.getTableColumn().getText() + " "
  803. + String.valueOf( Query.getArrayListTableColumn().get(0).getText()) +
  804. " Size Col " + tableView.getColumns().size() +
  805. " Size Row " + tableView.getItems().size()+" New Row " + t.getTablePosition().getRow());
  806.  
  807.  
  808.  
  809.  
  810. /////////////////////// редактирование ячейки таблицы
  811. // "работа с ячейкой" если(новое знаяение и старое значение в ячейке не совпадают) и ячейка непуста
  812. if ( !(t.getNewValue().toString().trim().equals( t.getOldValue().toString().trim())) &&
  813. !(t.getNewValue().toString().trim().isEmpty()) ){
  814. // сообщение в labelTest
  815. String massageinfo = "edited row ";
  816.  
  817. // определяем какая база выбрана, для выбора метода обновления значений в таблице
  818. // для MySqL
  819. if ( nameSql.equals("MySqL") ){
  820.  
  821. //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
  822. Query.editTableMySqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
  823. // номер текущего рядка
  824. Integer.valueOf(t.getTablePosition().getRow()+1),
  825. // имя первой колонки id // новое значение добавленное в ячейку tableView
  826. String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
  827. // сообщение в labelTest
  828. labelTest.setText(massageinfo + (t.getTablePosition().getRow()+1) ) ;
  829.  
  830.  
  831. }// для PostgreSqL, SQLite
  832. else if ( nameSql.equals("PostgreSqL") || nameSql.equals("SQLite") ){
  833. //запрос на изменение значения в ячейке ComboBox // имя выбраной таблицы // имя колонки текщей таблицы
  834. Query.editTablePostgreSqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
  835. // номер текущего рядка // имя первой колонки id // новое значение добавленное в ячейку ComboBox
  836. Integer.valueOf(t.getTablePosition().getRow()+1),
  837. String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
  838. // сообщение в labelTest
  839. labelTest.setText(massageinfo + (t.getTablePosition().getRow()+1) );
  840. }
  841.  
  842.  
  843.  
  844. }
  845.  
  846. ////////////////////// создание пустого рядка и частичное(или полное) его заполнение(одновременно)
  847. // если последний ряд = выбранному ряду в таблице
  848. if ( (tableView.getItems().size() - 1) == t.getTablePosition().getRow() &&
  849. // "работа с ячейкой" если(новое знаяение и старое значение в ячейке не совпадают) и ячейка не пуста
  850. !(t.getNewValue().toString().trim().equals( t.getOldValue().toString().trim())) &&
  851. //и новое значение в ячейке непустое
  852. !(t.getNewValue().toString().trim().isEmpty())){
  853.  
  854.  
  855. // запрос на создание пустого рядка
  856. String messegeNewRow = Query.gueryAddRow( cbAllTablesOfDataBase.getValue() );
  857.  
  858. // создание пустого рядка и заполнеие его одновременно для базы "PostgreSqL", "SQLite"
  859. if (getNameSql().contains("PostgreSqL") || getNameSql().contains("SQLite")){
  860. //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
  861. Query.editTablePostgreSqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
  862. // номер текущего рядка
  863. Integer.valueOf(t.getTablePosition().getRow()+1),
  864. // имя первой колонки id // новое значение добавленное в ячейку tableView
  865. String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
  866. }
  867.  
  868. // создание пустого рядка и заполнеие его одновременно для базы "MySqL"
  869. if (getNameSql().contains("MySqL")){
  870. //запрос на изменение значения в ячейке TableView // имя выбраной таблицы // имя колонки текщей таблицы
  871. Query.editTableMySqL(cbAllTablesOfDataBase.getValue(), t.getTableColumn().getText(),
  872. // номер текущего рядка
  873. Integer.valueOf(t.getTablePosition().getRow()+1),
  874. // имя первой колонки id // новое значение добавленное в ячейку tableView
  875. String.valueOf( Query.getArrayListTableColumn().get(0).getText() ) ,t.getNewValue().toString().trim() );
  876. }
  877.  
  878. // вывод сообщения
  879. labelTest.setText(messegeNewRow + " & edited");
  880.  
  881.  
  882. // refresh
  883. toDo();
  884.  
  885. }
  886.  
  887. // создание пустого рядка
  888. // если последний ряд = выбранному ряду и
  889. if ( (tableView.getItems().size() - 1) == t.getTablePosition().getRow() &&
  890. // ячейка в режиме редактирования и старое значение пустое и
  891. t.getTableView().isEditable() && (t.getOldValue().toString().isEmpty()) &&
  892. // новое введенное значение пустое
  893. (t.getNewValue().toString().isEmpty()) ){
  894.  
  895. // запрос на создание пустого рядка
  896. String messegeNewRow = Query.gueryAddRow( cbAllTablesOfDataBase.getValue().toString() );
  897.  
  898. // текст осоздании рядка
  899. ModalWorkTable.labelTest.setText(messegeNewRow);
  900. // refresh
  901. toDo();
  902. }
  903.  
  904.  
  905.  
  906. }
  907. });
  908. }
  909. }
  910.  
  911.  
  912. }
  913.  
  914.  
  915. package login;
  916.  
  917. import javafx.beans.property.SimpleStringProperty;
  918. import javafx.beans.value.ObservableValue;
  919. import javafx.collections.FXCollections;
  920. import javafx.collections.ObservableList;
  921. import javafx.scene.control.TableColumn;
  922. import javafx.scene.control.TableColumn.CellDataFeatures;
  923. import javafx.scene.control.TableView;
  924. import javafx.scene.control.cell.TextFieldTableCell;
  925. import javafx.util.Callback;
  926.  
  927. import java.sql.*;
  928. import java.util.ArrayList;
  929.  
  930.  
  931.  
  932. /**
  933. * Created by Admin on 02.12.2016.
  934. */
  935. public class Query {
  936.  
  937.  
  938. // поля для подключения
  939. private static Statement stmt;
  940. private static ResultSet rs;
  941. private static Connection con;
  942.  
  943. private static TableColumn col;
  944.  
  945. public static TableColumn getCol(){
  946. return col;
  947. }
  948.  
  949. // список столбцов
  950. static ArrayList<TableColumn> arrayListTableColumn = new ArrayList<>();
  951.  
  952. public static ArrayList<TableColumn> getArrayListTableColumn(){
  953. return arrayListTableColumn;
  954. }
  955.  
  956.  
  957. public void setCon(Connection con){
  958. Query.con = con;
  959. }
  960.  
  961.  
  962. // запрос получения имени текущей базы в MySqL
  963. public String nameBaseMySqL(){
  964. return nameBaseQuary("SELECT DATABASE()");
  965. }
  966.  
  967. // запрос получения имени текущей базы в PostgreSqL
  968. public String nameBasePostgreSqL(){
  969. return nameBaseQuary("SELECT current_database()");
  970. }
  971.  
  972.  
  973.  
  974. //создаем Array с именами таблиц для PostgreSql
  975. public ArrayList<String> namesTablesInBaseArrayForPostgreSql(){
  976. // получение списка таблиц
  977. return forAllArrayListQuary("Select table_name FROM information_schema.tables WHERE table_schema = 'public'");
  978. }
  979.  
  980. //создаем Array с именами таблиц для SQLite
  981. public ArrayList<String> namesTablesInBaseArrayForSQLite(){
  982. // получение списка таблиц
  983. return forAllArrayListQuary("select * from sqlite_sequence");
  984. // return forAllArrayListQuary("select name from sqlite_master where type='table'");
  985. }
  986.  
  987. //создаем Array с именами таблиц для MySql
  988. public ArrayList<String> namesTablesInBaseArray(String nameBase){
  989. // запрос в базу
  990. return forAllArrayListQuary("SHOW TABLES from " + nameBase);
  991. }
  992.  
  993.  
  994. // узнаем к-во таблиц в базе
  995. int countTablesInDataBase(String nameBase){
  996.  
  997. return amountOfElements("SELECT count(*) FROM information_schema.tables where table_schema="+"'"+nameBase+"'");
  998. }
  999.  
  1000.  
  1001. // узнаем количество таблиц в базе PostgreSql
  1002. // int countTablesInDataBasePostgreSql(){
  1003. // return amountOfElements("SELECT count(*) FROM pg_database where datistemplate = false;");
  1004. // }
  1005.  
  1006. // 2-й вариант, узнаем количество таблиц в базе PostgreSql
  1007. int countTablesInDataBasePostgreSql(){
  1008.  
  1009. return namesTablesInBaseArrayForPostgreSql().size();
  1010. }
  1011.  
  1012. // получение к-ва таблиц в текущей базе
  1013. int countTablesInDataBaseSQLite(){
  1014. return amountOfElements("select count(*) from sqlite_master where type='table'");
  1015. }
  1016.  
  1017. // метод для возврата Имени базы с
  1018. private String nameBaseQuary(String query){
  1019.  
  1020. String resultQuery = "";
  1021.  
  1022. try{
  1023.  
  1024. stmt = con.createStatement();
  1025.  
  1026. rs = stmt.executeQuery(query);
  1027.  
  1028. while (rs.next()){
  1029. resultQuery = rs.getString(1);
  1030. }
  1031.  
  1032. }
  1033. catch (SQLException e){
  1034. e.printStackTrace();
  1035. }
  1036. finally {
  1037. //закрываем подключение если непустое
  1038. try {
  1039. if (stmt != null)
  1040. stmt.close();
  1041. }catch (SQLException se){}
  1042. try {
  1043. if (rs != null)
  1044. rs.close();
  1045. }catch (SQLException se){}
  1046. }
  1047.  
  1048. return resultQuery;
  1049. }
  1050.  
  1051.  
  1052. // метод для возврата ArrayList-ов с именами Баз, Таблиц
  1053. private ArrayList<String> forAllArrayListQuary(String query){
  1054.  
  1055. ArrayList<String> list = new ArrayList<>();
  1056.  
  1057. try{
  1058.  
  1059. stmt = con.createStatement();
  1060.  
  1061. rs = stmt.executeQuery(query);
  1062.  
  1063. while (rs.next()){
  1064.  
  1065. list.add( rs.getString(1) );
  1066.  
  1067. }
  1068.  
  1069. }
  1070. catch (SQLException e){
  1071. e.printStackTrace();
  1072. }
  1073. finally {
  1074. //закрываем подключение если непустое
  1075. try {
  1076. if (stmt != null)
  1077. stmt.close();
  1078. }catch (SQLException se){}
  1079. try {
  1080. if (rs != null)
  1081. rs.close();
  1082. }catch (SQLException se){}
  1083. }
  1084.  
  1085. return list;
  1086. }
  1087.  
  1088. //подсчитует и возвращает к-тво Таблиц
  1089. private int amountOfElements(String query){
  1090.  
  1091. int count = 0;
  1092. try{
  1093.  
  1094. stmt = con.createStatement();
  1095.  
  1096. rs = stmt.executeQuery(query);
  1097.  
  1098. while (rs.next())
  1099. count = rs.getInt(1);
  1100.  
  1101. } catch (SQLException e) {
  1102. e.printStackTrace();
  1103. }
  1104. finally {
  1105. //закрываем подключение если не пустое
  1106. try {
  1107. if (stmt != null)
  1108. stmt.close();
  1109. }catch (SQLException se){}
  1110. try {
  1111. if (rs != null)
  1112. rs.close();
  1113. }catch (SQLException se){}
  1114. }
  1115.  
  1116. return count;
  1117. }
  1118.  
  1119. //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно///////////////
  1120. //Tableview and data
  1121. static ObservableList<ObservableList> data = FXCollections.observableArrayList();
  1122.  
  1123. //////////// тестовая колонка// // заголовок//
  1124. // static TableColumn colTest = new TableColumn("edit Column");
  1125. ///////////////////////////////////////////
  1126.  
  1127. //создаем динамичискую таблицу: заполняем полученную, пустую таблицу данными с БазыSqL// и возвращаем обратно//////
  1128. public static TableView buildData(TableView tableView, String tableNameQuary){
  1129.  
  1130. // очищаем arrayListTableColumn (он нужен для редактирования)
  1131. Query.arrayListTableColumn.clear();
  1132.  
  1133. try{
  1134.  
  1135. stmt = con.createStatement();
  1136.  
  1137. ResultSet rs = stmt.executeQuery("SELECT * from " + tableNameQuary);
  1138.  
  1139. //создаем колонки таблицы
  1140. for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
  1141.  
  1142. final int j = i;
  1143. col = new TableColumn(rs.getMetaData().getColumnName(i+1));
  1144.  
  1145. col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
  1146. public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {
  1147.  
  1148. return new SimpleStringProperty(param.getValue().get(j).toString());
  1149. }
  1150. });
  1151. tableView.getColumns().addAll(col);
  1152.  
  1153. // добавление всех Колонок таблицы TableColumn в список для передачи в ModalWorkTable
  1154. arrayListTableColumn.add(col);
  1155.  
  1156. }
  1157.  
  1158.  
  1159. // добавление колонки colTest на край таблицы
  1160. // tableView.getColumns().addAll(colTest);
  1161. // добавление колонки colTest в arrayListTableColumn
  1162. // arrayListTableColumn.add(colTest);
  1163.  
  1164. // empty row для новой строки
  1165. ObservableList<String> rowTest = FXCollections.observableArrayList();
  1166. // проходим по колонкам Columns и строкам Rows
  1167. // для создания ObservableList
  1168. while(rs.next()){
  1169. //Iterate Row
  1170. ObservableList<String> row = FXCollections.observableArrayList();
  1171.  
  1172.  
  1173. for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
  1174. //итерация колонок
  1175. row.add(rs.getString(i));
  1176.  
  1177. // создание новой строки для редактирования
  1178. rowTest.add(new String());
  1179. }
  1180.  
  1181.  
  1182. //System.out.println("Row [1] added "+row );
  1183. data.add(row);
  1184.  
  1185. }
  1186.  
  1187. // добавление новой строки для редактирования в ObservableList "data"
  1188. data.add(rowTest);
  1189.  
  1190. // создаем таблицу с колонками и строками
  1191. tableView.setItems(data);
  1192.  
  1193.  
  1194. // делаем колонки редактируемыми
  1195. Query.todoEditebleColumns();
  1196.  
  1197.  
  1198.  
  1199.  
  1200. }catch(Exception e){
  1201. e.printStackTrace();
  1202. // System.out.println("Error on Building Data");
  1203. }
  1204. finally {
  1205. //закрываем подключение если не пустое
  1206. try {
  1207. if (stmt != null)
  1208. stmt.close();
  1209. }catch (SQLException se){}
  1210. try {
  1211. if (rs != null)
  1212. rs.close();
  1213. }catch (SQLException se){}
  1214.  
  1215. }
  1216.  
  1217. return tableView;
  1218.  
  1219. }
  1220.  
  1221. // изменяем значения в таблице MySqL
  1222. public static void editTableMySqL(String tableName, String columnName, int rowNumID , String nameID ,String valueNew ){
  1223. Query.gueryEditTable("UPDATE " + tableName + " SET " + columnName + " ='"+valueNew+"'" +
  1224. " WHERE " + nameID + " ="+"'"+rowNumID+"'");
  1225. }
  1226.  
  1227. // изменяем значения в таблице PostgreSqL, SQLite
  1228. public static void editTablePostgreSqL(String tableName, String columnName, int rowNumID , String nameID ,String valueNew ){
  1229. Query.gueryEditTable("UPDATE " + tableName + " SET " + "\"" +columnName+ "\"" + " ='"+valueNew+"'" +
  1230. " WHERE " + nameID + " ="+"'"+rowNumID+"'");
  1231. }
  1232.  
  1233. // удаление выбраной таблицы
  1234. public static String delTable(String tableName){
  1235.  
  1236. Query.gueryEditTable("DROP TABLE " + tableName);
  1237. return "Table: " + tableName +" Deleted";
  1238. }
  1239.  
  1240. ///////// удаление выбраной строки//////////
  1241. public static String delRow(String tableName ){
  1242.  
  1243.  
  1244. // номер id рядка нужен перед удалением(после удвления "numberIdRow" помещаем
  1245. // с номер auto_increment ) имя id колонки выбраной таблицы
  1246. String numberIdRow = Query.nameLastInIdColl(tableName, Query.nameIdColl(tableName));
  1247.  
  1248. // если номер id больше 1, тогда можно удалить рядок из базы
  1249. if ( Integer.valueOf(numberIdRow) > 1 ){
  1250.  
  1251. // индекс больше 1-ы (оставляем минимум 1 рядок, не удаляем первый рядок)
  1252. if (Integer.valueOf(numberIdRow)> 1){
  1253. //имя id колонки имя id колонки выбраной таблицы номер id рядка
  1254. Query.gueryEditTable("DELETE FROM " + tableName + " WHERE "+Query.nameIdColl(tableName)+"= "+ numberIdRow );
  1255.  
  1256.  
  1257. // рабочий auto_increment для Mysql
  1258. if (ModalWorkTable.getNameSql().contains("MySqL") ){
  1259.  
  1260. // устанавливаем auto_increment на номер удаленного рядка // номер id рядка
  1261. Query.gueryEditTable("ALTER TABLE " + tableName + " auto_increment= "+ numberIdRow );
  1262. } // рабочий auto_increment для PostgreSqL
  1263. else if (ModalWorkTable.getNameSql().contains("PostgreSqL")){
  1264.  
  1265. // устанавливаем auto_increment на номер удаленного рядка имя id-колонки // номер id рядка
  1266. Query.gueryEditTable("ALTER SEQUENCE " + tableName+"_"+ Query.nameIdColl(tableName)+"_seq RESTART WITH " +numberIdRow );
  1267. } // установка auto_increment-а на место удаленного рядка(в SQLite работает автоматом, не нужно указываль рядок id)
  1268. else if (ModalWorkTable.getNameSql().contains("SQLite")){
  1269. // номер последнего номера id-рядка // имя таблицы
  1270. Query.gueryEditTable("UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='"+tableName+"'");
  1271. }
  1272. }
  1273.  
  1274. }
  1275.  
  1276.  
  1277. //имя таблицы и номер id-рядка
  1278. return "row "+numberIdRow+" was removed";
  1279.  
  1280. }
  1281.  
  1282. // создание новой таблицы
  1283. public static String createTable(String nameTable, String query){
  1284.  
  1285. // если база MySqL тогда создается таблица
  1286. if (ModalWorkTable.getNameSql().contains("MySqL")){
  1287.  
  1288. // запрос на создание таблицы
  1289. Query.gueryEditTable("CREATE TABLE " +nameTable+"("+"id int(11) NOT NULL PRIMARY KEY auto_increment,"+
  1290. query+");");
  1291. // создание пустой строки(Row) для редактирования
  1292. Query.gueryAddRow(nameTable);
  1293.  
  1294. }
  1295.  
  1296. // если база PostgreSqL тогда создается таблица
  1297. if (ModalWorkTable.getNameSql().contains("PostgreSqL")){
  1298.  
  1299. // запрос на создание таблицы
  1300. Query.gueryEditTable("CREATE TABLE " +nameTable+" (id SERIAL PRIMARY KEY, "+
  1301. query+");");
  1302. // создание пустой строки(Row) для редактирования
  1303. Query.gueryAddRow(nameTable);
  1304. }
  1305.  
  1306. // если база SQLite тогда создается таблица
  1307. if (ModalWorkTable.getNameSql().contains("SQLite")){
  1308.  
  1309. // запрос на создание таблицы
  1310. Query.gueryEditTable("CREATE TABLE " + nameTable + " (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "+
  1311. query+");");
  1312. // создание пустой строки(Row) для редактирования
  1313. Query.gueryAddRow(nameTable);
  1314. }
  1315.  
  1316. return "Success, table "+nameTable+" created";
  1317. }
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323. // изменяем значения в таблице SQL
  1324. private static void gueryEditTable(String query ){
  1325. try{
  1326.  
  1327. stmt = con.createStatement();
  1328.  
  1329. // SQL-запрос на изменения значения ячейки таблицы
  1330. stmt.executeUpdate(query);
  1331.  
  1332.  
  1333. } catch (SQLException e) {
  1334. e.printStackTrace();
  1335. }
  1336. finally {
  1337. //закрываем подключение если не пустое
  1338. try {
  1339. if (stmt != null)
  1340. stmt.close();
  1341. }catch (SQLException se){}
  1342. try {
  1343. if (rs != null)
  1344. rs.close();
  1345. }catch (SQLException se){}
  1346. }
  1347.  
  1348.  
  1349. }
  1350.  
  1351.  
  1352. // возврат последнего номера в колонке ID
  1353. private static String nameLastInIdColl(String tableName, String idName){
  1354.  
  1355. String resultQuery = "";
  1356. int tempNum = 0;
  1357.  
  1358. try{
  1359.  
  1360. stmt = con.createStatement();
  1361.  
  1362. ResultSet rs = stmt.executeQuery("SELECT "+idName+" FROM " + tableName);
  1363.  
  1364. while (rs.next()){
  1365. // находим найбольшее значение в списке и присваиваем его переменной "resultQuery"
  1366. if (tempNum < Integer.valueOf(rs.getString(1)) ){
  1367. resultQuery = rs.getString(1);
  1368. tempNum = Integer.valueOf(rs.getString(1));
  1369. }
  1370. }
  1371.  
  1372. }
  1373. catch (SQLException e){
  1374. e.printStackTrace();
  1375. }
  1376. finally {
  1377. //закрываем подключение если непустое
  1378. try {
  1379. if (stmt != null)
  1380. stmt.close();
  1381. }catch (SQLException se){}
  1382. try {
  1383. if (rs != null)
  1384. rs.close();
  1385. }catch (SQLException se){}
  1386. }
  1387.  
  1388. return resultQuery;
  1389. }
  1390.  
  1391.  
  1392. //имя колонки id
  1393. private static String nameIdColl(String tableName){
  1394.  
  1395. String nameCollId = "";
  1396.  
  1397. try{
  1398.  
  1399. stmt = con.createStatement();
  1400.  
  1401. ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
  1402.  
  1403. nameCollId = String.valueOf(rs.getMetaData().getColumnName(1));
  1404.  
  1405. }
  1406. catch (SQLException e){
  1407. e.printStackTrace();
  1408. }
  1409. finally {
  1410. //закрываем подключение если непустое
  1411. try {
  1412. if (stmt != null)
  1413. stmt.close();
  1414. }catch (SQLException se){}
  1415. try {
  1416. if (rs != null)
  1417. rs.close();
  1418. }catch (SQLException se){}
  1419. }
  1420.  
  1421. return nameCollId;
  1422. }
  1423.  
  1424.  
  1425. // добавление нового пустого рядка вконце таблицы и заполнение нулевыми значениями
  1426. public static String gueryAddRow(String tableName ){
  1427. String lastIdValue = "";
  1428. try{
  1429.  
  1430. stmt = con.createStatement();
  1431.  
  1432. ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
  1433.  
  1434.  
  1435. // получения List-а с типами колонок (0-й элемент в List-е, это тип для первой колонки)
  1436. ArrayList<String> typeColumns = Query.queryGetTypesColumes(tableName);
  1437.  
  1438.  
  1439. // получение имени последнего значениея в колонке ID // имя колонки ID
  1440. // lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
  1441.  
  1442. // создания пустого рядка для MySqL
  1443. if(ModalWorkTable.getNameSql().contains("MySqL")){
  1444.  
  1445.  
  1446.  
  1447. //(для создания новой строки определяем тип новой колонки) если первая колонка типа VARCHAR или TEXT тогда ставим для колоки значение NULL
  1448. if ( typeColumns.get(0).trim().toUpperCase().contains("VARCHAR") || typeColumns.get(0).trim().toUpperCase().contains("TEXT") ){
  1449.  
  1450. // создание пустой строки в SQl базе
  1451. Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2).toUpperCase()+")" + "VALUES" + "('NULL')");
  1452.  
  1453. }// если первая колонка типа INT тогда ставим для колоки значение 0
  1454. else if ( typeColumns.get(0).trim().toUpperCase().contains("INT") ){
  1455. // создание пустой строки в SQl базе
  1456. Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2)+")" + "VALUES" + "('0')");
  1457. }
  1458.  
  1459. // получение имени последнего значениея в колонке ID // имя колонки ID
  1460. lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
  1461.  
  1462. ///////////////// заполнение пустой строки с listValuesRows(значения для ячеек Row)
  1463. for (int i = 0, g = 0; i < rs.getMetaData().getColumnCount()-1; i++) {
  1464. g = i + 2;
  1465. // если колонка типа "INT" заполняем ее значение "0"-м
  1466. if (typeColumns.get(i).trim().toUpperCase().contains("INT")){
  1467. // колонки таблицы // значение для ячейки row
  1468. Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " ='0'" +
  1469. // имя id-колонки //значение последнего номера id
  1470. " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
  1471. // если колонка типа "VARCHAR" заполняем ее значение " "
  1472. }else if (typeColumns.get(i).trim().toUpperCase().contains("VARCHAR") ) {
  1473. // колонки таблицы //пустое '' значение для ячейки row
  1474. Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " =''" +
  1475. // имя id-колонки //значение последнего номера id
  1476. " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
  1477. }
  1478. }
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484. // создания пустого рядка для PostgreSqL, SQLite
  1485. }else if (ModalWorkTable.getNameSql().contains("PostgreSqL") || ModalWorkTable.getNameSql().contains("SQLite")){
  1486.  
  1487. // если первая колонка содержит CHAR, TEXT и id колонка не содержит последнего номера(пуста) - создается пустая колонка(пустая строка)
  1488. if ( typeColumns.get(0).trim().toUpperCase().contains("CHAR") || typeColumns.get(0).trim().toUpperCase().contains("TEXT") /* && lastIdValue.isEmpty() */){
  1489.  
  1490. // создание пустой строки внизу непустой таблицы PostGreSQl
  1491. Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim()+"\""+")" + " VALUES " + "('NULL')");
  1492.  
  1493. // запрос по созданию пустой строки в пустой таблице PostGreSQl
  1494. // Query.gueryEditTable("INSERT INTO " +tableName+ " ("+rs.getMetaData().getColumnName(2).trim().toUpperCase()+")" + "VALUES" + "('NULL')");
  1495.  
  1496. // если первая колонка содержит INT - создается пустая колонка(пустая строка)
  1497. }else if (typeColumns.get(0).trim().toUpperCase().contains("INT") ){
  1498. // создание пустой строки внизу непустой таблицы PostGreSQl
  1499. Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim()+"\""+")" + " VALUES " + "('0')");
  1500. }
  1501.  
  1502.  
  1503. //else if (typeColumns.get(0).trim().toUpperCase().contains("CHAR") && !(lastIdValue.isEmpty()) ){
  1504. // создание пустой строки внизу непустой таблицы PostGreSQl
  1505. // Query.gueryEditTable("INSERT INTO " +tableName+ " ("+"\""+rs.getMetaData().getColumnName(2).trim().toUpperCase()+"\""+")" + " VALUES " + "('NULL')");
  1506. // }
  1507.  
  1508. // получение имени последнего значениея в колонке ID // имя колонки ID
  1509. lastIdValue = Query.nameLastInIdColl(tableName, String.valueOf(rs.getMetaData().getColumnName(1)));
  1510.  
  1511. ///////////////// заполнение пустой строки с listValuesRows(значения для ячеек Row)
  1512. for (int i = 0, g = 0; i < rs.getMetaData().getColumnCount()-1; i++) {
  1513. g = i + 2;
  1514. // если колонка типа "INT" заполняем ее значение "0"-м
  1515. if (typeColumns.get(i).trim().toUpperCase().contains("INT")){
  1516. // колонки таблицы // значение для ячейки row, Имя колонки
  1517. Query.gueryEditTable("UPDATE " + tableName + " SET " + "\"" +rs.getMetaData().getColumnName(g)+ "\"" + " ='0'" +
  1518. // имя id-колонки //значение последнего номера id
  1519. " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
  1520.  
  1521. // если колонка типа "CHAR" заполняем ее значение " " для postgreSql тип CHAR
  1522. }else if ( typeColumns.get(i).trim().toUpperCase().contains("CHAR") || typeColumns.get(i).trim().toUpperCase().contains("TEXT")) {
  1523. // колонки таблицы имя колонки //пустое '' значение для ячейки row
  1524. Query.gueryEditTable("UPDATE " + tableName + " SET " +"\"" +rs.getMetaData().getColumnName(g) +"\"" + " =' '" +
  1525. // имя id-колонки //значение последнего номера id
  1526. " WHERE " + rs.getMetaData().getColumnName(1) + " ='"+lastIdValue+"'");
  1527. }
  1528. }
  1529.  
  1530.  
  1531. lastIdValue = "";
  1532. }
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539. // заполнение пустой строки с listValuesRows(значения для ячеек Row)
  1540. /* for (int i = 0, g = 0; i < listValuesRows.size(); i++){
  1541. g = i + 2;
  1542. // колонки таблицы // значение для ячейки row
  1543. Query.gueryEditTable("UPDATE " + tableName + " SET " + rs.getMetaData().getColumnName(g) + " ='"+listValuesRows.get(i)+"'" +
  1544. // имя id-колонки //значение последнего номера id
  1545. " WHERE " + rs.getMetaData().getColumnName(1) + " ="+"'"+lastIdValue+"'");
  1546. }
  1547. */
  1548.  
  1549. // к-во строк в колонке
  1550. // rs.getMetaData().getColumnName(1).length();
  1551. // количество столбцов
  1552. // rs.getMetaData().getColumnCount();
  1553. // имя колонки по индексу
  1554. // count = rs.getMetaData().getCatalogName(1);
  1555.  
  1556. // int rowIndex = 0;
  1557. // count = rs.getMetaData().getColumnName(1);
  1558.  
  1559. // SQL-запрос на изменения значения ячейки таблицы
  1560. // stmt.executeUpdate(query);
  1561.  
  1562. // тип колонки
  1563. // lastIdValue = rs.getMetaData().getColumnTypeName(1);
  1564.  
  1565.  
  1566. } catch (SQLException e) {
  1567. e.printStackTrace();
  1568. }
  1569. finally {
  1570. //закрываем подключение если не пустое
  1571. try {
  1572. if (stmt != null){
  1573. stmt.close();
  1574. }
  1575.  
  1576. }catch (SQLException se){}
  1577. try {
  1578. if ( (rs != null )){
  1579. rs.close();
  1580. }
  1581.  
  1582. }catch (SQLException se){}
  1583. }
  1584.  
  1585. return "row "+lastIdValue+" added";
  1586. }
  1587.  
  1588.  
  1589.  
  1590.  
  1591. //делаем все столбцы таблицы редактируемыми
  1592. private static void todoEditebleColumns(){
  1593. for (int i = 1; i < arrayListTableColumn.size(); i++){
  1594. Query.arrayListTableColumn.get(i).setCellFactory(TextFieldTableCell.forTableColumn());
  1595. }
  1596. }
  1597.  
  1598.  
  1599. // создание arraylist-a с типамы колонок переданной таблицы
  1600. public static ArrayList<String> queryGetTypesColumes(String tableName){
  1601.  
  1602. ArrayList<String> arrayListTypes = new ArrayList<String>();
  1603.  
  1604. try{
  1605.  
  1606. stmt = con.createStatement();
  1607.  
  1608. ResultSet rs = stmt.executeQuery("SELECT * from " + tableName);
  1609. // начиная со второй колонки
  1610. for (int i = 2; i <= rs.getMetaData().getColumnCount(); i++){
  1611. //int g = i - 1;
  1612. arrayListTypes.add(rs.getMetaData().getColumnTypeName(i));
  1613. }
  1614.  
  1615. } catch (SQLException e) {
  1616. e.printStackTrace();
  1617. }
  1618. finally {
  1619. //закрываем подключение если не пустое
  1620. try {
  1621. if (stmt != null){
  1622. stmt.close();
  1623. }
  1624.  
  1625. }catch (SQLException se){}
  1626. try {
  1627. if ( (rs != null )){
  1628. rs.close();
  1629. }
  1630.  
  1631. }catch (SQLException se){}
  1632. }
  1633.  
  1634. return arrayListTypes;
  1635. }
  1636.  
  1637. }
  1638.  
  1639.  
  1640.  
  1641. package login;
  1642.  
  1643. import javafx.collections.FXCollections;
  1644. import javafx.collections.ObservableList;
  1645. import javafx.event.ActionEvent;
  1646. import javafx.event.EventHandler;
  1647. import javafx.scene.Group;
  1648. import javafx.scene.Scene;
  1649. import javafx.scene.control.*;
  1650. import javafx.scene.control.TableColumn;
  1651. import javafx.scene.control.cell.ComboBoxTableCell;
  1652. import javafx.scene.control.cell.TextFieldTableCell;
  1653. import javafx.scene.image.Image;
  1654. import javafx.scene.image.ImageView;
  1655. import javafx.scene.layout.HBox;
  1656. import javafx.scene.layout.VBox;
  1657. import javafx.stage.Modality;
  1658. import javafx.stage.Stage;
  1659.  
  1660. import java.util.ArrayList;
  1661.  
  1662.  
  1663. /**
  1664. * Created by Admin on 27.12.2016.
  1665. */
  1666. //
  1667. public class CreateTable {
  1668.  
  1669. // переменная для определеня значка базы в окне класа CreateTable
  1670. private static String nameSql = "";
  1671.  
  1672. //массив заставок для планшета
  1673. private static ArrayList<Image> arrayListImage = new ArrayList<Image>();
  1674.  
  1675. // счетчик для смены обоев в планшете
  1676. // 0-я обоина установлена при запуске, по этому счетчик с 1
  1677. private static int count = 1;
  1678. // таблица
  1679. private static TableView tableView = new TableView();
  1680.  
  1681. // к-тво столбцов в таблице(находится в планшете)
  1682. private static TextField tfCountColuns = new TextField();
  1683.  
  1684. // поле для имени таблицы(находится в планшете)
  1685. private static TextField tfNameTable = new TextField();
  1686.  
  1687. // Label-ы в планшете
  1688. private static Label labelTitleDisplay = new Label("Creating new table");
  1689. private static Label labelInfo = new Label("Text Info");
  1690.  
  1691. private static Button btnOk = new Button();
  1692. // Button btnCancel = new Button();
  1693. private static Button btnRefresh = new Button();
  1694. // Button btnOther = new Button();
  1695. private static Button btnAdd = new Button();
  1696.  
  1697. // колонка с TextField
  1698. private static TableColumn colFieldTf = new TableColumn("Field");
  1699. // колонка с ComboBox
  1700. private static TableColumn colTypeCb = new TableColumn("Type");
  1701. // колонка с TextField
  1702. private static TableColumn colLengthValuesTf = new TableColumn("Length/Values");
  1703. // список из 3-х колонок
  1704. private static ArrayList<TableColumn> columnArrayList = new ArrayList<>();
  1705. // список для колонки colFieldTf
  1706. private static ArrayList<Object> listForColFieldTf = new ArrayList<>();
  1707. // список для колонки colTypeCb
  1708. private static ArrayList<Object> listForColTypeCb = new ArrayList<>();
  1709. // список для колонки colLengthValuesTf
  1710. private static ArrayList<Object> listForColLengthValuesTf = new ArrayList<>();
  1711.  
  1712.  
  1713.  
  1714. // создание новой таблицы
  1715. public static void createNewTbl(){
  1716.  
  1717. // размер(Height) таблицы
  1718. tableView.setMaxHeight(300);
  1719.  
  1720.  
  1721.  
  1722. // создание кнопок с изображением
  1723. Image imageIconOk = new Image("login/CuteBallGo.png");
  1724. // Image imageIconCancel = new Image("login/CuteBallStop.png");
  1725. Image imageIconRefresh = new Image("login/CuteBallReboot.png");
  1726. // Image imageIconOther = new Image("login/CuteBallGames.png");
  1727. Image imageAdd = new Image("login/add.png");
  1728.  
  1729. // силь для Label,Button
  1730. styleLabelButton();
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736. // добавление иконки в кнопку
  1737. btnOk.graphicProperty().setValue(new ImageView(imageIconOk));
  1738. // btnCancel.graphicProperty().setValue(new ImageView(imageIconCancel));
  1739. btnRefresh.graphicProperty().setValue(new ImageView(imageIconRefresh));
  1740. // btnOther.graphicProperty().setValue(new ImageView(imageIconOther));
  1741. btnAdd.graphicProperty().setValue(new ImageView(imageAdd));
  1742.  
  1743.  
  1744. // инициализируем переменную именем текущей базы
  1745. CreateTable.nameSql = ModalWorkTable.getNameSql();
  1746.  
  1747. Stage stage = new Stage();
  1748.  
  1749. // создаем модальное окно
  1750. stage.initModality(Modality.APPLICATION_MODAL);
  1751.  
  1752. VBox vBoxSqlIcon = new VBox();
  1753. // VBox для tableView
  1754. VBox tableBox = new VBox();
  1755. // для картинки планшета
  1756. VBox vBoxDisplay = new VBox();
  1757. // для фоновых картинок планшета
  1758. VBox vBoxFontDisplay = new VBox();
  1759. // точка с которой начинает отображаться TableView
  1760. tableBox.setLayoutX(210);
  1761. tableBox.setLayoutY(45);
  1762. // VBox для размищения таблицы
  1763. tableBox.getChildren().add(tableView);
  1764.  
  1765.  
  1766. // размещение Lable-а с текстом "Creating tables:" в дисплее планшета
  1767. VBox vBoxTitleDisplayLb = new VBox();
  1768.  
  1769.  
  1770. // VBox для LabelInfo
  1771. VBox vBoxLabelInfo = new VBox();
  1772.  
  1773.  
  1774.  
  1775.  
  1776. vBoxTitleDisplayLb.getChildren().add(labelTitleDisplay);
  1777. vBoxTitleDisplayLb.setLayoutX(300);
  1778. vBoxTitleDisplayLb.setLayoutY(390);
  1779.  
  1780. // labelInfo внутри планшета
  1781. vBoxLabelInfo.getChildren().add(labelInfo);
  1782. vBoxLabelInfo.setLayoutX(270);
  1783. vBoxLabelInfo.setLayoutY(460);
  1784.  
  1785.  
  1786.  
  1787. // подсказка в TextField
  1788. tfNameTable.setPromptText("Enter table name");
  1789. // длина TextField
  1790. tfNameTable.setMaxWidth(105);
  1791.  
  1792.  
  1793. // подсказка в TextField
  1794. tfCountColuns.setPromptText("number of columns");
  1795. // длина TextField
  1796. tfCountColuns.setMaxWidth(120);
  1797.  
  1798. // Label, TextField внутри планшета
  1799. HBox hBoxValInDisplay = new HBox();
  1800.  
  1801.  
  1802. hBoxValInDisplay.setSpacing(5);
  1803. // hBoxValInDisplay размещени TextFiel и Label на дисплее планшета
  1804. hBoxValInDisplay.getChildren().addAll(tfNameTable, tfCountColuns);
  1805. // позиционирование textField-в в экране планшета
  1806. hBoxValInDisplay.setLayoutX(263);
  1807. hBoxValInDisplay.setLayoutY(420);
  1808.  
  1809. VBox vBoxbtnOk = new VBox();
  1810. //пробел между елементами
  1811. vBoxbtnOk.getChildren().addAll(btnOk);
  1812.  
  1813. VBox vBoxbtnRefresh = new VBox();
  1814. vBoxbtnRefresh.getChildren().add(btnRefresh);
  1815. // добавление кнопки в VBox
  1816. VBox vBoxAdd = new VBox();
  1817. vBoxAdd.getChildren().add(btnAdd);
  1818.  
  1819. // проверка для вывода значка базы в hBox
  1820. if (nameSql.equals("MySqL") ){
  1821. vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("MySqL"));
  1822. }
  1823. else if (nameSql.equals("PostgreSqL")){
  1824. vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("PostgreSqL") );
  1825. }
  1826. else if (nameSql.equals("SQLite")){
  1827. vBoxSqlIcon.getChildren().add(new Main().sizeLabelPicture("SQLite"));
  1828. }
  1829.  
  1830. // размещение значка SQL в VBox на scene
  1831. vBoxSqlIcon.setLayoutX(683);
  1832. vBoxSqlIcon.setLayoutY(407);
  1833.  
  1834. // розмищение кнопки Add для добавления колонок в SQL на scene
  1835. vBoxAdd.setLayoutX(600);
  1836. vBoxAdd.setLayoutY(370);
  1837.  
  1838. // размещение дисплея на scene
  1839. vBoxDisplay.setLayoutX(170);
  1840. vBoxDisplay.setLayoutY(370);
  1841.  
  1842. //размищение кнопок на scene
  1843. vBoxbtnOk.setLayoutX(280);
  1844. vBoxbtnOk.setLayoutY(500);
  1845. vBoxbtnRefresh.setLayoutX(435);
  1846. vBoxbtnRefresh.setLayoutY(500);
  1847.  
  1848. //размещение фона в дисплее
  1849. vBoxFontDisplay.setLayoutX(253);
  1850. vBoxFontDisplay.setLayoutY(390);
  1851.  
  1852. Group root = new Group();
  1853.  
  1854. stage.setTitle("Создание таблицы");
  1855.  
  1856. // задный фон
  1857. Image image = new Image("login/look8.png");
  1858. ImageView backgroundImage = new ImageView(image);
  1859.  
  1860. //картинка дисплея(планшета)
  1861. Image imageDisplay = new Image("login/display.png");
  1862. vBoxDisplay.getChildren().add(new ImageView(imageDisplay));
  1863.  
  1864. //массив заставок для планшета
  1865. arrayListImage.addAll( FXCollections.observableArrayList(new Image("login/fontDisplay8.png"), new Image("login/fontDisplay2.png"),
  1866. new Image("login/fontDisplay3.png"), new Image("login/fontDisplay4.png"),
  1867. new Image("login/fontDisplay5.png"), new Image("login/fontDisplay6.png"),
  1868. new Image("login/fontDisplay7.png"), new Image("login/fontDisplay1.png")));
  1869.  
  1870.  
  1871.  
  1872. // заставка на планшет
  1873. vBoxFontDisplay.getChildren().add(new ImageView(arrayListImage.get(0)));
  1874.  
  1875. // обновление фона планшета по нажатию кнопки
  1876. btnRefresh.setOnAction(new EventHandler<ActionEvent>() {
  1877. @Override
  1878. public void handle(ActionEvent event) {
  1879. // очищаем vBoxFontDisplay от значенией
  1880. vBoxFontDisplay.getChildren().clear(); // номер обоины в arrayList
  1881. vBoxFontDisplay.getChildren().add( new ImageView(arrayListImage.get(count)) );
  1882. // если счетчик ровняется длине массива-1(с обоинами для планшета) тогда обнуляем счетчик
  1883. if ( count == (arrayListImage.size()-1) )
  1884. count = 0;
  1885. else// иначе инкремент
  1886. count++;
  1887.  
  1888.  
  1889. }
  1890. });
  1891.  
  1892. // кнопка для приема значений с TextField-в планшета
  1893. btnOk.setOnAction(new EventHandler<ActionEvent>() {
  1894. @Override
  1895. public void handle(ActionEvent event) {
  1896. //проверка TextFieldes в планшете
  1897. if (checkTfInDispaly())
  1898. createTableView();
  1899.  
  1900. }
  1901. });
  1902.  
  1903. // кнопка по созданию таблицы
  1904. btnAdd.setOnAction(new EventHandler<ActionEvent>() {
  1905. @Override
  1906. public void handle(ActionEvent event) {
  1907.  
  1908. // запрос на добавление таблицы в SQL, имя таблицы, созданный запрос
  1909. labelInfo.setText(Query.createTable(tfNameTable.getText(), createLineQuery()));
  1910.  
  1911. // очистка List-ов колонок от значенией
  1912. listForColFieldTf.clear();
  1913. listForColTypeCb.clear();
  1914. listForColLengthValuesTf.clear();
  1915. // активные btnOk и tfNameTable, tfCountColuns
  1916. onOffTextFieldButton(false);
  1917.  
  1918. // обновление списка таблиц в ComboBox cbAllTablesOfDataBase
  1919. // после создания новой таблицы
  1920. ModalWorkTable.addValuesNameTablesInComboBox();
  1921.  
  1922. // ArrayList<String> testList = new ArrayList<String>();
  1923. // testList = Query.queryGetTypesColumes("tbl1");
  1924. // labelInfo.setText("SIZEarr".concat(String.valueOf(testList.size()) )+ " : " + testList.get(0).concat(testList.get(1)).concat(testList.get(2)) );
  1925.  
  1926. }
  1927. });
  1928.  
  1929.  
  1930. // добавление всех Box-в в Group
  1931. root.getChildren().addAll(backgroundImage, vBoxSqlIcon, vBoxAdd ,tableBox, vBoxDisplay,
  1932. vBoxFontDisplay, hBoxValInDisplay, vBoxbtnOk, vBoxbtnRefresh, vBoxTitleDisplayLb, vBoxLabelInfo);
  1933. // шырина высота
  1934. Scene scene = new Scene(root, 762, 570);
  1935.  
  1936. stage.setScene(scene);
  1937.  
  1938. // отключем кнопку маximyze и фиксируем окно
  1939. stage.setResizable(false);
  1940.  
  1941. // стиль который не работает :(
  1942. // CreateTable.class.getResource("/login/WorkTable.css").toExternalForm();
  1943.  
  1944. stage.show();
  1945. }
  1946.  
  1947.  
  1948. // стили для Label и Button
  1949. private static void styleLabelButton(){
  1950. btnOk.setStyle(
  1951. "-fx-background-radius: 5em; " +
  1952. "-fx-min-width: 40px; " +
  1953. "-fx-min-height: 40px; " +
  1954. "-fx-max-width: 40px; " +
  1955. "-fx-max-height: 40px;"
  1956. );
  1957.  
  1958. btnAdd.setStyle(
  1959. "-fx-background-radius: 5em; " +
  1960. "-fx-min-width: 75px; " +
  1961. "-fx-min-height: 75px; " +
  1962. "-fx-max-width: 75px; " +
  1963. "-fx-max-height: 75px;"
  1964. );
  1965.  
  1966.  
  1967. btnRefresh.setStyle(
  1968. "-fx-background-radius: 5em; " +
  1969. "-fx-min-width: 40px; " +
  1970. "-fx-min-height: 40px; " +
  1971. "-fx-max-width: 40px; " +
  1972. "-fx-max-height: 40px;"
  1973. );
  1974.  
  1975. //стиль labelTitleDisplay
  1976. labelTitleDisplay.setStyle("-fx-font-size: 18px;"+
  1977. "-fx-fill: FIREBRICK;"+
  1978. "-fx-font-weight: bold;"+
  1979. "-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );" );
  1980.  
  1981.  
  1982. //стиль labelInfo
  1983. labelInfo.setStyle("-fx-font-size: 16px;"+
  1984. "-fx-fill: #847de7;"+
  1985. "-fx-font-weight: bold;"+
  1986. "-fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 );" );
  1987.  
  1988.  
  1989. }
  1990.  
  1991.  
  1992. // создание запроса для SQl базы из колонок (Имя колонки, тип колонки(INT, VARCHAR, TEXT), длина значений в колонке)
  1993. // считка данных с List-ов колонок для создания запроса в SQL-базу
  1994. private static String createLineQuery(){
  1995.  
  1996. String query="";
  1997.  
  1998. // если выбрана Mysql типы (INT, VARCHAR, TEXT)
  1999. if (ModalWorkTable.getNameSql().contains("MySqL")){
  2000.  
  2001. /////////////// работает для VARCHAR и INT(Mysql)
  2002. // проверка не пустые ли ArrayList-ы,длина массивов совпадает ,создание запроса для создания таблицы
  2003. if ((listForColFieldTf.size() > 0 && listForColTypeCb.size() > 0 && listForColLengthValuesTf.size() > 0) &&
  2004. listForColFieldTf.size() == listForColTypeCb.size() &&
  2005. listForColTypeCb.size() == listForColLengthValuesTf.size()){
  2006.  
  2007. // создание запроса для SQL на создание таблицы
  2008. for (int i = 0; i < listForColFieldTf.size(); i++){
  2009.  
  2010. // получение значений с 2-х List-ов(listForColFieldTf, listForColTypeCb)
  2011. // если в listForColTypeCb(типы колонок) есть значения "TEXT", "INT", тогда формаруется запрос без указания длины для типа("TEXT", "INT")
  2012. if (listForColTypeCb.get(i).equals("TEXT") ){
  2013.  
  2014. // если не последняя строка тогда ставится запятая вконце строки
  2015. if (i != listForColFieldTf.size()-1)
  2016. // list с именами колонок, list с именами типов колонок
  2017. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+",";
  2018.  
  2019. else// если последняя итерация тогда не ставим "," вконце
  2020. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"";
  2021.  
  2022.  
  2023. // получение значений с 3-х List-ов(listForColFieldTf, listForColTypeCb, listForColLengthValuesTf)
  2024. }else {
  2025.  
  2026. // если не последняя строка тогда ставится запятая вконце строки
  2027. if (i != listForColFieldTf.size()-1)
  2028. // list с именами колонок, list с именами типов колонок, list размерами(числа) колонок
  2029. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+"),";
  2030.  
  2031. else// если последняя итерация тогда не ставим "," вконце
  2032. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+")";
  2033.  
  2034. }
  2035.  
  2036.  
  2037.  
  2038.  
  2039. }
  2040. }
  2041.  
  2042. }// если выбрана PostgreSqL типы (INT, VARCHAR, TEXT)
  2043. else if ( ModalWorkTable.getNameSql().contains("PostgreSqL") || ModalWorkTable.getNameSql().contains("SQLite") ){
  2044.  
  2045. /////////////// работает для VARCHAR и (INT без длины)(PostgreSqL)
  2046. // проверка не пустые ли ArrayList-ы,длина массивов совпадает ,создание запроса для создания таблицы
  2047. if ((listForColFieldTf.size() > 0 && listForColTypeCb.size() > 0 && listForColLengthValuesTf.size() > 0) &&
  2048. listForColFieldTf.size() == listForColTypeCb.size() &&
  2049. listForColTypeCb.size() == listForColLengthValuesTf.size()){
  2050.  
  2051. // создание запроса для SQL на создание таблицы
  2052. for (int i = 0; i < listForColFieldTf.size(); i++){
  2053.  
  2054. // если в listForColTypeCb(типы колонок) есть значения "TEXT", "INT", тогда формаруется запрос без указания длины для типа("TEXT", "INT")
  2055. if (listForColTypeCb.get(i).equals("TEXT") || listForColTypeCb.get(i).equals("INT") ){
  2056.  
  2057. // если не последняя строка тогда ставится запятая вконце строки, запрос без указания длины для типа("TEXT", "INT")
  2058. if (i != listForColFieldTf.size()-1)
  2059. // list с именами колонок, list с именами типов колонок
  2060. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+",";
  2061.  
  2062. else// если последняя итерация тогда не ставим "," вконце
  2063. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"";
  2064.  
  2065.  
  2066.  
  2067. }else {
  2068.  
  2069. // если не последняя строка тогда ставится запятая вконце строки
  2070. if (i != listForColFieldTf.size()-1)
  2071. // list с именами колонок, list с именами типов колонок, list размерами(числа) колонок
  2072. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+"),";
  2073.  
  2074. else// если последняя итерация тогда не ставим "," вконце
  2075. query += listForColFieldTf.get(i)+" "+ listForColTypeCb.get(i)+"("+listForColLengthValuesTf.get(i)+")";
  2076.  
  2077. }
  2078.  
  2079.  
  2080. }
  2081. }
  2082.  
  2083.  
  2084.  
  2085. }
  2086.  
  2087.  
  2088.  
  2089.  
  2090. return query;
  2091. }
  2092.  
  2093.  
  2094.  
  2095. // активные - неактивные btnOk и tfNameTable, tfCountColuns
  2096. private static void onOffTextFieldButton(Boolean flag){
  2097. // активные - неактивные button
  2098. btnOk.setDisable(flag);
  2099. // активные - неактивные TextField-ы
  2100. tfNameTable.setDisable(flag);
  2101. tfCountColuns.setDisable(flag);
  2102. }
  2103.  
  2104.  
  2105. // проверка TextFieldes в планшете
  2106. private static boolean checkTfInDispaly(){
  2107. // флаг для роверки заполненых полей TextField
  2108. boolean flag = false;
  2109.  
  2110. if (tfNameTable.getText().isEmpty() && tfCountColuns.getText().isEmpty()){
  2111. labelInfo.setText("Enter name and value table");
  2112. // края TextField красные красные
  2113. colorTextFields(false, false);
  2114.  
  2115. }
  2116. else if (tfNameTable.getText().isEmpty()){
  2117. labelInfo.setText("Enter name of table");
  2118. // края TextField красные зеленые
  2119. colorTextFields(false, true);
  2120. }
  2121. else if (tfCountColuns.getText().isEmpty()){
  2122. labelInfo.setText("Enter count of table");
  2123. // края TextField зеленые красные
  2124. colorTextFields(true, false);
  2125.  
  2126. }else {
  2127. labelInfo.setText("Values accepted");
  2128. // края TextField зеленые
  2129. colorTextFields(true, true);
  2130. flag = true;
  2131. // неактивные btnOk и tfNameTable, tfCountColuns
  2132. onOffTextFieldButton(flag);
  2133. //видимая таблица
  2134. tableView.setVisible(true);
  2135.  
  2136. }
  2137.  
  2138. return flag;
  2139. }
  2140.  
  2141. // смена цвета border вокруг textField
  2142. private static void colorTextFields(boolean tfName, boolean tfCount){
  2143.  
  2144. // края TextField красные красные
  2145. if (tfName == false && tfCount == false){
  2146. // шырина линиивокруг элемент // округлость по краям
  2147. tfNameTable.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2148. tfCountColuns.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2149. }// края TextField красные зеленые
  2150. else if (tfName == false && tfCount == true){
  2151. tfNameTable.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2152. tfCountColuns.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2153. }// края TextField зеленые красные
  2154. else if (tfName == true && tfCount == false){
  2155. tfNameTable.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2156. tfCountColuns.setStyle("-fx-border-color: red;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2157. }// края TextField зеленые
  2158. else if (tfName == true && tfCount == true){
  2159. tfNameTable.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2160. tfCountColuns.setStyle("-fx-border-color: greenyellow;"+"-fx-border-width: 2px;"+"-fx-border-radius: 3px;");
  2161. }
  2162. }
  2163.  
  2164.  
  2165.  
  2166. // заполнение tableView
  2167. private static TableView createTableView(){
  2168.  
  2169. tableView.getSelectionModel().clearSelection();
  2170. tableView.getItems().clear();
  2171. tableView.getColumns().clear();
  2172. columnArrayList.clear();
  2173.  
  2174.  
  2175. // tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
  2176. // таблица доступна для редактирования
  2177. tableView.setEditable(true);
  2178.  
  2179.  
  2180. // empty row для новой строки
  2181. ObservableList<ObservableList> data = FXCollections.observableArrayList();
  2182.  
  2183. //Iterate Row
  2184. ObservableList<ComboBox> row = FXCollections.observableArrayList();
  2185. // значения для ComboBox
  2186. ObservableList<String> valuesInCb = FXCollections.observableArrayList("INT", "VARCHAR", "TEXT");
  2187.  
  2188.  
  2189. // шырина колонки
  2190. colFieldTf.setMinWidth(100);
  2191. colTypeCb.setMinWidth(130);
  2192. colLengthValuesTf.setMinWidth(100);
  2193.  
  2194.  
  2195. // добавление в колонку "colField" TextField-а и доступна для редактирования
  2196. colFieldTf.setCellFactory(TextFieldTableCell.forTableColumn());
  2197. // добавление в колонку ("colField" tableView) значений ObservableList в combobox-ячейку
  2198. colTypeCb.setCellFactory(ComboBoxTableCell.forTableColumn(valuesInCb ));
  2199. // добавление в колонку "colLengthValues" TextField-а и доступна для редактирования
  2200. colLengthValuesTf.setCellFactory(TextFieldTableCell.forTableColumn());
  2201.  
  2202. // заполнение columnArrayList колонками
  2203. columnArrayList.addAll(FXCollections.observableArrayList( colFieldTf, colTypeCb, colLengthValuesTf));
  2204.  
  2205. // добавление колонок для TableView
  2206. // tableView.getColumns().addAll(colFieldTf, colTypeCb , colLengthValuesTf );
  2207. // добавление columnArrayList колонок для TableView
  2208. tableView.getColumns().addAll(columnArrayList);
  2209.  
  2210.  
  2211. // слушатель на все колонки
  2212. for (int i = 0; i < columnArrayList.size(); i++){
  2213. columnArrayList.get(i).setOnEditCommit(new EventHandler<TableColumn.CellEditEvent>() {
  2214. @Override
  2215. public void handle(TableColumn.CellEditEvent event) {
  2216.  
  2217. // выбраный рядок
  2218. int numRow = Integer.valueOf(event.getTablePosition().getRow());
  2219.  
  2220. // заполнение значениями listForColFieldTf первой колонки
  2221. if ( Integer.valueOf(event.getTablePosition().getColumn()) == 0 ){
  2222.  
  2223.  
  2224. // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
  2225. // или размер List-а пустой
  2226. if( (listForColFieldTf.size()-1) < numRow || listForColFieldTf.size() == 0)
  2227. listForColFieldTf.add(numRow, event.getNewValue() );
  2228. //замена значениея в List если размер list-а >= выбранному рядку в taleView,
  2229. // тогда в List-е и размер list-а != 0
  2230. else if ( (listForColFieldTf.size()-1) >= numRow && listForColFieldTf.size() != 0 )
  2231. listForColFieldTf.set(numRow, event.getNewValue() );
  2232.  
  2233. }
  2234.  
  2235. // заполнение значениями listForColTypeCb второй колонки(с Типами данных INT, VARCHAR, TEXT)
  2236. else if ( Integer.valueOf(event.getTablePosition().getColumn()) == 1 ){
  2237.  
  2238. // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
  2239. // или размер List-а пустой
  2240. if( (listForColTypeCb.size()-1) < numRow || listForColTypeCb.size() == 0){
  2241.  
  2242. // если если выбрано во второй колонке "TEXT",
  2243. // добавляется пустое значение в
  2244. // listForColLengthValuesTf(длина значений) для Mysql, PostgreSql // для PostgreSql если если выбрано во второй колонке "INT", добавляется пустое значение " " в listForColLengthValuesTf(длина значений)
  2245. if (event.getNewValue().equals("TEXT") || (event.getNewValue().equals("INT") && ModalWorkTable.getNameSql().contains("PostgreSqL")) ){
  2246.  
  2247. // добавление Типа(TEXT) или (INT) в listForColTypeCb по инрексу текушего рядка "numRow"
  2248. listForColTypeCb.add(numRow, event.getNewValue() );
  2249.  
  2250. // добавление пустого значения "" в listForColLengthValuesTf, так как для "TEXT" или "INT" postgresql не указывается длина
  2251. listForColLengthValuesTf.add(numRow, " ");
  2252.  
  2253. } // добавляется значение в listForColTypeCb введеное в колонку для Mysql и PostgreSql
  2254. else {
  2255. listForColTypeCb.add(numRow, event.getNewValue() );
  2256. }
  2257.  
  2258. }
  2259. //замена значениея в List если размер list-а >= выбранному рядку в taleView,
  2260. // тогда в List-е и размер list-а != 0
  2261. else if ( (listForColTypeCb.size()-1) >= numRow && listForColTypeCb.size() != 0 ){
  2262. listForColTypeCb.set(numRow, event.getNewValue() );
  2263. }
  2264.  
  2265. }
  2266.  
  2267. // заполнение значениями listForColLengthValuesTf третей колонки
  2268. else if ( Integer.valueOf(event.getTablePosition().getColumn()) == 2 ){
  2269.  
  2270.  
  2271. // добавление значения в List если индекс выбранного рядка больше размера (List-а-1)
  2272. // или размер List-а пустой
  2273. if( (listForColLengthValuesTf.size()-1) < numRow || listForColLengthValuesTf.size() == 0)
  2274.  
  2275.  
  2276. listForColLengthValuesTf.add(numRow, event.getNewValue() );
  2277. //замена значениея в List если размер list-а >= выбранному рядку в taleView,
  2278. // тогда в List-е и размер list-а != 0
  2279. else if ( (listForColLengthValuesTf.size()-1) >= numRow && listForColLengthValuesTf.size() != 0 )
  2280. listForColLengthValuesTf.set(numRow, event.getNewValue() );
  2281. }
  2282.  
  2283. }
  2284. });
  2285. }
  2286.  
  2287.  
  2288.  
  2289. // добавление новой строки для редактирования в ObservableList "data"
  2290. for (int f = 0; f < Integer.parseInt(tfCountColuns.getText()); f++ ){
  2291.  
  2292. data.add(row);
  2293. }
  2294.  
  2295. // создаем таблицу с колонками и строками
  2296. tableView.setItems(data);
  2297.  
  2298. // tableView.setBlendMode(BlendMode.SOFT_LIGHT);
  2299.  
  2300. // MenuButton с боку tableView
  2301. // tableView.setTableMenuButtonVisible(true);
  2302.  
  2303.  
  2304. return tableView;
  2305. }
  2306.  
  2307. // очистка всех элементов
  2308. public static void clearAll(){
  2309. tableView.getSelectionModel().clearSelection();
  2310. tableView.getItems().clear();
  2311. tableView.getColumns().clear();
  2312. tfCountColuns.clear();
  2313. tfNameTable.clear();
  2314. tfNameTable.setStyle("");
  2315. tfCountColuns.setStyle("");
  2316. labelInfo.setText("");
  2317. labelTitleDisplay.setText("");
  2318. // отключение видимости таблицы
  2319. tableView.setVisible(false);
  2320. // активные Button и TextField
  2321. onOffTextFieldButton(false);
  2322. // очистка columnArrayList списка колонок
  2323. columnArrayList.clear();
  2324. // очистка arrayListImage списка с обоями для планшета
  2325. arrayListImage.clear();
  2326.  
  2327. }
  2328.  
  2329. }
  2330.  
  2331.  
  2332. package login;
  2333.  
  2334. import java.sql.Connection;
  2335. import java.sql.DriverManager;
  2336. import java.sql.SQLException;
  2337. import java.sql.Statement;
  2338.  
  2339. /**
  2340. * Created by Admin on 02.12.2016.
  2341. */
  2342. public class ConnectDB {
  2343.  
  2344.  
  2345. private static Connection connection;
  2346.  
  2347.  
  2348. private static boolean flag;
  2349. private String message = "";
  2350.  
  2351.  
  2352. public static Connection getConnection(){
  2353. return connection;
  2354. }
  2355.  
  2356. // set-р нужен чтоб установить null
  2357. public static void setConnection(Connection connection){
  2358. ConnectDB.connection = connection;
  2359. }
  2360.  
  2361. public String getMessage(){
  2362. return message;
  2363. }
  2364.  
  2365.  
  2366. // состояние подключения
  2367. public static boolean getFlag(){ return ConnectDB.flag; }
  2368.  
  2369. // flag устанавливается в false если с Main зашли удачно
  2370. public static void setFlag(boolean flag){
  2371. ConnectDB.flag = flag;
  2372. }
  2373.  
  2374. public void conDB(String URL, String USER, String PASS){
  2375.  
  2376.  
  2377.  
  2378. try {
  2379. if(URL.contains("sqlite")){
  2380. connection = DriverManager.getConnection(URL);
  2381. }
  2382. else {//остальные базы
  2383. connection = DriverManager.getConnection(URL, USER, PASS);
  2384. }
  2385.  
  2386.  
  2387. } catch (SQLException e) {
  2388. ConnectDB.flag = false;
  2389. // e.printStackTrace();
  2390. message = "Connection Failed";
  2391. }
  2392.  
  2393. if (connection != null) {
  2394. message = "Successfully Connected";
  2395. ConnectDB.flag = true;
  2396. } else {
  2397. message = "Connection Failed";
  2398. ConnectDB.flag = false;
  2399. }
  2400. }
  2401.  
  2402.  
  2403.  
  2404.  
  2405. }
  2406.  
  2407.  
  2408. package login;
  2409.  
  2410. import java.sql.Connection;
  2411. import java.sql.ResultSet;
  2412. import java.sql.SQLException;
  2413. import java.sql.Statement;
  2414.  
  2415. /**
  2416. * Created by Admin on 03.12.2016.
  2417. */
  2418. public class Disconnect {
  2419.  
  2420.  
  2421. private String message = "";
  2422.  
  2423. public String getMessage(){
  2424. return message;
  2425. }
  2426.  
  2427.  
  2428. public boolean disconMeth(Connection con){
  2429. //close connection ,stmt and resultset here
  2430. boolean flag = false;
  2431.  
  2432. if (con != null){
  2433. try {con.close(); } catch(SQLException se) { /*can't do anything */ }
  2434. flag = true;
  2435. message = "Disconnected";
  2436. }
  2437.  
  2438. // if (stmt != null){
  2439. // try { stmt.close(); } catch(SQLException se) { /*can't do anything */ }
  2440. // flag = true;
  2441. // }
  2442.  
  2443. // if (rs != null){
  2444. // try { rs.close(); } catch(SQLException se) { /*can't do anything */ }
  2445. // flag = true;
  2446. // }
  2447.  
  2448. return flag;
  2449. }
  2450.  
  2451. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement