使用java将数据插入mySQL表

我在mySQL数据库中有一个预定义的表: 在此处输入图像描述

我正在努力将从用户输入的数据保存到数据库,但我似乎无法保存在数据库中的任何数据。 使用以下代码,我试图更新数据库的第一行(ID:1到OTHER 2:0)。 我究竟做错了什么?

private java.sql.Connection con = null; private PreparedStatement pst = null; private ResultSet rs = null; private String url = "jdbc:mysql://localhost:8889/deliveryEarn"; private String user = "root"; private String password = "root"; try { con = DriverManager.getConnection(url, user, password); Statement st = (Statement) con.createStatement(); st.executeUpdate("INSERT INTO incomeCalc " + "VALUES (3, 75, 6, 25, 18.50)"); con.close(); } catch (SQLException ex) { Logger lgr = Logger.getLogger(deliveryMain.class.getName()); lgr.log(Level.SEVERE, ex.getMessage(), ex); } 

我认为它不起作用,因为值的数量小于表中的列数。 您需要做的是指定列的名称以匹配您的值的数量。

 INSERT INTO incomeCalc VALUES (3, 75, 6, 25, 18.50) // error // the only way this will work is when you have only 5 columns in // your table but in your case you have 7 that is why it will not work 

它应该是

 INSERT INTO incomeCalc(specify columns here to the values bound to) VALUES (3, 75, 6, 25, 18.50) 

w3School :(插入)

可以用两种forms编写INSERT INTO语句。

第一个表单不指定要插入数据的列名,只指定其值:

 INSERT INTO table_name VALUES (value1, value2, value3,...) 

第二种forms指定列名和要插入的值:

 INSERT INTO table_name (column1, column2, column3,...) VALUES (value1, value2, value3,...) 

你的插入语句应该是:

 "INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) " + "VALUES (3, 75, 6, 25, 18.50)" 

换句话说,您的语句缺少列名。

您需要指定列名称,例如:

 "INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)" 

A. 按照在MYSQL DB中定义的顺序传递表的所有列的值。 在这里,我们可以在您的表中看到7列,您只提供5个值…

要么

B。 利用这种语法

 INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA) 

像munyengm你在rcase中的陈述将是:“INSERT INTO incomeCalc(ID,TIPS,HOURS,GAS,HOURLY_EARNINGS)”+“VALUES(3,75,6,25,18.50)”

但你可能会循环值和东西,所以我建议使用预备语句,这可以防止SQL注入。

 ps = "INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (?, ?, ?, ?, ?)" 

然后

  ps.setInt(index++, id); //id=3 ps.setInt(index++, tips); //tips=75 ps.setInt(index++, hours);//hour=6 ps.setInt(index++, gas);//gas=25 ps.setFloat(index++, HOURLY_EARNINGS); 

First READONLY = false;

有一些限制。你需要在COLUMN_NAMES之前和之后放置[Name_table$]\ 。 像这样:

 st.executeUpdate("INSERT INTO [IncomeCalc$] (\"ID\", \"TIPS\", \"HOURS\", \"GAS\",\"HOURLY_EARNINGS\") VALUES ('2012-10-25 01:00:00','16.3')"); 

这种格式对我有用,就像你看到的那样,没有额外的逗号,斜线或其他任何东西是必要的:

 statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");