java. sql .SQLSyntaxErrorException: в синтаксисе SQL возникла ошибка; при вставке данных в SQL базу данных через JAVA - PullRequest
0 голосов
/ 01 апреля 2020

Я проектирую JFrame, где я буду принимать данные для имени, имени пользователя, пароля, телефона, номера и местоположения изображения «img» из JFileChooser. Практически я вставляю пароли без хэширования, а столбец № телефона имеет тип данных VarChar (45). Это следует упустить из виду, поскольку я довольно новичок в SQL программировании с использованием JAVA.

. Кнопка регистрации используется для вставки данных в строку SQL. ActionListener выглядит следующим образом:

signupbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try
                {
                    Statement st=conn.createStatement();
                    ResultSet rs=null;
                    String name=namef.getText(),usnm=usnmf.getText(),pswd=pswdf.getText(),ph=phf.getText();
                    String sql="insert into data (name,username,password,ph.no.,profile) values("+name+","+usnm+","+pswd+","+ph+","+img+")";
                    st.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
                    int key = 0;
                    rs = st.getGeneratedKeys();
                    if (rs.next()) 
                    {
                        key = rs.getInt(1);
                    }
                    JOptionPane.showMessageDialog(null, "Key : "+key);
                }
                catch(Exception ex)
                {
                    System.out.println(ex);
                }
            }
        });

Когда данные передаются и кнопка нажата, создается исключение и печатается исключение:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ',profile) values(Jyotirmay,Usnm,Pswd,1122334455,E:\1.jpg' at line 1

Почему появляется ошибка? Я пробовал несколько методов, таких как PreparedStatement вместо Statement с ?, но все равно получаю ошибку.

PS

Использование PreparedStatement:

btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try
                {
                    String sql="INSERT into data (name, username, password, ph.no., profile) VALUES (?,?,?,?,?);";
                    PreparedStatement st=conn.prepareStatement(sql);
                    String name=namef.getText(),usnm=usnmf.getText(),pswd=pswdf.getText(),ph=phf.getText();
                    st.setString(1, name);
                    st.setString(2, usnm);
                    st.setString(3, pswd);
                    st.setString(4, ph);
                    st.setString(5, img);
                    st.executeUpdate();

                    JOptionPane.showMessageDialog(null, "SUCESS! Data inserted. Try Logging In.");

                }
                catch(Exception ex)
                {
                    System.out.println(ex);
                }
            }
        });

Примечание: img уже объявлен и инициализирован. Кроме того, в консоли правильно напечатано местоположение абсолютного изображения.

1 Ответ

2 голосов
/ 01 апреля 2020

Вы не можете использовать точку в имени столбца без экранирования. Вероятно, лучше переименовать столбец, чтобы он больше не использовал точки, хотя вы также можете попробовать использовать обратные пометки в имени столбца, например:

btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try
                {
                    String sql="INSERT into data (name, username, password, `ph.no.`, profile) VALUES (?,?,?,?,?);";
                    PreparedStatement st=conn.prepareStatement(sql);
                    String name=namef.getText(),usnm=usnmf.getText(),pswd=pswdf.getText(),ph=phf.getText();
                    st.setString(1, name);
                    st.setString(2, usnm);
                    st.setString(3, pswd);
                    st.setString(4, ph);
                    st.setString(5, img);
                    st.executeUpdate();

                    JOptionPane.showMessageDialog(null, "SUCESS! Data inserted. Try Logging In.");

                }
                catch(Exception ex)
                {
                    System.out.println(ex);
                }
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...