我在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);
}
答案 0 :(得分: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) 强>
可以用两种形式编写INSERT INTO语句。
第一个表单没有指定插入数据的列名,只指定了它们的值:
INSERT INTO table_name
VALUES (value1, value2, value3,...)
第二种形式指定列名和要插入的值:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
答案 1 :(得分:3)
您的插入声明应为:
"INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) " +
"VALUES (3, 75, 6, 25, 18.50)"
换句话说,您的陈述缺少列名。
答案 2 :(得分:1)
您需要指定列名称,例如:
"INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)"
答案 3 :(得分:1)
<强> A 即可。按照在MYSQL DB中定义的顺序传递表的所有列的值。在这里,我们可以看到表格中的7列,而您只提供5个值......
或
<强>乙即可。使用此语法
INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA)
答案 4 :(得分:1)
但你可能会循环使用值和东西,所以我建议使用预备语句,这样可以防止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);
答案 5 :(得分: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')");
答案 6 :(得分:1)
这种格式对你有用,就像你看到的那样,没有额外的逗号,斜线或其他任何东西是必要的:
statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");