JDBC的分层

7 篇文章 0 订阅

学生表(student)结构:

sid sname sage sdid sbir sphone


实体类

package entity;

import java.util.Date;

public class Student {
	private int sid;
	private String sname;
	private int sage;
	private int did;
	private Date sbir;	
	private String sphone;
	
	
	public Student() {
		
	}	
	
	public Student(int sid, String sname, int sage, int did, Date sbir,String sphone) {
		this.sid = sid;
		this.sname = sname;
		this.sage = sage;
		this.did = did;
		this.sbir = sbir;
		this.sphone=sphone;
	}

	public String getSphone() {
		return sphone;
	}

	public void setSphone(String sphone) {
		this.sphone = sphone;
	}

	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getSage() {
		return sage;
	}
	public void setSage(int sage) {
		this.sage = sage;
	}
	public int getDid() {
		return did;
	}
	public void setDid(int did) {
		this.did = did;
	}
	public Date getSbir() {
		return sbir;
	}
	public void setSbir(Date sbir) {
		this.sbir = sbir;
	}	
}


连接数据库的工具类

package util;

import java.sql.*;

public class ConnDB {
	private static String URL="jdbc:mysql://localhost/test_jdbc";
	private static String USERNAME="root";
	private static String PASSWORD="123456";
	private static Connection conn=null;
	
