Элементы Java Array не вставляются в таблицу MySQL, несмотря на отсутствие ошибок - PullRequest
0 голосов
/ 18 октября 2018

Это SQL-запрос, который я делаю:

stmt = conn.createStatement();
        String sql="INSERT INTO registration(phone,name,address,city,destination,date) VALUE ("+phone[i]+",'"+name[i]+"','"+address[i]+"','"+city[i]+"','"+destination[i]+"','"+date[i]+"')";

Это относительная часть программы, в которой я делаю SQL-запрос для контекста.Запрос кажется правильным.Программа не выдает никаких ошибок. Тем не менее, данные не вставляются в таблицу MySQL

   case 1: {
                        System.out.println("Enter your Phone number:");
                        phone[i] = sc.nextInt();
                        sc.nextLine();

                        System.out.println("Enter your name:");
                        name[i] = sc.nextLine();


                        System.out.println("Enter your address:");
                        address[i] = sc.nextLine();

                        System.out.println("Enter your Pick up city:");
                        city[i] = sc.nextLine();


                        System.out.println("Enter your Destination:");
                        destination[i] = sc.nextLine();


                        System.out.println("Enter your Date:");
                        date[i] = sc.nextLine();
                        ++i;
                        Connection conn = null;
                        Statement stmt = null;
                        try{
                            //STEP 2: Register JDBC driver
                            Class.forName("com.mysql.jdbc.Driver");

                            //STEP 3: Open a connection
                            System.out.println("Connecting to a selected database...");
                            conn = DriverManager.getConnection(DB_URL, USER, PASS);
                            System.out.println("Connected database successfully...");

                            //STEP 4: Execute a query
                            System.out.println("Inserting records into the table...");
                            stmt = conn.createStatement();
                           String sql="INSERT INTO registration(phone,name,address,city,destination,date) VALUE ("+phone[i]+",'"+name[i]+"','"+address[i]+"','"+city[i]+"','"+destination[i]+"','"+date[i]+"')";

                        }catch(SQLException se){
                            //Handle errors for JDBC
                            se.printStackTrace();
                        }catch(Exception e){
                            //Handle errors for Class.forName
                            e.printStackTrace();
                        }finally{
                            //finally block used to close resources
                           try{
                                if(stmt!=null)
                                    conn.close();
                            }catch(SQLException se){
                            }// do nothing
                            try{
                                if(conn!=null)
                                    conn.close();
                            }catch(SQLException se){
                                se.printStackTrace();
                            }//end finally try
                        }//end try
                        System.out.println("Goodbye!");
                        break;
                    }

Программа не выдает никаких ошибок, но мой MySQL не показывает новых вставляемых записей.Почему это происходит?

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Ваше заявление INSERT должно выглядеть так:

String sql = "INSERT INTO registration (phone, name, address, city, destination, date) VALUES ('" + phone[i] + "', '" + name[i] + "', '" + address[i] + "', '" + city[i] + "', '" + destination[i] + "', '" + date[i] +"');";

и вам следует позвонить:stmt.executeUpdate(sql);не executeQuery(), потому что последний используется для возврата строк, а не для вставки строк

0 голосов
/ 18 октября 2018

Вы только здесь создаете оператор, там запрос не запустится.Я добавил строку кода для запуска SQL-запроса после строки ниже. Пожалуйста, ознакомьтесь с кодами ниже.Также я увидел, что у написанного вами SQL-запроса есть небольшая ошибка.Пожалуйста, сделайте это правильно (я сделал это в коде ниже).в противном случае он выдаст исключение после выполнения кода.

case 1: {
                        System.out.println("Enter your Phone number:");
                        phone[i] = sc.nextInt();
                        sc.nextLine();

                        System.out.println("Enter your name:");
                        name[i] = sc.nextLine();


                        System.out.println("Enter your address:");
                        address[i] = sc.nextLine();

                        System.out.println("Enter your Pick up city:");
                        city[i] = sc.nextLine();


                        System.out.println("Enter your Destination:");
                        destination[i] = sc.nextLine();


                        System.out.println("Enter your Date:");
                        date[i] = sc.nextLine();
                        ++i;
                        Connection conn = null;
                        Statement stmt = null;
                        try{
                            //STEP 2: Register JDBC driver
                            Class.forName("com.mysql.jdbc.Driver");

                            //STEP 3: Open a connection
                            System.out.println("Connecting to a selected database...");
                            conn = DriverManager.getConnection(DB_URL, USER, PASS);
                            System.out.println("Connected database successfully...");

                            //STEP 4: Execute a query
                            System.out.println("Inserting records into the table...");
                            stmt = conn.createStatement();
                            String sql="INSERT INTO `registration`(phone,name,address,city,destination,date) VALUES('"+phone+"','"+name+"','"+address+"','"+city+"','"+destination+"','"+date+"')";
                            stmt.execureUpdate(sql); //this line will run the query
                        }catch(SQLException se){
                            //Handle errors for JDBC
                            se.printStackTrace();
                        }catch(Exception e){
                            //Handle errors for Class.forName
                            e.printStackTrace();
                        }finally{
                            //finally block used to close resources
                           try{
                                if(stmt!=null)
                                    conn.close();
                            }catch(SQLException se){
                            }// do nothing
                            try{
                                if(conn!=null)
                                    conn.close();
                            }catch(SQLException se){
                                se.printStackTrace();
                            }//end finally try
                        }//end try
                        System.out.println("Goodbye!");
                        break;
                    }
0 голосов
/ 18 октября 2018

Насколько я вижу, вы строите строку sql, но нигде ее не используете.

Следующий код используется для выполнения запросов:

stmt.executeUpdate(sql);

См. Oracle - Обработка операторов SQL для получения дополнительной информации об этом.

Не имеет отношения к вашему вопросу, но Подготовленные операторы - это то, что вы, возможно, захотитепосмотрите также, так как вы буквально вставляете пользовательский ввод прямо в базу данных.Ввод пользователя также может быть злонамеренным, вот более подробное объяснение W3Schools - SQL Injection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...