1.mvc 是一種使用MVC(Model View Controller 模型-視圖 -控制器)設計web程序的應用程序模式。MVC分層同時簡化了分組開發不同的開發人員可以同時開發視圖,控制器邏輯和業務邏輯。
2.內容提要:Model 是應用程序中用於處理程序數據邏輯的部分,通產邏輯部分用於處理應用程序數據邏輯部分。 通常模型對象負責在數據庫中存儲對象。
- View 是應用程序中處理數據顯示部分。通常視圖是依據模型數據創建的。
- Controller 分層有助於管理應用程序,可以一時間內集中精力關注一個部分。
- java通過JDBC操作mysql操作數據庫,實現用戶的登陸和註冊功能。通過MVC編程的思想不同的登陸和註冊的功能進行封裝,使得程序的輸入,處理,和輸出分開。
- JDBC如何操作數據庫,請參見我的令一篇博文。java 使用 jdbc 操作mysql (快速瞭解)
3.操作結構
M:使用JDBC實現查找和添加的數據的一個類。其中查找和添加這兩個方法返回boolean類型的值。
V:給予M的一個視圖,通過判斷M中返回值來進行判斷登陸註冊的結果,並輸出結果。
C:通過接受用戶的輸入,實現人機交互。
4.結構實現
·M部分:
- 使用properties 文件抽取文件參數(用於儲存JDBC和mysql的連接信息)
- 將JDBC連接,編譯,關閉等操作封裝,用作工具類
- 創建一個實體類用於存貯數據庫中對應的參數(本文是用戶名和密碼)
·代碼實現
1.當前工作目錄下建立jdbc.properties文件,文件中添加如下內容:
driverClass=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/1_mydata user=root password=123456注意:driverClass,url,user,password爲JDBC與mysql數據庫建立連接時使用的信息,請填寫自己配置信息
2.封裝工具類
package lesson15_jdbc; import java.sql.*; import java.util.ResourceBundle; public class jdbc_FZ { //獲取連接 public static Connection get_Connection(){ //讀取properties中的數據 ResourceBundle bundle=ResourceBundle.getBundle("jdbc"); String driverClass=bundle.getString("driverClass"); String url=bundle.getString("url"); String user=bundle.getString("user"); String password=bundle.getString("password"); Connection conn=null; try{ //加載驅動 Class.forName(driverClass); //獲取鏈接 conn= DriverManager.getConnection(url,user,password); }catch (ClassNotFoundException e){ e.printStackTrace(); }catch (SQLException e){ e.printStackTrace(); } return conn; } //關閉所有資源 public static void closeAll(PreparedStatement pst,ResultSet res,Connection coon){ closeResultSet(res); closepst(pst); closeCoon(coon); } //關閉預編譯 public static void closepst(PreparedStatement pst){ try{ pst.close(); }catch (SQLException e){ e.printStackTrace(); } } //關閉結果集合 public static void closeResultSet(ResultSet res){ if (res!=null){ try{ res.close(); }catch(SQLException e){ e.printStackTrace(); } } } //關閉連接 public static void closeCoon(Connection coon){ if(coon!=null){ try{ coon.close(); }catch (SQLException e){ e.printStackTrace(); } } } }
3. 實體類建立:
package lesson15_jdbc; public class User { private String username;//用戶名 private String password;//密碼 public void setUsername(String name){ this.username=name; } public String getUsername(){ return this.username; } public void setPassword(String password){ this.password=password; } public String getPassword(){ return this.password; } }4. Model的建立package lesson15_jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class jdbc_dengluzhuce { //插入 public static boolean add(User user){ Connection conn=jdbc_FZ.get_Connection(); String sql="insert into user(username,password) value(?,?)"; int count=0; try{ PreparedStatement pst=conn.prepareStatement(sql); String username = user.getUsername(); String password = user.getPassword(); pst.setString(1,username); pst.setString(2, password); count = pst.executeUpdate(); pst.close(); conn.close(); }catch (SQLException e){ e.printStackTrace(); } return count==1?true:false; } //查詢 public static boolean login(User user){ Connection conn=jdbc_FZ.get_Connection(); String sql="select * from user where username=? and password=?"; boolean flag=false; try{ PreparedStatement pst=conn.prepareStatement(sql); String username = user.getUsername(); String password = user.getPassword(); pst.setString(1,username); pst.setString(2, password); ResultSet res = pst.executeQuery(); if (res!=null){ flag=true; } jdbc_FZ.closeAll(pst,res,conn); }catch (SQLException e){ e.printStackTrace(); } return flag; } }
·V部分
package lesson15_jdbc; public class T { //登陸 public boolean login(User user){ return jdbc_dengluzhuce.add(user); } //註冊 public boolean register(User user){ return jdbc_dengluzhuce.login(user); } }
·C部分
package lesson15_jdbc; import java.util.Scanner; public class test2 { public static void main(String[] args) { Scanner input=new Scanner(System.in); User user =new User(); System.out.println("***歡迎進入用戶登陸註冊系統***"); System.out.println("請選擇需要的操作:1.註冊 2.登陸"); int op=input.nextInt(); switch (op){ case 1: while(true){ System.out.println("請輸入用戶名:"); String username=input.next(); System.out.println("請輸入密碼:"); String password=input.next(); user.setUsername(username); user.setPassword(password); boolean result=T.register(user); if (result){ System.out.println("註冊成功!"); break; }else{ System.out.println("註冊失敗!"); } } break; case 2: while(true){ System.out.println("請輸入用戶名:"); String username=input.next(); System.out.println("請輸入密碼:"); String password=input.next(); user.setUsername(username); user.setPassword(password); boolean result=T.login(user); if (result){ System.out.println("登陸成功!"); break; }else{ System.out.println("登陸失敗!"); } } break; } } }