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 因此我们可以通过先创建元素再将元素添加 ...
随机推荐
- idea添加svn项目的两种方法
1.是直接用svn客户端检出后,在idea直接打开其项目. 2.直接在idea里面拉取svn的项目
- TCP/UDP网络编程调试助手下载
下载地址:可能需要谷歌:软件干净,挺好用的,如果有更好的,欢迎留言! https://www.waveshare.com/wiki/File:TCP-UDP-Debug.7z
- LeetCode 278. 第一个错误的版本(First Bad Version)
278. 第一个错误的版本 LeetCode278. First Bad Version 题目描述 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每 ...
- Cookies和Sessions
Cookie和Session 为什么会有cookie和session? 由于http协议是无状态的 无法记住用户是谁,cookie主要是在浏览器上记录客户的状态,session主要是用来在服务端记录客 ...
- (一)Shiro,久闻其名,而今初相识
文章目录 shiro简介 功能介绍 从外部看 Shiro 架构 从内部看 Shiro 架构 多说一句,在学习shiro之前,我觉得应该先用 filter ,自己动手写过粗粒度的权限系统,而不要一上来就 ...
- QT json数据的应用(cJSON)
json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...
- Python进阶:metaclass谈
metaclass 的超越变形特性有什么用? 来看yaml的实例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' ...
- AVR单片机教程——序言
我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西 ...
- 使用Docker发布Asp.Net Core程序到Linux
CentOS安装Docker 按照docker官方文档来,如果有之前安装过旧版,先卸载旧版,没有的话,可跳过. sudo yum remove docker \ docker-client \ doc ...
- IServiceBehavior IContractBehavior IEndpointBehavior IOperationBehavior
using System; using System.Collections.ObjectModel; using System.Reflection; using System.ServiceMod ...