Добавление новых значений в базу данных MySQL больше не возможно? - PullRequest
0 голосов
/ 20 сентября 2018

Привет, ребята, пожалуйста, рассмотрите код ниже.Я использовал его для добавления новых значений в мою таблицу (booking) в базе данных mysql (seat_booking).

Переменные включают String(id,cname,ctype,event_name) и int(seatsno). Я также вызываю функцию EventName() вэтот код и, поверьте мне, ребята, он работает отлично, и я могу получить имя события из другой таблицы (события), но единственная проблема возникает в этом методе.

Ребята, мой проект заключается в бронировании местаПриложение с графическим интерфейсом, поэтому этот код работает, когда я использовал его для добавления новых событий для режима «Администратор», но не работает здесь, т. Е. Когда он мне нужен для хранения значений бронирования для конкретного клиента.Пожалуйста, помогите, ребята.Я был бы очень признателен.

private void newbookbtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:
    try {
        Class.forName("java.sql.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/seat_booking","root","<mypassword>");
        Statement stmt = con.createStatement();
        String query = "SELECT * FROM booking";
        ResultSet rs = stmt.executeQuery(query);
        String cname = tfcname.getText();
        int seatsno = Integer.parseInt(tfseatsno.getText());
        String evtname = EventName();
        String ctype = "Normal Customer"; long bookid = getID();
        String id = Long.toString(bookid); 
        String query1="insert into booking values('"+ id +"','"+ cname +"','"+ ctype +"','"+evtname+"',"+ seatsno+");";
        stmt.executeUpdate(query1);
        JOptionPane.showMessageDialog(null, "Booking successfull!");
        stmt.close();
        con.close();
    }
    catch (Exception e)
    {
        JOptionPane.showMessageDialog(null,"Error encountered while booking new event!");
    }
}                  

Я попытался вставить оператор e.Stacktrace(); в приложение, и я запустил его, в результате получился вывод ошибки:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 's Track Events Warm-up,1)' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2788)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1816)
    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1730)
    at CustomerNewBook.newbookbtnActionPerformed(CustomerNewBook.java:256)
    at CustomerNewBook.access$100(CustomerNewBook.java:16)
    at CustomerNewBook$2.actionPerformed(CustomerNewBook.java:110)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
...

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Обновление 2 (для этот комментарий ) :

Проверьте ошибку,

У вас естьошибка в вашем синтаксисе SQL ... около s Track Events Warm-up,1) ...

Проблема в передаваемых строках.Убедитесь, что ни одна из ваших переменных (id, cname, ctype, evtname) не содержит одиночных кавычек (') или любых других управляющих символов, которые могут помешать выполнению запроса.

Эту проблему легко решить с помощью Подготовленные заявления .Попробуйте,

String query1 = "INSERT INTO `booking` VALUES(?, ?, ?, ?, ?)";
PreparedStatement stmt = con.prepareStatement(query1);  
stmt.setString(1, id); //1 specifies the first parameter in the query  
stmt.setString(2, cname);
stmt.setString(3, ctype);
stmt.setString(4, evtname);
stmt.setInt(5, seatsno); //use setInt() to parse ints
stmt.executeUpdate();

Обновление (для этот комментарий ) :

В вашем catchзаблокируйте, прокомментируйте строку JOptionPane и добавьте следующее:

catch (Exception e){
    e.printStackTrace();
    // JOptionPane.showMessageDialog(null, ...);
}

, затем снова запустите приложение и обновите вопрос с выводом ошибки.


Оригиналответ:

Если вы используете jdbc:mysql, вам нужен коннектор MySQL.

  • Загрузите его с mysql-connector-java-8.0.12 ,
  • Добавьте mysql-connector-java-8.0.12.jar в ваш проект.
  • Измените класс драйвера,

    Class.forName("com.mysql.jdbc.Driver");
    
  • Очистите и соберите (Необязательно, но рекомендуется) .
0 голосов
/ 20 сентября 2018

Вы используете неправильный класс драйвера.правильное значение:

Class.forName("com.mysql.jdbc.Driver");

java.sql.Driver - это только интерфейс.Для получения дополнительной информации см. javadoc

КСТАТИ: Узнайте о подготовленных утверждениях, чтобы предотвратить sqlinjection Не подавлять сообщения об ошибках.По крайней мере, войдите в них или введите сообщение Диалог:

catch (Exception e)
{
    e.printStacktrace();
    JOptionPane.showMessageDialog(null,"Error encountered while booking new event!"+e.getMessage());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...