今天學了前后台的連接。之前腦子一團漿糊,就連后端對數據庫的操作都不熟。就一點點來寫吧,會多少寫多少,錯了以后再改吧,可能進步比較慢,但肯定會慢慢好起來的。
以前一直對數據庫連接就不太懂。先從數據庫連接寫起。

疑問點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("找到該人");???我自己看到了有啥用,我想給頁面跳到別的頁面才行啊,嗯,明天再寫寫。
