String sql = "select * from forder where uid=?";
PreparedStatement pStatement = conn.prepareStatement(sql);
pStatement.setInt(1,users.getUid());
// 这样写不行
//结果为 select * from forder where uid=?
rSet = pStatement.executeQuery();
System.out.println(sql);
while (rSet.next()) {
Forder forder = new Forder();
forder.setFid(rSet.getLong("fid"));
forder.setFtotal(rSet.getDouble("ftotal"));
forder.setFre(rSet.getString("fre"));
forder.setFdate(rSet.getString("fdate"));
fUsers.setUname(rSet.getString("uname"));
fUsers.setUphone(rSet.getString("uphone"));
fUsers.setUemail(rSet.getString("uemail"));
fUsers.setUpost(rSet.getInt("upost"));
fUsers.setUaddress(rSet.getString("uaddress"));
fUsers.setUid(rSet.getInt("uid"));
forder.setSid(rSet.getInt("sid"));
forder.setUsers(fUsers);
forders.add(forder);
sql 就是你定义的 String sql = "select * from forder where uid=?";
ps不会通过setint就把你的这个sql中的?给替换掉,它是内部执行替换的,你也不用关心,空间替换的是什么值。
这叫做sql预编译,通过设置参数值,再进行访问的技术。而不像普通的statement直接把参数值写到?里面去。
很汗啊...
预编译是首先将带动态参数的SQL发给服务器进行缓存
然后再发送具体参数,由数据库负责提取缓存命令并执行命令有SQLSERVER的可以打开跟踪功能,你会看到实际提交的不是一般的SQL,是一个特殊的由服务器执行的存储过程