职责分离原则- -每个类职责尽可能的单一。
1.界面,逻辑的分离
2.数据,功能的分离
3.对数据访问来说,对表的操作分离。
例如对数据库wang下面的两个表login和fruit完成增删改查的操作
login表:
fruit表:
建立三个包分别完成表的操作、对数据的访问、界面。
在com.itnba.maya.dal包中将与数据库的连接与操作分离,同时不同表的操作也分离开。
在com.itnba.maya.data包中将对不同表的数据访问分离。
在com.itnba.maya.ui中进行界面操作。
首先建立一个类DBConnection。
package com.itnba.maya.dal; import java.sql.*; public class DBConnection { private static String drv = "com.mysql.jdbc.Driver"; private static String url = "jdbc:mysql://127.0.0.1:3306/wang?characterEncoding=GBK"; private static String uid="root"; private static String pwd= ""; public static Connection getConnection() throws Exception { Class.forName(drv); Connection conn = DriverManager.getConnection(url,uid,pwd); return conn; } }
对表的访问分别建立fruit和login,其中login:
package com.itnba.maya.data; public class login { private String username; private String name; private String password; private double account; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public double getAccount() { return account; } public void setAccount(double account) { this.account = account; } }
分别建立对表的操作FruitDao和LoginDao;其中LoginDao:
package com.itnba.maya.dal; import java.sql.*; import java.util.*; import com.itnba.maya.data.login; public class LoginDao { private Connection conn; private PreparedStatement sta; private ResultSet rs; public LoginDao() throws Exception { conn = DBConnection.getConnection();//构造函数,当在界面new一个LoginDao()时,与数据库连接。 } public void delete(String key)//删除方法 { try{ String sql = "delete from login where key=?"; sta = conn.prepareStatement(sql); sta.setString(1, key); sta.executeUpdate(); } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void insert(String name,String userName,String password ,double account) //输入方法 { try{ String sql = "insert into login values (?,?,?,?)"; sta = conn.prepareStatement(sql); sta.setString(1, userName); sta.setString(2, name); sta.setString(3, password); sta.setDouble(4, account); sta.executeUpdate(); } catch(Exception e){ e.printStackTrace(); } finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void insert(login data)//输入方法的重载,当传入是login类型的参数时,通过调用上面的insert()方法完成数据的写入。 { insert(data.getUsername(),data.getName(),data.getPassword(),data.getAccount()); } public void update(String userName,String name,String password ,double account) { try{ String sql = "update login set name = ?,password = ?,account = ?where username = ?"; sta = conn.prepareStatement(sql); sta.setString(1, name); sta.setString(2, password); sta.setDouble(3, account); sta.setString(4, userName); sta.executeUpdate(); } catch(Exception e) { e.printStackTrace(); } finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void Update(login data){ update(data.getUsername(),data.getName(),data.getPassword(),data.getAccount()); } public ArrayList<login> select() //对表全部查看时,需要用一个集合接收数据库中表的内容 { ArrayList<login> list = new ArrayList<login>(); String sql = "select * from login"; try{ sta = conn.prepareStatement(sql); rs = sta.executeQuery(); while(rs.next()) //将表中的数据,存到集合中。 { login data = new login(); data.setUsername(rs.getString(1)); data.setName(rs.getString(2)); data.setPassword(rs.getString(3)); data.setAccount(rs.getDouble(4)); list.add(data); } } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return list; } public login select (String key)//通过主键查一条数据时 { login data = null ; try{ String sql = "select * from login where username = ?"; sta = conn.prepareStatement(sql); sta.setString(1, key); rs = sta.executeQuery(); while(rs.next()) { data = new login(); data.setUsername(rs.getString(1)); data.setName(rs.getString(2)); data.setPassword(rs.getString(3)); data.setAccount(rs.getDouble(4)); } } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return data; } }