尽管没有显示错误,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”的电缆可能未插好,或另一端的设备没有响应。