用 Java 更新 MySQL 表
Posted
技术标签:
【中文标题】用 Java 更新 MySQL 表【英文标题】:Update MySQL table with Java 【发布时间】:2012-05-26 09:23:47 【问题描述】:我正在尝试更新汽车的价格,但我只能更新数据库中的一项。我认为我的逻辑是错误的。
有人可以建议我如何解决它。
mysql 表:
+-----------+-----------+
| car | price |
+-----------+-----------+
| Bmw | 434312 |
| Audi | 222121 |
| Mercedes | 33333 |
+-----------+-----------+
html 代码:
<td><input TYPE="text" NAME="Bmw"></td>
<td><input TYPE="text" NAME="Audi"></td>
<td><input TYPE="text" NAME="Mercedes"></td>
Java 代码:
String Bmw=(String)session.getAttribute("Bmw");
session.setAttribute("Bmw",Bmw);
Bmw=request.getParameter("Bmw");
String Audi=(String)session.getAttribute("Audi");
session.setAttribute("Audi",Audi);
Audi=request.getParameter("Audi");
String Mercedes=(String)session.getAttribute("Mercedes");
session.setAttribute("Mercedes",Mercedes);
Mercedes=request.getParameter("Mercedes");
try
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
Statement st = null;
session.setAttribute("st",st);
st = conn.createStatement();
String sqlqueryCommand = "select * from item";
ResultSet results = st.executeQuery(sqlqueryCommand);
while(results.next())
if(request.getParameter("Bmw")!=null && results.getString("car").equals("Bmw"))
st.executeUpdate("update item set price='"+Bmw+"' where car='"+results.getString("car")+"'");
conn.commit();
if(request.getParameter("Audi")!=null && results.getString("car").equals("Audi"))
st.executeUpdate("update item set price='"+Audi+"' where car='"+results.getString("car")+"'");
conn.commit();
if(request.getParameter("Mercedes")!=null && results.getString("car").equals("Mercedes"))
st.executeUpdate("update item set price='"+Mercedes+"' where car='"+results.getString("car")+"'");
conn.commit();
conn.close();
catch(Exception e)
System.out.println(e);
【问题讨论】:
数据库中列的数据类型是什么? 尝试在关闭前将提交改为一行,或者通过打印结果和请求值进行调试;顺便说一句,哪个在工作? 您的实际问题是什么?你有任何错误信息吗?除了一些离题之外:也许你想使用一些准备好的语句而不是字符串连接。 价格的数据类型是 int(11) 和汽车文本 我正在尝试更改价格。我唯一可以更改价格的是“梅赛德斯” 【参考方案1】:你需要选择什么?你提前知道那个结果。
这部分:
String Bmw=(String)session.getAttribute("Bmw"); session.setAttribute("Bmw",Bmw);
没有太大意义。也许您不想从会话中检索值,而是从请求中检索?
小心 sql 注入。请改用准备好的语句和参数占位符。
这里有一个关于如何让事情变得更短、更安全的建议。这是关于 jdbc 工作原理的记忆,untestet。
String[] types = new String[]"Bmw", "Audi", "Mercedes";
PreparedStatement statement = conn.prepareStatement("update item set price=:price where car=:car");
for(String type : types)
String parameterValue = request.getParameter(type);
if (type != null)
statement.setObject("price", parameterValue);
statement.setObject("car", type);
statement.executeUpdate();
statement.close();
此外,在您的 catch 块中,您可能希望使用 e.printStackTrace()
而不是 System.out.println(e);
,这在调试时会更有帮助。
P.S.:您确定您的汽车列项目不包含任何空格吗?在任何循环上打印您的results.getString("car")
。
【讨论】:
【参考方案2】:在遍历结果时要小心。您在阅读表格时正在更新表格。
您不需要 Select 查询,因为您已经拥有数据库元数据。
results.getString("car").equals("Bmw")
使这条线无用
where car='"+results.getString("car")+"'"
这两个语句都应该替换为一个简单的 Where 语句:
where car='Bmw'
如果您曾经硬编码过汽车类型并且应该一直使用它。这仅允许您执行更新。有疑问请查看con.commit()
之后的结果集状态
【讨论】:
以上是关于用 Java 更新 MySQL 表的主要内容,如果未能解决你的问题,请参考以下文章