MySQL之JDBC插入、修改、删除封装集于一个方法
1、 先建四个包
① com.tz.entity 实体包
② com.tz.dao 数据访问层包
-> com.tz.dao.impl 实现包
③ com.tz.util 工具类包
④ com.tz.test 测试包
com.tz.entity 实体包
新建 Student 实体类
- package com.tz.entity;
- public class Student{
- private int id;
- private String name;
- private String sex;
- private String pwd;
- private String address;
- public Student() {
- }
- public Student(int id, String name, String sex, String pwd, String address) {
- this.id = id;
- this.name = name;
- this.sex = sex;
- this.pwd = pwd;
- this.address = address;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public String getPwd() {
- return pwd;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
//- public String toString() {
- return "Student [id=" + id + ", name=" + name + ", sex=" + sex
- + ", pwd=" + pwd + ", address=" + address + "]";
- }
- }
com.tz.dao 数据访问层包
新建StudentDao 接口
- package com.tz.dao;
- import com.tz.entity.Student;
- /**
- * 规范 方法名
- * 方法有几个,要做哪些方法
- */
- public interface StudentDao {
- // 增加一个学生
- void addStudent(Student s);
- // 删除一个学生
- int deleteStudent(int id);
- // 修改一个学生
- Student updateStudent(Student s);
- // 查询学生
- Student findById(int id);
- }
新建BaseDao 类
- package com.tz.dao;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import com.tz.util.DBUtil;
- /**
- * 做所有dao的父类,封装他们基本的增删改操作,
- * 因为所有的Dao的增删改操作都一样。
- * 只是换了 不同的 sql语句和传入的参数。
- */
- public class BaseDao {
- private Connection conn;
- private PreparedStatement ps;
- private ResultSet rs;
- /**
- * 封装 任何增删改
- * sql 传入方法的Sql语句
- * Object[] Sql语句里面的参数,因为参数的类型不同 所以Object
- */
- public int toUpdate(String sql,Object[] obs){
- int a=0;
- try {
- conn=DBUtil.getConn();
- ps=conn.prepareStatement(sql);
- // 循环 赋值参数
- if(obs!=null&&obs.length>0){
- for(int i=0;i<obs.length;i++){
- ps.setObject(i+1, obs[i]);
- }
- }
- a=ps.executeUpdate();
- return a;
- } catch (Exception e) {
- e.printStackTrace();
- }finally{
- DBUtil.closeConn(conn, ps, rs);
- }
- return a;
- }
- }
com.tz.dao 数据访问层
-> com.tz.dao.impl 实现包
新建StudentDaoImpl 类
- package com.tz.dao.impl;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import com.tz.dao.BaseDao;
- import com.tz.dao.StudentDao;
- import com.tz.entity.Student;
- import com.tz.util.DBUtil;
- /**
- * StudentDao的实现
- * Java是单继承的 只能继承一个父类
- * 但是可以实现多个接口
- * 写 先继承后实现
- */
- public class StudentDaoImpl extends BaseDao implements StudentDao{
- // 连接组件
- private Connection conn;
- // 得到预编译的发送Sql语句的组件
- private PreparedStatement ps;
- // 处理结果集的组件
- private ResultSet rs;
- public void addStudent(Student s) {
- String sql="insert into student(sid,sname,pwd,sex,address) values(?,?,?,?,?)";
- Object[] obs={s.getId(),s.getName(),s.getPwd(),s.getSex(),s.getAddress()};
- toUpdate(sql, obs);
- }
- public int deleteStudent(int id) {
- String sql="delete from student where sid=?";
- Object[] obs={id};
- int a=toUpdate(sql, obs);
- return a;
- }
- public Student updateStudent(Student s) {
- String sql="update student set sname=?,pwd=?,sex=?,address=? where sid=?";
- Object[] obs={s.getName(),s.getPwd(),s.getSex(),s.getAddress(),s.getId()};
- toUpdate(sql, obs);
- Student student=findById(s.getId());
- return student;
- }
- public Student findById(int id) {
- Student s=new Student();
- try {
- conn=DBUtil.getConn();
- String sql="select * from student where sid=?";
- ps=conn.prepareStatement(sql);
- ps.setObject(1, id);
- // 会返回一个int值 表示 你影响了 几行数据
- rs=ps.executeQuery();
- while(rs.next()){
- s.setId(rs.getInt("sid"));
- s.setName(rs.getString("sname"));
- s.setPwd(rs.getString("pwd"));
- s.setAddress(rs.getString("address"));
- s.setSex(rs.getString("sex"));
- }
- return s;
- } catch (SQLException e) {
- e.printStackTrace();
- }finally{
- DBUtil.closeConn(conn, ps, rs);
- }
- return s;
- }
- }
com.tz.util 工具类包
新建 db.properties 配置文件
- #Mysql JDBC的连接配置
- driver=com.mysql.jdbc.Driver
- url=jdbc:mysql://localhost:3306/tz
- username=root
- pwd=root123
新建 DBUtil.java 类
- package com.tz.util;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Properties;
- /**
- * DBUtil负责得到数据库的连接
- * 做成一个工具类(如果是工具类 一般不会实例化new)
- * 工具方法 一般会做成静态方法
- */
- public class DBUtil {
- private static String driver;
- private static String url;
- private static String username;
- private static String pwd;
- // static可以写静态的代码块
- static{
- // 实例化 属性集
- Properties p=new Properties();
- // 从本类的字节码文件中根据路径得到一个输入流
- InputStream is=DBUtil.class.getClassLoader()
- .getResourceAsStream("com/tz/util/db.properties");
- try {
- // 属性集 去加载输入流
- p.load(is);
- driver=p.getProperty("driver");
- url=p.getProperty("url");
- username=p.getProperty("username");
- pwd=p.getProperty("pwd");
- // 记载驱动
- Class.forName(driver);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- // 封装一个得到 Connection的方法
- public static Connection getConn() throws SQLException{
- return DriverManager.getConnection(url, username, pwd);
- }
- // 封装一个关闭连接的方法
- public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs){
- if(conn!=null){
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(ps!=null){
- try {
- ps.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(rs!=null){
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
com.tz.test 测试包
- package com.tz.test;
- import org.junit.Test;
- import com.tz.dao.StudentDao;
- import com.tz.dao.impl.StudentDaoImpl;
- import com.tz.entity.Student;
- public class TestStudentDao {
- @Test
- public void testadd(){
- // 向上造型
- StudentDao dao=new StudentDaoImpl();
- Student s=new Student(1010,"刘能","男","123","铁岭象牙山");
- dao.addStudent(s);
- }
- @Test
- public void testdelete(){
- StudentDao dao=new StudentDaoImpl();
- int a=dao.deleteStudent(1010);
- System.out.println(a);
- }
- @Test
- public void testupdate(){
- StudentDao dao=new StudentDaoImpl();
- Student s=new Student(1010,"刘德华","男","123","中国香港");
- Student st=dao.updateStudent(s);
- System.out.println(st);
- }
- @Test
- public void testfindByid(){
- StudentDao dao=new StudentDaoImpl();
- Student st=dao.findById(1010);
- System.out.println(st);
- }
- }
MySQL之JDBC插入、修改、删除封装集于一个方法的更多相关文章
- java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)
插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...
- MYSQL基础01(新增,修改,删除)
首先说明一下,本人之前一直都是用MSSQL,由于工作原因,每天写上百条sql语句,并持续了几年;由于换了工作目前主要接触的MYSQL;所以现在开始学习MYSQL. 我的学习计划很简单,我在MSSQL使 ...
- mysql DML 数据插入,删除,更新,回退
mysql插入,删除,更新地址:https://wenku.baidu.com/view/194645eef121dd36a32d82b1.html http://www.cnblogs.com/st ...
- Hibernate 插入,修改,删除,查询语句
/* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...
- mysql 数据库 添加查询 修改 删除
cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据) 一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql 或者通过一键集成工具 打开mysql命令行 ...
- MySQL防止重复插入唯一限制的数据 4种方法
MySQL防止重复插入唯一限制的数据,下面我们逐一分析 : 1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保 ...
- 解决mysql表不能查询修改删除等操作并出现卡死
问题现象1:进程wait卡住 测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... ...
- 图文并解Word插入修改删除批注
.插入批注 首先选择对象,比如部分文字[hd1] ,之后执行这样的操作:"插入"→"批注":插入的批注处于编辑状态,可以直接输入批注的文字即可;图解如下: .修 ...
- jdom 插入 修改 删除
创建XML文档 XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点.而每个子元素都是一个Element对象,对象可以向下包含. 1 因此我们可以通过先创建元素再将元素添加 ...
随机推荐
- Java网络编程探究|乐字节
大家好,我是乐字节小乐,上次给大家讲述了Java中的IO流之输出流|乐字节,本文将会给大家讲述网络编程. 主要内容如下: 网络 网络分层 IP位置 端口port 网络编程 一. 网络 1.概念 网络即 ...
- Deepin安装前分区总结
linux的分区的概念应该这么理解,为某个目录创建/挂载分区,比如为/home创建/挂载到某个分区上: 1.需要/boot分区,1.5G: 2./分区,100G:[会自动创建其他目录如/srv,/ro ...
- [转帖]上云测试,这些关键点你get 到没有
上云测试,这些关键点你get 到没有 https://www.cnblogs.com/mypm/p/10852656.html?tdsourcetag=s_pcqq_aiomsg sticky 还有s ...
- 虚拟环境搭建Django项目
下载虚拟环境包 pip install virtualenv 创建虚拟环境 virtualenv env 进入env文件夹 cd env 进入Scripts文件夹 cd Scripts 启动虚拟环 ...
- WUSTOJ 1336: Lucky Boy(Java)博弈
题目链接:1336: Lucky Boy 参考博客:LUCKY BOY 博弈--HandsomeHow Description Recently, Lur have a good luck. He i ...
- PAT甲级题分类汇编——计算
本文为PAT甲级分类汇编系列文章. 计算类,指以数学运算为主或为背景的题. 题号 标题 分数 大意 1058 A+B in Hogwarts 20 特殊进制加法 1059 Prime Factors ...
- Spring常用jar包功能详解
很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...
- lock的等效代码
1.lock的等效代码 在.NET的多线程程序中,经常会遇到lock关键字来控制同步,比如下列代码: private object o = new object(); public void Work ...
- Windows下的Android Studio环境搭建、安装使用
https://jingyan.baidu.com/article/20b68a88ff2ca4796cec6232.html https://blog.csdn.net/jklinux/articl ...
- C#用户控件实战01_CSS布局
很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...