Элемент Java Array, упомянутый в запросе вставки MySQL, не вставляется в таблицу. Вместо этого выдается ошибка - PullRequest
0 голосов
/ 18 октября 2018

Я принимаю значения от пользователей, такие как: имя, адрес, номер телефона, город, пункт назначения, дата

Каждое из этих значений хранится в соответствующем массиве.Прежде чем перейти к следующей итерации массива, я хочу вставить элемент массива в таблицу MYSQL.Я использую JDBC для этого.Однако мне показывают ошибку, что SQL-запрос неверен:

Это мой SQL-запрос:

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

Это соответствующая часть кода, где я делаю 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 (100,name[i],address[i],city[i],destination[i],date[i])";
                            stmt.executeUpdate(sql);

                        }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;
                    }

Это ошибка, которую мне показывают:

Это мой SQL-запрос из приведенного выше кода

 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '[i],address[i],city[i],destination[i],date[i])' 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:404)
        at com.mysql.jdbc.Util.getInstance(Util.java:387)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1540)
        at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2595)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1468)
        at Airplane.main(Airplane.java:74)

Что я делаю не так?

Ответы [ 2 ]

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

Во-первых, вам лучше использовать PreparedStatement для достижения некоторой степени безопасности типов и защиты от внедрения SQL.Также PreparedStatement позволяет вставлять несколько строк в пакетном режиме, что повышает производительность.

Вам необходимо создать PreparedStatement объект только один раз за пределами цикла.

PreparedStatement stmt = conn.prepareStatement("INSERT INTO `registration`(`phone`, `name`, `address`, `city`, `destination`, `date`) VALUES (100,?,?,?,?,?)");
stmt.setString(1, name[i]);
stmt.setString(2, address[i]);
stmt.setString(3, city[i]);
stmt.setString(4, destination[i]);
stmt.setString(5, date[i]);
0 голосов
/ 18 октября 2018

Это из-за вашей строки sql.Программа принимает "address[i]" в виде строки.Так и должно быть:

 String sql = "INSERT INTO `registration`(`phone`, `name`, `address`, `city`, 
`destination`, `date`) VALUES (100, " + name[i] + " , " + address[i] + "," + 
city[i]+ " , " + destination[i] + ", " + date[i] + ")";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...