尽管没有显示错误,Java Array 元素仍未插入 MySQL 表

Posted

技术标签:

【中文标题】尽管没有显示错误,Java Array 元素仍未插入 MySQL 表【英文标题】:Java Array elements not getting inserted into MySQL table despite showing no error 【发布时间】:2019-03-23 13:48:50 【问题描述】:

这是我正在执行的 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]+"')";

这是我为 context 进行 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 显示没有插入新条目。为什么会这样?

【问题讨论】:

【参考方案1】:

据我所知,您正在构建字符串 sql,但您没有在任何地方使用它。

以下代码用于执行查询:

stmt.executeUpdate(sql);

有关更多信息,请参阅Oracle - Processing SQL Statements。

与您的问题无关,但Prepared Statements 也是您可能想要研究的内容,因为您将用户输入直接插入数据库。用户的输入也可能是恶意的,这里有更多解释W3Schools - SQL Injection

【讨论】:

您是否编辑了您的答案并将我的答案发布为您的? 不,我阅读了下面的另一个问题,其中有来自 agent47 的评论说“无法使用 executeQuery() 发出数据操作语句。”。基于此,我意识到我犯了一个错误,后来才看到你的帖子。【参考方案2】:

您的 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(),因为后者用于返回行而不是插入行

【讨论】:

【参考方案3】:

您只是在这里创建语句,那里的查询不会运行。我在下面的行之后添加了一个代码行来运行 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;
                    

【讨论】:

我已经相应修改了代码,请检查!

以上是关于尽管没有显示错误,Java Array 元素仍未插入 MySQL 表的主要内容,如果未能解决你的问题,请参考以下文章

尽管没有错误,页面根本不会显示

尽管控制台显示没有错误,但应用程序错误?

Mac电脑 - “USB 10/100 LAN”的电缆可能未插好,或另一端的设备没有响应。

尽管控制台没有显示错误,但 useHistory 钩子不起作用

电脑常识

电脑显示未插入扬声器和耳机?