算是面试总结吧,对于我这种小白来说,当时是没有思路的,但是今天面试的时候就这个题让我头疼。
大概题目:
有两个表,表1为详细表,分别有三个字段,detailid,datailtype,remark。表2为产品表,有两个字段分别是productid,productname。
要求:
把表1中的detailtype字段所有信息变成对应的表2中的productname字段(语言不限)。
表1 | ||
detailid | detailtype | remark |
101 | 产品详细1 | 备注1 |
102 | 产品详细2 | 备注2 |
103 | 产品详细3 | 备注3 |
104 | 产品详细4 | 备注4 |
… | … | … |
19999 | 产品详细19999 | 备注19999 |
表2 | |
productid | productname |
101 | 产品1 |
102 | 产品2 |
103 | 产品3 |
104 | 产品4 |
… | … |
19999 | 产品19999 |
题目已经描述完,我以为就是一个Update就能完事,没想到想了半天没有想出来,结果面试机会都没有给,我是真的想说当时真的没有思路,蒙圈的一B,于是这场面试就此告终啦,有点遗憾!回家后一直琢磨这道题,想来想去,是用子查询还是什么,但是以前没有写过同时修改N个数据的SQL语句啊,于是自己在电脑上敲,最后结合Java语言终于实现了修改多项数据的这道题,算是长见识啦,深深的给出题的人鞠个躬。记录于此,以作警钟。
重要的事情我想说三句:老板,这就是你要的代码,老板,这就是你要的代码,老板,你就是你要的代码。
import java.sql.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class TsetMain {
public static void main(String args[]) throws SQLException {
HashMap hs = TsetMain.getProduct();
Connection con = DBUtil.ConnectDB();
int result=0;
Iterator it = hs.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
String sql = "update detail set typename=? where detailid=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, entry.getValue());
ps.setString(2, entry.getKey());
result = ps.executeUpdate();
}
if (result > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
}
public static HashMap<String, String> getProduct() throws SQLException {
HashMap<String, String> hm = new HashMap();
Connection conn = DBUtil.ConnectDB();
String sql = "select productid,productname from product";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet != null) {
while (resultSet.next()) {
String productid = resultSet.getString("productid");
String productname = resultSet.getString("productname");
hm.put(productid, productname);
}
}
DBUtil.releaseDB(preparedStatement, resultSet);
return hm;
}
}
以上代码能实现题目要求的功能,这只是我自己的理解,仅代表自己观点,如果有其他意见的朋友,可以给我发一个更简单的。