jdbc 工具类的抽取

jdbc工具类的抽取。 JdbcUtils类:import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle;//使用配置文件public 阅读详情

将用户表类实现的增删改查等方法抽取出来封装到工具类里面,使得调用起来更方便,将Statement改成封装后的PreparedStatement,使得调用时写的 sql 语句更清晰且不易搞错,也避免了sql注入的问题,使用Statement的话在地址栏后面加上:'or' 1 ‘=’ 1就可以轻易登录成功,而PreparedStatement封装了sql语句,故巧妙解决了此问题。具体见下述代码,先看目录结构:


User类代码如下:

package com.yibin.cn.dao.entity;

import java.util.Date;

public class User implements java.io.Serializable{
	private Integer id;
	private String name;
	private String password;
	private String sex;
	private Date birthday;
	private String address;
	private String picturePath;

	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

	public User(Integer id, String name, String password, String sex,
			Date birthday, String address, String picturePath) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		this.sex = sex;
		this.birthday = birthday;
		this.address = address;
		this.picturePath = picturePath;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getPicturePath() {
		return picturePath;
	}

	public void setPicturePath(String picturePath) {
		this.picturePath = picturePath;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password
				+ ", sex=" + sex + ", birthday=" + birthday + ", address="
				+ address + ", picturePath=" + picturePath + "]";
	}

}


接口类 IUserDao 代码如下:

package com.yibin.cn.dao.entity;


import java.util.List;

import utils.Page;


public interface IUserDao {
	/***
	 * 根据用户名和密码查询一个用户信息,用于验证登录
	 * 
	 * @param user
	 * @return
	 */
	public User getUserByNameAndPassword(User user) ;

	/***
	 * 方法功能说明:添加用户
	 * 
	 * @param user
	 * @return
	 */
	public int save(User user) ;

	/***
	 * 方法功能说明:删除用户
	 * 
	 * @param user
	 * @return
	 */
	public int delete(User user) ;

	/***
	 * 方法功能说明:修改用户
	 * 
	 * @param user
	 * @return
	 */
	public int update(User user) ;

	//
	public List<User> listAll() ;

	public User getUserById(int id);
	
	/***
	 * 查询总记录条数
	 * @return 查询获取的记录条数,无则为0
	 */
	public int getCount();
	/***
	 * 查询某一页的详细数据
	 * @param currentPage 要查询的页码
	 * @param pageSize  每页记录数
	 * @return 成功则返回一页详细数据的集合,失败则返回空(null)
	 */
	public List<User> getOnePageInfo(int currentPage,int pageSize);
	/***
	 * 方法功能说明:把一页的全部信息都封装起来
	 * @param currentPage 要查询的页码
	 * @param pageSize  每页记录数
	 * @return
	 */
    public Page<User> getPage(int currentPage,int pageSize);
}


接口实现类 UserDaoImpl 如下:

package com.yibin.cn.dao.entity.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import utils.Page;

import com.yibin.cn.dao.entity.IUserDao;
import com.yibin.cn.dao.entity.User;
import com.yibin.cn.dao.utils.jdbcUtil;