	static{
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConn(){
		try {
			conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}	
}


DAO

package dao;

import java.util.ArrayList;

import entity.Student;

public interface StudentDao {	
	
	//student通过id和phone来登录(0 成功 1用户名错误 2密码错误)
	public int login(int id,String phone);
	

	//保存一个student对象	
	public boolean saveStudent(Student s);
	
	
	//通过id查询一个student对象
	public Student getStudentByID(int id);
	
	//通过name查询student对象
	public Student getStudentByName(String name);	
	
	
	//查询所有的student对象
	public ArrayList<Student> getAllStudent();
	
	
	//通过id更新一个student对象
	public boolean updateStudent(int id,Student s);
	
	
	//通过id删除一个student对象
	public boolean deleteStudent(int id);
	
	//关闭资源
	public void close();
	
}

DAO的实现

package dao;

import java.sql.*;
import java.util.ArrayList;

import util.ConnDB;

import entity.Student;

public class StudentDaoImpl implements StudentDao{
	private Connection conn;
	private PreparedStatement psta;
	private ResultSet rs;

	//根据id删除学生
	public boolean deleteStudent(int id) {
		boolean flag=false;
		conn=ConnDB.getConn();
		String sql="delete from student where sid=?";
		try {
			psta=conn.prepareStatement(sql);
			psta.setInt(1, id);
			if(psta.executeUpdate()>0){
				flag=true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		this.close();
		return false;
	}

	
	//查询所有的学生
	public ArrayList<Student> getAllStudent() {
		ArrayList<Student> list=new ArrayList<Student>();
		conn=ConnDB.getConn();
		String sql="select * from student";
		try {
			psta=conn.prepareStatement(sql);
			rs=psta.executeQuery();
			while(rs.next()){
				Student s=new Student();
				s.setSid(rs.getInt("sid"));
				s.setSname(rs.getString("sname"));
				s.setSage(rs.getInt("sage"));
				s.setDid(rs.getInt("did"));
				s.setSbir(rs.getDate("sbir"));
				s.setSphone(rs.getString("sphone"));
				list.add(s);				
			}			
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		this.close();
		return list;
	}

	
	//根据id查询学生
	@Override
	public Student getStudentByID(int id) {
		Student s=new Student();
		conn=ConnDB.getConn();
		String sql="select * from student where sid=?";
		try {
			psta=conn.prepareStatement(sql);
			psta.setInt(1, id);
			rs=psta.executeQuery();
			if(rs.next()){
				s.setSid(rs.getInt("sid"));
				s.setSname(rs.getString("sname"));
				s.setSage(rs.getInt("sage"));
				s.setDid(rs.getInt("did"));
				s.setSbir(rs.getDate("sbir"));
				s.setSphone(rs.getString("sphone"));								
			}else{
				s=null;
			}		
			
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return s;
	}

	
	//根据名字查询学生
	@Override
	public Student getStudentByName(String name) {
		Student s=new Student();
		conn=ConnDB.getConn();
		String sql="select * from student where sname=?";
		try {
			psta=conn.prepareStatement(sql);
			psta.setString(1, name);
			rs=psta.executeQuery();
			if(rs.next()){
				s.setSid(rs.getInt("sid"));
				s.setSname(rs.getString("sname"));
				s.setSage(rs.getInt("sage"));
				s.setDid(rs.getInt("did"));
				s.setSbir(rs.getDate("sbir"));
				s.setSphone(rs.getString("sphone"));								
			}else{
				s=null;
			}		
			
		} catch (SQLException e) {
			e.printStackTrace();
		}		
		return s;
	}

	
	//保存学生
	@Override
	public boolean saveStudent(Student s) {
		boolean flag=false;
		conn=ConnDB.getConn();
		String sql="insert into student(sid,sname,sage,sbir,sdid,sphone) values(?,?,?,?,?,?)";
		try {
			psta=conn.prepareStatement(sql);
			psta.setInt(1, s.getSid());
			psta.setString(2, s.getSname());
			psta.setInt(3, s.getSage());
			//java的date转sql的date
			psta.setDate(4, new java.sql.Date(s.getSbir().getTime()));
			psta.setInt(5, s.getDid());
			psta.setString(6, s.getSphone());
			if(psta.executeUpdate()>0){
				flag=true;
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		this.close();
		return flag;
	}

	//更新学生
	@Override
	public boolean updateStudent(int id, Student s) {
		boolean flag=false;
		conn=ConnDB.getConn();
		String sql="update student set sname=?,sage=?,sdid=?,sbir=?,sphone=? where sid=?";
		try {
			psta=conn.prepareStatement(sql);			
			psta.setString(1, s.getSname());
			psta.setInt(2, s.getSage());
			psta.setInt(3, s.getDid());
			//java的date转sql的date
			psta.setDate(4, new java.sql.Date(s.getSbir().getTime()));			
			psta.setString(5, s.getSphone());
			psta.setInt(6, s.getSid());
			if(psta.executeUpdate()>0){
				flag=true;
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}	
		this.close();
		return flag;
	}

	//用户登录
	@Override
	public int login(int id, String phone) {
		int n=3;//系统内部错误
		conn=ConnDB.getConn();
		String sql="select sphone from student where sid=?";
		try {
			psta=conn.prepareStatement(sql);
			psta.setInt(1, id);
			rs=psta.executeQuery();
		
		if(rs.next()){
			if(phone.equals(rs.getString(1))){
				n=0;
			}else{
				n=2;
			}
		}else{
			n=1;
		}
		
		} catch (SQLException e) {
			e.printStackTrace();
		}
		this.close();
		return n;
	}

	
	@Override
	public void close() {
		try {
			if(conn!=null){
				conn.close();				
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		if(psta!=null){
			try {
				psta.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}		
	}
}

测试类

package test;

import java.util.Date;

import dao.StudentDao;
import dao.StudentDaoImpl;
import entity.Student;

public class Test {
	public static void main(String[] args) {
		Student s=new Student(1001,"zhangsan",18,1,new Date(),"12345678912");
		StudentDao	sd=new StudentDaoImpl();
		Boolean flag=sd.saveStudent(s);
		
		if(flag){
			System.out.println("保存成功");
		}else{
			System.out.println("保存失败");
		}		
	}
}


package test;

import java.util.Scanner;

import dao.StudentDao;
import dao.StudentDaoImpl;

public class Test_login {
	public static void main(String[] args) {
		System.out.println("请输入id后回车输入用户电话");
		Scanner sc=new Scanner(System.in);
		int id=sc.nextInt();
		String phone=sc.next();
		System.out.println("id:"+id+" phone:"+phone);
		StudentDao sd=new StudentDaoImpl();
		int n=sd.login(id, phone);
		if(n==0){
			System.out.println("登录成功");
		}else if(n==1){
			System.out.println("用户名错误");
		}else if(n==2){
			System.out.println("密码错误");
		}else if(n==3){
			System.out.println("系统内部错误");
		}
	}
}



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值