用java将数据插入mySQL表
Posted
技术标签:
【中文标题】用java将数据插入mySQL表【英文标题】:Insert data into mySQL table with java 【发布时间】:2012-08-07 21:53:29 【问题描述】:我在 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);
【问题讨论】:
如果您没有收到错误,请将 SqlException 更改为 Exception 并查看您收到什么错误 为什么使用直接的 sql 来进行插入,而不是像 hibernate 或 Ibatis 这样的 ORM? 是的,最好使用像Hibernate或iBatis这样的ORM 【参考方案1】:我认为它不起作用,因为值的数量少于表中的列数。您需要做的是指定列的名称以匹配您的值的数量。
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,...)
【讨论】:
【参考方案2】:正如你所见,这种格式对我很有效,不需要额外的逗号、斜杠或其他任何东西:
statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");
【讨论】:
【参考方案3】:第一个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')");
【讨论】:
【参考方案4】:您的插入语句应该是:
"INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) " +
"VALUES (3, 75, 6, 25, 18.50)"
换句话说,您的语句缺少列名。
【讨论】:
INSERT
语句中的列名是可选的,即使不指定它们是不明智的,请参阅dev.mysql.com/doc/refman/5.5/en/insert.html
如果插入语句的列数少于表中的实际列数,则列名不是可选的。【参考方案5】:
像 munyengm 一样,您的 rcase 中的语句将是: "插入收入计算器(ID、TIPS、HOURS、GAS、HOURLY_EARNINGS)" + "值 (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);
【讨论】:
【参考方案6】:一个。按照在 MYSQL DB 中定义的顺序传递表中所有列的值。在这里,我们可以在您的表格中看到 7 列,而您只提供了 5 个值...
或
B。使用这种语法
INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA)
【讨论】:
【参考方案7】:您需要指定列名,例如:
"INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)"
【讨论】:
以上是关于用java将数据插入mySQL表的主要内容,如果未能解决你的问题,请参考以下文章