2021-04-01

javaweb连接数据库实现数据的增删改查
1、连接数据库

public class ConnDemo {
	
	//数据库链路层
	//此处应该有连接数据库和关闭数据库的方法---需要方法对连接数据库的代码进行封装,需要建立连接直接调用方法
	public static Connection con;
	public static Connection getCon() {
		// 1:加载驱动-通过反射加载驱动---注意一定要将驱动包加入项目中否则类找不到
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			// 2:通过驱动管理员---大管家建立连接通道
			con = DriverManager.getConnection(
					"jdbc:sqlserver://127.0.0.1:1433;databaseName=student", "sa",
					"123");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}
	//关闭数据库的方法
	public static void getClose() {
		try {
			if (con!=null) {
				con.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	
}

创建实体层(数据库表的映射类)

public class StuInfo {
		/**
		 * 实体层需要和数据库中的表进行映射
		 * 表------类
		 * 表中字段----类的成员变量
		 * 
		 * 原则:所有的成员变量都是私有的,只向外提供公共的访问方法
		 */
	private int  stuId;
	private String stuName;
	private int stuAge;
	private String stuAddress;
	//构造方法--全参数构造方法 ---只有stuId一个参数的构造方法,空参数构造
	//alt+shift+s+o
	public StuInfo(int stuId, String stuName, int stuAge, String stuAddress) {
		super();
		this.stuId = stuId;
		this.stuName = stuName;
		this.stuAge = stuAge;
		this.stuAddress = stuAddress;
	}
	
	public StuInfo(String stuName, int stuAge, String stuAddress) {
		super();
		this.stuName = stuName;
		this.stuAge = stuAge;
		this.stuAddress = stuAddress;
	}

	public StuInfo() {
		super();
	}
	public StuInfo(int stuId) {
		super();
		this.stuId = stuId;
	}
	//需要向外提供公共的访问方法getter和setter方法+alt+shift+s+r
	public int getStuId() {
		return stuId;
	}
	public void setStuId(int stuId) {
		this.stuId = stuId;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getStuAge() {
		return stuAge;
	}
	public void setStuAge(int stuAge) {
		if (stuAge<0) {
			System.out.println("请注意年龄不能小于零!");
		}else {
			this.stuAge = stuAge;
		}
	}
	public String getStuAddress() {
		return stuAddress;
	}
	public void setStuAddress(String stuAddress) {
		this.stuAddress = stuAddress;
	}
	
	
	
}

创建接口,定义增删改查的方法

public interface DBdao {
	//接口中方法全部都是抽象的
	//查询所有学生信息的方法--不需要对四个参数做任何传递--方法不需要有参数
	public void selectAll();	
	//根据stuId学号查询学生信息  --需要传递学号--学号封装到StuInfo的stu实体中
	//所以需要有一个StuInfo stu的参数
	public void selectById(StuInfo stu);
	//增加学生信息的方法--需要传递四个参数--四个参数封装了StuInfo的stu实体中
	public void insert(StuInfo stu);
	//删除学生信息的方法--通过学号删除学--需要传递stuId--封装了StuInfo的stu实体中
	public void delete(StuInfo stu);
	//修改学生信息的方法--需要传递四个参数--四个参数封装了StuInfo的stu实体中
	public void update(StuInfo stu);
}

定义接口的实现类,书写增删改查代码

public class DBdaoImpl implements DBdao {

	private Connection con;

	@Override
	public void selectAll() {
		con = ConnDemo.getCon();
		// 3:通过连接通道对象con得到一个后台业务员的对象ps
		PreparedStatement ps;
		try {
			ps = con.prepareStatement("select * from stuInfo ");
			// 4:后台业务员的对象ps执行sql代码---类似于取钱
			ResultSet rs = ps.executeQuery();
			// 5:拿出ResultSet集合中的数据rs.next()-返回true证明有数据可以拿
			System.out.println("学号\t" + "姓名\t" + "年龄\t" + "家庭住址");
			while (rs.next()) {
				System.out.print(rs.getInt("stuId") + "\t");
				System.out.print(rs.getString("stuName") + "\t");
				System.out.print(rs.getInt("stuAge") + "\t");
				System.out.print(rs.getString("stuAddress") + "\t");
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnDemo.getClose();
		}
	}

	@Override
	public void selectById(StuInfo stu) {
		con = ConnDemo.getCon();
		// 3:通过连接通道对象con得到一个后台业务员的对象ps
		PreparedStatement ps;
		try {
			ps = con.prepareStatement("select * from stuInfo where stuId=? ");
			// 4给占位符进行赋值操作
			ps.setInt(1, stu.getStuId());
			// 5:后台业务员的对象ps执行sql代码---类似于取钱
			ResultSet rs = ps.executeQuery();
			// 6:拿出ResultSet集合中的数据rs.next()-返回true证明有数据可以拿
			System.out.println("学号\t" + "姓名\t" + "年龄\t" + "家庭住址");
			while (rs.next()) {
				System.out.print(rs.getInt("stuId") + "\t");
				System.out.print(rs.getString("stuName") + "\t");
				System.out.print(rs.getInt("stuAge") + "\t");
				System.out.print(rs.getString("stuAddress") + "\t");
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnDemo.getClose();
		}

	}

	@Override
	public void insert(StuInfo stu) {
		con = ConnDemo.getCon();
		// 3:通过连接通道对象con得到一个后台业务员的对象ps
		PreparedStatement ps;
		try {
			ps = con.prepareStatement("insert into stuInfo values(?,?,?)");
			// 4给占位符进行赋值操作
			ps.setString(1, stu.getStuName());
			ps.setInt(2, stu.getStuAge());
			ps.setString(3, stu.getStuAddress());
			// 5:后台业务员的对象ps执行sql代码---类似于取钱
			int i = ps.executeUpdate();
			// 6:对i做判断如果 大于0 怎插入 成功
			if (i > 0) {
				System.out.println("插入成功!");
			} else {
				System.out.println("插入失败!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnDemo.getClose();
		}

	}

	@Override
	public void delete(StuInfo stu) {
		con = ConnDemo.getCon();
		// 3:通过连接通道对象con得到一个后台业务员的对象ps
		PreparedStatement ps;
		try {
			ps = con.prepareStatement("delete from stuInfo where stuId=?");
			// 4给占位符进行赋值操作
			ps.setInt(1, stu.getStuId());
			// 5:后台业务员的对象ps执行sql代码---类似于取钱
			int i = ps.executeUpdate();
			// 6:对i做判断如果 大于0 怎插入 成功
			if (i > 0) {
				System.out.println("删除成功!");
			} else {
				System.out.println("删除失败!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnDemo.getClose();
		}

	}

	@Override
	public void update(StuInfo stu) {
		con = ConnDemo.getCon();
		// 3:通过连接通道对象con得到一个后台业务员的对象ps
		PreparedStatement ps;
		try {
			ps = con.prepareStatement("update stuInfo set stuName=?,stuAge=?," +
					"stuAddress=? where stuId=?");
			// 4给占位符进行赋值操作
			ps.setInt(4, stu.getStuId());
			ps.setString(1, stu.getStuName());
			ps.setInt(2, stu.getStuAge());
			ps.setString(3, stu.getStuAddress());
			// 5:后台业务员的对象ps执行sql代码---类似于取钱
			int i = ps.executeUpdate();
			// 6:对i做判断如果 大于0 怎插入 成功
			if (i > 0) {
				System.out.println("修改成功!");
			} else {
				System.out.println("修改失败!");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			ConnDemo.getClose();
		}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值