jdbc驱动底层代码(通过控制器查询数据库的数据)
public User checkUserLoginDao(String uname, String pwd) {
// 声明jdbc对象
Connection conn = null;
PreparedStatement ps = null; //这里利用PreparedStatement是为了避免mysql语句的关键字问题造成影响
ResultSet rs = null;
// 声明变量
User u = null;
try{
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306",uname,pwd);
//创建sql命令
String sql = "select*from t_user where uname=? and pwd=?";
//创建sql命令对象
ps = conn.prepareStatement(sql); //setString方法,作用是在 ?对应位置上赋值
//给占位符赋值
ps.setString(1, uname);
ps.setString(2, pwd);
//执行sql
rs = ps.executeQuery();
/**
这个ResultSet他起到的作用就是完成了查询结果的存储功能,而且只能读去一次,不能够来回的滚动读取。这种结果集的创建方式如下:
Statement st = conn.CreateStatement
ResultSet rs = Statement.excuteQuery(sqlStr);
由于这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据。
*/
//遍历结果
while(rs.next()){
u = new User();
/* u.setUname(uname);
u.setPwd(pwd);
这里可以从数据库中获取所有的数据内容
*/
u.setUname(rs.getString("uname")); //getString方法,可获取数据库字段
u.setUid(rs.getInt("uid"));
u.setSex(rs.getString("sex"));
u.setBirth(rs.getString("birth"));
u.setAge(rs.getInt("age"));
u.setPwd(rs.getString("pwd"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//关闭资源
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return u;
}