6

我在 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);

 } 
4

7 回答 7

9

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

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:(插入)

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

第一种形式没有指定将插入数据的列名,只指定它们的值:

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

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

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
于 2012-08-10T15:04:46.417 回答
3

您的插入语句应该是:

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

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

于 2012-08-10T15:03:12.940 回答
1

您需要指定列名,例如:

"INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)"
于 2012-08-10T15:06:14.017 回答
1

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

或者

。使用此语法

INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA)
于 2012-08-10T15:06:59.143 回答
1

像 munyengm 一样,您的 rcase 中的语句将是:“INSERT INTOincomeCalc(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);
于 2012-08-10T15:15:52.080 回答
1

第一的READONLY = false;

有一些限制。您[Name_table$]需要\COLUMN_NAMES. 像这样:

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

这种格式对我有用,就像你看到的那样,不需要额外的逗号、斜杠或其他任何东西:

statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");
于 2013-02-19T19:18:21.703 回答