今天學了前後臺的連接。之前腦子一團漿糊,就連後端對資料庫的操作都不熟。就一點點來寫吧,會多少寫多少,錯了以後再改吧,可能進步比較慢,但肯定會慢慢好起來的。 以前一直對資料庫連接就不太懂。先從資料庫連接寫起。 疑問點1:之前就是不明白為什麼要有一個con,而且還是Connection類型的, 理解:你 ...
今天學了前後臺的連接。之前腦子一團漿糊,就連後端對資料庫的操作都不熟。就一點點來寫吧,會多少寫多少,錯了以後再改吧,可能進步比較慢,但肯定會慢慢好起來的。
以前一直對資料庫連接就不太懂。先從資料庫連接寫起。
疑問點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("找到該人");???我自己看到了有啥用,我想給頁面跳到別的頁面才行啊,嗯,明天再寫寫。