Помощь с работой БД и Swing

453
03 февраля 2017, 04:19

Кто-то сможет объяснить, буду очень благодарен.

Интересует вопрос, как в "GUI Form" , считать значения с textField и занести в БД.

Вот мой код:

package diplom.First;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
;
/**
 * Created by Nika on 26.01.2017.
 */
public class BD  extends JFrame {
    private JPanel panel;
    private JButton button1;
    private JButton Button2;
    private JButton Button3;
    private JTextField textField1;
    private JTextField textField2;
    private JTextField textField3;
    private JButton Button4;
    public static Connection conn;
    public static Statement statmt;
    public static ResultSet resSet;
    public BD()   {
        setContentPane(panel);
        panel.setPreferredSize(new Dimension(1300,1300));
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    Conn();
                }
                catch (Exception u)
                {}
            }
        });
        Button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    CreateDB();
                }
                catch (Exception u)
                {
                    System.out.println (u);
                }
            }
        });
        Button3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    ReadDB();
                }
                catch (Exception u)
                {}
            }
        });
        Button4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String Name =  textField1.getText();
                int phone = Integer.parseInt(textField2.getText());
                int age = Integer.parseInt(textField3.getText());
                System.out.println(phone+""+age+""+Name);
            }
        });
    }
    // --------ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ--------
    public static void Conn() throws ClassNotFoundException, SQLException
    {
        conn = null;
        Class.forName("org.sqlite.JDBC");
        conn = DriverManager.getConnection("jdbc:sqlite:TEST1.s3db");
        System.out.println("База Подключена!");
    }
    // --------Создание таблицы--------
    public void CreateDB() throws ClassNotFoundException, SQLException
    {
        statmt = conn.createStatement();
        statmt.execute("CREATE TABLE if not exists 'users' ('id' INTEGER PRIMARY KEY AUTOINCREMENT, 'name' text, 'phone' INT, 'age' INT);");
        String name =  textField1.getText();
        int phone = Integer.parseInt(textField2.getText());
        int age = Integer.parseInt(textField3.getText());
        //statmt.execute("INSERT INTO 'users' ('name', 'phone','age') VALUES (textField1.getText(), Integer.parseInt(textField2.getText()),Integer.parseInt(textField3.getText())) ");
        //statmt.execute("INSERT INTO 'users' ('name', 'phone','age') VALUES (name, phone,age) ");
        statmt.execute("INSERT INTO 'users' ('name', 'phone','age') VALUES ('Vasya', 121,2313) ");
        System.out.println("Таблица создана или уже существует.");
    }
    // -------- Вывод таблицы--------
    public static void ReadDB() throws ClassNotFoundException, SQLException
    {
        resSet = statmt.executeQuery("SELECT * FROM users");
        while(resSet.next())
        {
            int id = resSet.getInt("id");
            String  name = resSet.getString("name");
            String  phone = resSet.getString("phone");
            String  age = resSet.getString("age");
            System.out.println( "ID = " + id );
            System.out.println( "name = " + name );
            System.out.println( "phone = " + phone );
            System.out.println( "age = " + age );
            System.out.println();
        }
        System.out.println("Таблица выведена");
        resSet.close();
        conn.close();
        statmt.close();
    }
    public static void main(String[] args) {
        new BD();
    }
}

Пробовал так и так, но в первом случае оно так не канает выдает ошибку

statmt.execute("INSERT INTO 'users' ('name', 'phone','age') VALUES (textField1.getText(), Integer.parseInt(textField2.getText()),Integer.parseInt(textField3.getText()))

"java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near "(": syntax error)"

Тут просто не видит этих переменных.

statmt.execute("INSERT INTO 'users' ('name', 'phone','age') VALUES (name, phone,age)

Тема совершенно новая, буду рад если подробно, и понятно объясните. Спасибо.

Answer 1

Если ты именно так и добавляешь, то не правильно, пробуй так:

statmt.execute("INSERT INTO `users` (`name`, `phone`, `age`) VALUES ('" + textField1.getText() + "', '" + Integer.parseInt(textField2.getText()) + "', '" + Integer.parseInt(textField3.getText() + "');");
READ ALSO
Как в HashMap задать значение ArrayList?

Как в HashMap задать значение ArrayList?

Есть HashMap, в котором ключу соответствует ArrayListНапример: фрукты: яблоки, апельсины, груши; овощи : картофель и морковь

429
Как ограничить доступ к методам классов библиотеки для проекта?

Как ограничить доступ к методам классов библиотеки для проекта?

Есть библиотека, в ней, к примеру, есть такой класс:

403
wsimport не парсит wsdl файл с 2 any свойствами в sequence

wsimport не парсит wsdl файл с 2 any свойствами в sequence

Существует wsdl файл из которого я пытаюсь сгенерировать java классы при помощи утилиты wsimportГенерация завершается ошибкой:

433
Меняется состояние visibility у select bootstrap

Меняется состояние visibility у select bootstrap

Есть такое модальное окно

341