今天学了前后台的连接。之前脑子一团浆糊,就连后端对数据库的操作都不熟。就一点点来写吧,会多少写多少,错了以后再改吧,可能进步比较慢,但肯定会慢慢好起来的。
以前一直对数据库连接就不太懂。先从数据库连接写起。
疑问点1:之前就是不明白为什么要有一个con,而且还是Connection类型的,
理解:你想对数据库操作,肯定的先连上数据库吧,那就得用一个变量来告诉别人,连接情况是啥,到底连没连 上,刚开始肯定是null的呀,连上了还写啥。至于Connection,还是不太清楚,可能只有这样的类型才能获取连接吧
疑问点2:Class.forName("com.mysql.jdbc.Driver");都说是加载驱动类,怎么加载的不太清楚。
理解:Class.forName动态加载指定的JDBC驱动,由DriverManager管理。DriverManager类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立连接。(别人说的)
然后用这个con=(Connection)DriverManager.getConnection(url, user, password);就连上了呗。数据库连接就勉强过关吧,以后工作了也许会有更深的理解,暂时都能连上了,就先不考虑了。
然后就出现一个很大的误区,数据库里不是有张表格嘛是这样的
然后我在后台也写了个这个
这下好了,我一直以为我对这些类里属性操作的就是对后台操作,(我可能是个傻子)
UserDao里是这样(我一直不明白为什么加个这个玩意,别人说是为了简单方便,我先这么理解吧)
package com.user.dao;
import java.util.List;
import com.user.entity.User;
public interface UserDao {
public boolean isExist(String username,String password);//判断用户名和密码是否正确
public boolean add(User user);
public List<User> selectAll();
public boolean delete(int uid);
public User selectByUid(int uid);
public boolean update (User user);
//List<User> list=udi.mohuselect(namecondition);
public List<User> mohunameselect(String namecondition);
public List<User> mohuageselect(int minage,int maxage);
public List<User> mohuadressselect(String adresscondition);
public List<User> mohusexselect(String sexcondition);
}
UserDaoImp类是这样
DBCon db=new DBCon();
//4个数据库连接对象
Connection con=null;
Statement stmt=null;//为了发送Sql语句
PreparedStatement pstmt=null;//???
ResultSet rs=null;//存放集合
public void close()//这个方法跟理解没啥关系,就是为了关闭偷懒
{
try {
if(rs!=null){
rs.close();
}
if(pstmt!=null){
pstmt.close();
}
if(stmt!=null){
stmt.close();
}
if(con!=null){
con.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean isExist(String username, String password) {
System.out.println("正在执行DAO中isExist方法");
Boolean flag=false;
try {
con=db.getCon();
if(con==null)
{
System.out.println("DAO中selectByName方法连接失败");
return flag;
}
String sql="select * from tb_users where username=? AND password=?";//写了sql语句
pstmt=(PreparedStatement) con.prepareStatement(sql);//???
pstmt.setString(1, username);
pstmt.setString(2, password);
rs=pstmt.executeQuery();//这才是正八经将语句发给了mysql
if(rs.next())//开始找有没有符合的
{
flag=true;
}else{
System.out.println("不能找到该人");
}
this.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
//困了,睡觉,不明白的是找是找到了,找到了,没点显示吗?在flag=ture那写个 System.out.println("找到该人");???我自己看到了有啥用,我想给页面跳到别的页面才行啊,嗯,明天再写写。