public class UserDaoImpl implements IUserDao{
	/***
	 * 根据用户名和密码查询一个用户信息,用于验证登录
	 * 
	 * @param user
	 * @return
	 */
	public User getUserByNameAndPassword(User user) {
		User resUser = null;
		Connection con = null;// 局部变量要初始化才能被使用。
		PreparedStatement ps = null;
		ResultSet res = null;
		try {
			con = jdbcUtil.getConnection(); 
//SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` WHERE `name`='yi' AND `password`=666;			
			String loginCheckSql = "SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` WHERE `name`=? AND `password`=?";
			ps = con.prepareStatement(loginCheckSql);
			ps.setObject(1, user.getName());
			ps.setObject(2, user.getPassword());
			res = ps.executeQuery();
			while (res.next()) {
				// 封装到一个user对象中
				resUser = new User();
				resUser.setId(res.getInt("id"));
				resUser.setSex(res.getString("sex"));
				resUser.setName(res.getString("name"));
				resUser.setBirthday(res.getDate("birthday"));
				resUser.setPassword(res.getString("password"));
				resUser.setAddress(res.getString("address"));
				resUser.setPicturePath(res.getString("picture_path"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			jdbcUtil.closeAll(con,ps,res);
		}
		return resUser;
	}

	/***
	 * 方法功能说明:添加用户
	 * 
	 * @param user
	 * @return
	 */
	public int save(User user) {
//insertSql:INSERT INTO `user` VALUES (1,'男','保罗','19920809','123','美国洛杉矶','paul.jpg');			
		String insertSql = "INSERT INTO `user` VALUES (?,?,?,?,?,?,?)";
		Object[] objects = {
				user.getId(),user.getSex(),
				user.getName(),user.getBirthday(),
				user.getPassword(),user.getAddress(),
				user.getPicturePath()
		};
		return jdbcUtil.executeUpdate(insertSql, objects);
	}

	/***
	 * 方法功能说明:删除用户
	 * 
	 * @param user
	 * @return
	 */
	public int delete(User user) {
		String deleteSql = "DELETE FROM `user` where id=?";
        Object[] objects = {user.getId()};
        return jdbcUtil.executeUpdate(deleteSql, objects);
	}

	/***
	 * 方法功能说明:修改用户
	 * 
	 * @param user
	 * @return
	 */
	public int update(User user) {
// updateSql:UPDATE `user` SET `sex`='男',`name`='dd',`birthday`='1994-06-06',`password`='666',`address`='广东',`picture_path`='yi.jpg' WHERE id=2;
		//Object[] objects = {};
		if(user.getPicturePath()==""||user.getPicturePath()==null){
			String updateSql = "UPDATE `user` SET `sex`=?,`name`=?,`birthday`=?,`password`=?,`address`=? WHERE id=?";
		    Object[] objects = {
		    		user.getSex(),user.getName(),
		    		user.getBirthday(),user.getPassword(),
		    		user.getAddress(),user.getId()
		    };
		    return jdbcUtil.executeUpdate(updateSql, objects);
		}else{
			String updateSql = "UPDATE `user` SET `sex`=?,`name`=?,`birthday`=?,`password`=?,`address`=?,`picture_path`=? WHERE id=?";
		    Object[] objects = {
		    		user.getSex(),user.getName(),
		    		user.getBirthday(),user.getPassword(),
		    		user.getAddress(),user.getPicturePath(),
		    		user.getId()
		    };
			return jdbcUtil.executeUpdate(updateSql, objects);	
		}
	}

	//
	public List<User> listAll() {
		List<User> users = new ArrayList<User>();
		Connection con = null;// 局部变量要初始化才能被使用。
		PreparedStatement ps = null;
		ResultSet res = null;
		try {
			con = jdbcUtil.getConnection();	
//sqlAll:SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user`			
			String sqlAll = "SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user`";
			ps = con.prepareStatement(sqlAll);
			res = ps.executeQuery();
			while (res.next()) {
				// 封装到一个user对象中
				User user = new User();
				user.setId(res.getInt("id"));
				user.setSex(res.getString("sex"));
				user.setName(res.getString("name"));
				user.setBirthday(res.getDate("birthday"));
				user.setPassword(res.getString("password"));
				user.setAddress(res.getString("address"));
				user.setPicturePath(res.getString("picture_path"));
				users.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			jdbcUtil.closeAll(con, ps, res);
		}
		return users;
	}

	public User getUserById(int id) {
		User resUser = null;
		Connection con = null;// 局部变量要初始化才能被使用。
		PreparedStatement ps = null;
		ResultSet res = null;
		try {
			con = jdbcUtil.getConnection();
//SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` WHERE id=2.			
			String selectUserByIdSql = "SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` WHERE id=?";
			ps = con.prepareStatement(selectUserByIdSql);
			ps.setObject(1, id);
			res = ps.executeQuery();	
			while (res.next()) {
				// 封装到一个user对象中
				resUser = new User();
				resUser.setId(res.getInt("id"));
				resUser.setSex(res.getString("sex"));
				resUser.setName(res.getString("name"));
				resUser.setBirthday(res.getDate("birthday"));
				resUser.setPassword(res.getString("password"));
				resUser.setAddress(res.getString("address"));
				resUser.setPicturePath(res.getString("picture_path"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			jdbcUtil.closeAll(con, ps, res);
		}
		return resUser;
	}
	
	/***
	 * 查询总记录条数
	 * @return 查询获取的记录条数,无则为0
	 */
	public int getCount(){
		int count = 0;
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet res = null;
		try {
			conn = jdbcUtil.getConnection();
			//SELECT COUNT(1) FROM `user`
			//SELECT COUNT(1) AS total FROM `user`
			String sqlCount = "SELECT COUNT(1) FROM `user`";//比COUNT(*)效率高。
			//String sqlCount = "SELECT COUNT(1) AS total FROM `user`";//别名total。
			ps = conn.prepareStatement(sqlCount);
			res = ps.executeQuery();
			if(res.next()){
				count = res.getInt(1);//第一列
				//count = res.getInt("total");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			jdbcUtil.closeAll(conn, ps, res);
		}
		return count;
	}
	/***
	 * 查询某一页的详细数据
	 * @param currentPage 要查询的页码
	 * @param pageSize  每页记录数
	 * @return 成功则返回一页详细数据的集合,失败则返回空(null)
	 */
	public List<User> getOnePageInfo(int currentPage,int pageSize){
		if(currentPage<1) {
			System.out.println("注意页码是从1开始的!");
			return null;
		}
		if(pageSize<1) {
			System.out.println("注意每页显示条数是从1开始的!");
			return null;
		}
		List<User> users = new ArrayList<User>();
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet res = null;
//sqlPageInfo:SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` LIMIT (currentPage-1)*pageSize,pageSize.		
//sqlPageInfo:SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` LIMIT 1,2.		
        String sqlPageInfo = "SELECT id,`sex`,`name`,`birthday`,`password`,`address`,`picture_path` FROM `user` LIMIT ?,?";
		try {
			conn = jdbcUtil.getConnection();
			ps = conn.prepareStatement(sqlPageInfo);
			ps.setObject(1, (currentPage-1)*pageSize);
			ps.setObject(2, pageSize);
			res = ps.executeQuery();
			while(res.next()){
				User user = new User();
				user.setId(res.getInt("id"));
				user.setName(res.getString("name"));
				user.setPassword(res.getString("password"));
				user.setSex(res.getString("sex"));
				user.setBirthday(res.getDate("birthday"));
				user.setAddress(res.getString("address"));
				user.setPicturePath(res.getString("picture_path"));
			    users.add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			jdbcUtil.closeAll(conn, ps, res);
		}
        return users;
	}
	
	/***
	 * 方法功能说明:把一页的全部信息都封装起来
	 * @param currentPage 要查询的页码
	 * @param pageSize  每页记录数
	 * @return
	 */
	    public Page<User> getPage(int currentPage,int pageSize){
	    	int count = this.getCount();
	    	List<User> pageList = this.getOnePageInfo(currentPage, pageSize);
	    	return new Page<User>(currentPage, count, pageList, pageSize);
	    }

}


抽取的 jdbcUtil 工具类代码如下:

package com.yibin.cn.dao.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/* 工具类的抽取 */
public class jdbcUtil {
   public static Connection conn = null;
   static{
	   try {
		Class.forName("com.mysql.jdbc.Driver");
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
   }
   public static Connection getConnection(){
	try {
		conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/helloworld", "root", "123456");
	} catch (SQLException e) {
		e.printStackTrace();
	}
       return conn;
   }
   
   public static void closeAll(Connection conn,Statement state,ResultSet res){
		if (res != null) {
			try {
				res.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (state != null) {
			try {
				state.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
   }
   /***
    * PreparedStatement与通用的增删改操作
    */
   public static int executeUpdate(String sql,Object[] objects){
	    int row = -1;
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			conn = jdbcUtil.getConnection();
			ps = conn.prepareStatement(sql);//准备sql
			if(objects!=null){
				for(int i=0;i<objects.length;i++){//给sql中问号处设置参数
					ps.setObject(i+1, objects[i]);
				}	
			}
			row = ps.executeUpdate();
		}  catch (SQLException e) {
			e.printStackTrace();
		} finally {
			jdbcUtil.closeAll(conn, ps, null);
		}
		return row;
   }
}


示例代码演示调用(方便许多):

       IUserDao iUserDao = new UserDaoImpl();	
       User user = new User();
       user.setName("yibin");
       user.setPassword("444");
       User resUser = iUserDao.getUserByNameAndPassword(user);














西电 程序设计基础课程设计 作业 当时做的程序设计课程的作业. 一共五题, 以报告的形式提交. 质量应该比较高(高傲). 完整内容在这里 高精度计算 问题描述 涉及知识点: 数组, 流程控制, 函数等 要求: 用整型数组表示10进制大整数(超过 2322^{32}232 的整数), 数组的每个元素存储大整数的一位数字, 实现大整数的加减法. 问题分析 结构设计 可将高精度整数写成一个类. 成员变量有: int a[MAXN], len; bool negative; 其中, 数组a用来存储大整数的一个数位, a[1]为个位上的数字, a 阅读详情

相关推荐

嵌入式硬件实战:RC、LC与RL滤波电路的设计与选型指南

本文深入探讨了嵌入式系统中RC、LC与RL滤波电路的设计与选型策略。通过生活化比喻和实战案例,详细解析了三种滤波电路的工作原理、应用场景及工程注意事项,帮助工程师根据电流大小、频率特征和成本预算选择最优方案,提升嵌入式硬件设计的稳定性和抗干扰能力。

kiwi8的博客 284

java jdbc init_Java 的JDBC 数据库连接池实现方法(优快云)

Java 的JDBC 数据库连接池实现方法关键字: Java, JDBC, Connection Pool, Database, 数据库连接池, sourcecode虽然 J2EE 程序员一般都有现成的应用服务器所带的JDBC 数据库连接池,不过对于开发一般的 Java Application 、 Applet 或者 JSP、velocity 时,我们可用的JDBC 数据库连接池并不多,并且一般性...

weixin_42567279的博客 224

从零构建:四轴机械臂D-H参数建模与MATLAB实战指南

本文详细介绍了四轴机械臂D-H参数建模的完整流程与MATLAB实战应用。从机械臂运动学基础出发,解析D-H参数原理与坐标系建立规则,提供MATLAB Robotics Toolbox的安装、模型创建及正逆运动学求解的代码实现。特别针对四轴机械臂的逆运算优化、轨迹规划和奇异位形规避等高级应用给出实用解决方案,是机器人开发者的实战指南。

weixin_29062255的博客 419

java jdbc init_Java之JDBC学习

(一),MySql数据库1,MySql数据库的数据类型定义2,完整性约束:3,索引:作用:唯一作用就是加快对表查询速度,索引通过快速路径方法访问来快速定位数据,从而减少磁盘的II/O;缺点:维护浪费开销,存储需要一定的磁盘空间4,数据库操作语言:1,insert into tableName(column1,...) values(value1,...);2,update tableName se...

weixin_34737524的博客 184

LTSPICE使用教程:导入第三方库模型进行仿真

LTSPICE导入第三方SPICE模型进行仿真,以英飞凌的第三方.lib模型为实例进行详解

焊武大帝的专栏 3万+

L2tp环境搭建笔记- Openwrt平台

本文使用3台openwrt设备, 分别搭建L2TP服务和2个客户端, 进行端到端验证和局域网组网,并分析搭建过程中涉及的默认路由( defaultroute) 配置问题。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 3389

spring jdbc:initialize-database使用详解

Org.springframework.jdbc.datasource.init使用详解 org.springframework.jdbc.datasource.init支持在项目启动的时候对数据库的初始化操作。 一、使用方式:使用Spring XML进行初始化数据库(Initializing a database using Spring XML) a).首先需要为XML加上spring-

world_ding博客 5761

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

风电功率预测 | 基于RF随机森林的风电功率预测(附matlab完整源码)

天天酷科研的博客 896

抽取jdbc工具类

package com.itheima.utils; import java.sql.*; import java.util.ResourceBundle; public class JdbcUtils { static final String DRIVERCLASS; static final String URL; static final String USER...

一勺菠萝丶的博客 418

TXS0104EPWR 4通道电平转换模块原理图设计,已量产

在嵌入式系统设计中,不同模块间的电平不兼容是常见问题 —— 比如 1.8V 的 MCU 与 3.3V 的传感器通信,或是 3.3V 的外设与 5V 的主控交互。这类场景下,一款高效、低功耗的双向电平转换器就成了关键组件。本文将结合实际原理图,深度解析 TI TXS0104 这款 4 通道双向电平转换器的设计要点与应用实践。

不脱发的程序猿 489

【ComfyUI】Flux 图像扩展

本文介绍了一个基于Flux扩图技术的ComfyUI工作流,能够智能扩展图像尺寸并保持内容连贯性。该流程通过扩散模型与条件编码的结合,对图像边缘进行语义填充生成,适用于艺术创作、海报设计等场景。工作流包含图像加载、外扩填充、文本编码、扩散采样等核心节点,采用Flux1-fill-dev等专业模型确保生成质量。演示效果显示,系统能自然延伸原图内容,保持风格统一。该技术可广泛应用于插画扩展、摄影增强、游戏场景构建等领域,显著提升创意工作效率。

Mr数据杨 928

JDBC操作数据库(三) ——抽取工具类

JDBC工具类抽取 1.直接把查询和修改的方法放入工具类中2.把查询和修改的方法中重复的代码也抽取成方法3.抽取的另一种方法*这种方法需要注意4.SQL注入5.完善DBUtil工具类(防止SQL注入 )总结 前面已经使用JDBC把查询和修改数据库代码抽取出来方法,同样这里我们可以抽取出一个工具类DBUtil 1.直接把查询和修改的方法放入工具类中 public class DBUtil { p...

paku-san的博客 993

RT-DETR改进策略【注意力机制篇】| 2024 PPA 并行补丁感知注意模块,提高小目标关注度

本文记录的是利用改进检测精度,详细说明了优化原因,注意事项等。原论文在红外小目标检测任务中,小目标在多次下采样操作中容易丢失关键信息。通过替代编码器和解码器基本组件中的传统卷积操作,更好地保留小目标的重要信息。HCF-Net: Hierarchical Context Fusion Network for Infrared Small Object Detection采用多分支特征提取策略,通过不同分支提取不同尺度和层次的特征。利用局部、全局和串行卷积分支,对输入特征张量进行处理。通过控制 patch si

Limiiiing的博客 1646

java jdbc工具类抽取_如何使用JDBC实现工具类抽取

这篇文章主要介绍了如何使用JDBC实现工具类抽取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、JDBC工具类抽取上一篇做了JDBC的基本操作,但是获取连接及释放资源是比较重复的操作,可以抽取工具类而达到代码重用的目的工程结构如图JDBC工具类代码db.propertiesdriver=com.mysql.jdbc.Driverurl=jdbc...

weixin_34566429的博客 194

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JDBC快速抽取工具类

title :jdbc抽取工具类 jdbc抽取工具类 1.注册驱动抽取 2.连接对象方法抽取 3.释放资源方法抽取 不想传递参数,还得保证工具类的通用性, 解决:配置文件 src目录下面: public class JDBCUtils{ private static String url; private static String user; private static String password; private static String driver; 文件的读取,只需要读取一次即可拿到这.

qq_42762824的博客 262

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

《JDBC》工具类抽取

《JDBC》工具类抽取 为了简化JDBC的开发,可以将一些重复的代码进行抽取 jdbc.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///jdbctest username=root password=abc package com.imooc.jdbc.utils; import java.io.IOException; import java.io.InputStream; import java.sql.Con

m0_47603012的博客 121

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JDBC——抽取JDBC工具类

使用jdbc操作数据库进行增删改查的代码重复度比较高,将重复的代码抽取成一个工具类进行代码的复用,简化代码编写

春和的博客 967

抽取JDBC工具类的方法

抽取JDBC工具类的方法抽取JDBC工具类目的:简化书写 抽取JDBC工具类 目的:简化书写 分析: 1、注册驱动抽取 2、抽取一个方法获取连接对象 需求:不想传递参数(麻烦),还得保证工具类的通用性。 解决:配置文件 3、释放资源方法的抽取 下面为配置文件properties /* driver也写在了配置文件中 */ url=jdbc:mysql://localhost:3306/db4?serverTimezone=UTC&characterEncoding=utf8 user=root pa

feimeng4s的博客 278

java jdbc工具类抽取_JDBC快速抽取工具类

title :jdbc抽取工具类jdbc抽取工具类1.注册驱动抽取2.连接对象方法抽取3.释放资源方法抽取不想传递参数,还得保证工具类的通用性,解决:配置文件src目录下面:public class JDBCUtils{private static String url;private static String user;private static String password;privat...

weixin_34348050的博客 216

JDBC工具类的抽取

1.1 JDBC的工具类的抽取 1.1.1 抽取一个JDBC的工具类 因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写的。所以可以将重复的代码提取到一个类中来完成。 package com.xdr630.jdbc.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.

兮动人 585

抽取JDBC工具类——JDBCUtils的使用

在上一篇介绍JDBC基础使用的博文中,简单了解到JDBC的使用。但是,也看出了一定的弊端:重复代码量较大。在我们每次新建一个JDBC的类操作数据库时,都要不停的进行驱动的注册,数据库的连接,参数的输入等大量重复性的操作。所以,有没有什么方法简化这一类的操作呢? 其实,将这些重复的代码进行抽取,作为一个工具类,每次使用的时候进行调用即可,这样便能够达到代码的可复用性。 抽取JDBC工具类的思路: ...

Chemlez'blog 435

抽取 JDBC 工具类

文章目录一、概念二、代码实现 一、概念 目的是为了简化书写 分析: (1)注册驱动也抽取 (2)抽取一个方法获取连接对象 * 需求:不想传递参数(麻烦),还得保证工具类的通用性。 * 解决:配置文件 jdbc.properties url= user= password= (3)抽取一个方法释放资源 二、代码实现 编写配置文件:jdbc.pr...

南淮北安的博客 462

JDBC的工具类的抽取

1.1.1抽取一个JDBC的工具类 因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写的。所以可以将重复的代码提取到一个类中来完成。 [AppleScript]纯文本查看复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13...

qq_40208605的博客 475

5. JDBC工具类的抽取 - 封装获取连接、关闭资源

5. JDBC工具类的抽取 - 封装获取连接、关闭资源前言在前面的篇章中,我使用了 Statement 完成 JDBC 增删改查,而且我们可以发现在代码中,存在代码重复的地方,例如:获取数...

DevOps海洋的渔夫@专栏 623

抽取JDBC工具类

JDBC工具类 import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.sql.*; import java.util.Properties; public class JDBCUtils { private static String driver; ...

Jack_Tpy的Java学习之旅 296
上一篇: 利用 JSP 中的反射机制封装一个 Servlet ,就不用每张表的每个方法都写一个 Servlet
下一篇: JSP 测试使用 Junit 比较方便
yibin94
博客等级 码龄11年 78粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值