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 因此我们可以通过先创建元素再将元素添加 ...
随机推荐
- Ansible-Ad_Hoc临时命令的使用
Ad_Hoc临时命令的使用 1.使用场景: 所有的临时获取信息的都可以使用,比如节前健康检查.临时更新配置文件. 2.用法: ansible -i 主机 -m 模块 选项 3.常用的命令选项: -v ...
- shiro 的session持久化
对于分布式系统,一般都牵扯到Session共享问题,而想实现Session共享,就要实现Session的持久化操作,即是将内存中的Session持久化至缓存数据库. SessionDAO是Shiro提 ...
- MySQL面试 - 读写分离
MySQL面试 - 读写分离 面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 ...
- laravel框架视图中常用的逻辑结构forlese,foreach,ifelse等
if 和else @if($name === 1) 这个数字是1 @else 这个数字非1 @endif switch @switch($name) @case(1) 变量name == 1 @bre ...
- MySQL容量规划和性能测试
性能容量关键指标: 每秒tps,峰值tps 基础数据量,日均增长数据量 最大连接数 内存分配 IOPS 重点关注指标: 业务指标: 每秒并发用户请求.每秒订单数.用户请求响应时长 折算成性能指标: q ...
- 从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)
Qt 是 C++ 的库,Qt 在 ansi C++ 的基础上进行了一点扩展. 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚.本文舍弃IDE或qmake.cmake等工具的束缚, ...
- Golang高并发抓取HTML图片
Golang高并发抓取HTML图片 使用准备 1.安装Golang 2.下载爬虫包 go get -v github.com/hunterhug/marmot/util go get -v githu ...
- 【转载】使用Jedis操作redis
Redis是一个开源的Key-Value数据缓存,和Memcached类似. Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted se ...
- Windows下的Android Studio环境搭建、安装使用
https://jingyan.baidu.com/article/20b68a88ff2ca4796cec6232.html https://blog.csdn.net/jklinux/articl ...
- C#使用任务并行库(TPL)
TPL(Task Parallel Library) 任务并行库 (TPL) 是 System.Threading和 System.Threading.Tasks 命名空间中的一组公共类型和 API. ...