当前位置: 首页 > news >正文

网站制作公司 深圳域名交易中心

网站制作公司 深圳,域名交易中心,做网站的是如何赚钱的,淮安网站seo1、用法(导入项目即可) 注意:项目中必须存在数据库驱动包。 2、方法列表 (1)获取数据库连接对象 (2)获取查询结果集 (3)将查询结果集转化为指定对象(使用…

1、用法(导入项目即可)

注意:项目中必须存在数据库驱动包。

2、方法列表

(1)获取数据库连接对象

(2)获取查询结果集

(3)将查询结果集转化为指定对象(使用者自行提供类参数,通过反射和转化)

(4)执行更新、删除、插入操作

(5)关闭数据库连接

3、源码展示(注释齐全)

package utils;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** 数据库常用操作工具类* * @author snow1k* @date 2021/11/10*/
public final class JdbcUtils {// mysql8驱动public static final String MYSQL8_DRIVER = "com.mysql.cj.jdbc.Driver";/*** 结果集处理器* * @author snow1k* @date 2021/11/10*/public static interface ResultSetHandler<T> {/*** 将一个结果集转换成T类型* * @param rs* @return*/T handle(ResultSet rs);}/*** 列处理器* * @author snow1k* @date 2021/11/16*/public static interface ColumnHandler<T> {/*** * @param method     根据列名自动匹配的方法名* @param columnName 列名* @param t          对象* @param value      值* @return 返回true,表示用户已处理完成,无需再处理,返回false,则代表用户不处理*/boolean handleColumn(Method method, String columnName, T t, Object value);}/*** 内部类的目的,就是为了将结果集中的数据自动封装成对象* * @author snow1k* @date 2021/11/10*/public static class BeanListHandler<T> implements ResultSetHandler<List<T>> {private final Class<T> clazz;private ColumnHandler<T> columnHandler;public BeanListHandler(Class<T> clazz) {this.clazz = clazz;}public BeanListHandler(Class<T> clazz, ColumnHandler<T> columnHandler) {this.clazz = clazz;this.columnHandler = columnHandler;}@Overridepublic List<T> handle(ResultSet rs) {// 返回值List<T> list = new ArrayList<>();// 存储所有列名(别名)List<String> columnNames = new ArrayList<>();// 存储所有方法,键名是列名(别名),值即其对应的setter方法Map<String, Method> methodMap = new HashMap<>();// 获取所有列名try {// 结果集元数据ResultSetMetaData rsmd = rs.getMetaData();// 返回查询结果集的列数int count = rsmd.getColumnCount();// 返回此类型的所有方法Method[] methods = clazz.getDeclaredMethods();for (int i = 0; i < count; i++) {// 获取列名,如果起别名,则获取别名String columnName = rsmd.getColumnLabel(i + 1);columnNames.add(columnName);// 返回查询结果集的列名// 组装出对象的方法名String methodName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);methodName = "set" + methodName;for (Method me : methods) {if (me.getName().equals(methodName)) {methodMap.put(columnName, me);// 设置到map中break;}}}// 准备工作已完成,将结果集中的数据转换成T类型的实例if (rs != null) {// 获取无参的构造方法Constructor<T> con = clazz.getDeclaredConstructor();while (rs.next()) {T t = con.newInstance();// T类型的实例for (int i = 0; i < count; i++) {String columnName = columnNames.get(i);// 从结果集中取出对应列的数据Object value = rs.getObject(columnName);// 取出方法Method method = methodMap.get(columnName);if (method != null) {if (columnHandler != null) {boolean done = columnHandler.handleColumn(method, columnName, t, value);if (!done) {// 通过反射给T类型的实例赋值method.invoke(t, value);}}}}list.add(t);}}return list;} catch (Exception e) {e.printStackTrace();}return null;}}/*** 获取数据库连接* * @param url* @param user* @param password* @return*/public static final Connection getConnection(String driver, String url, String user, String password) {try {Class.forName(driver);return DriverManager.getConnection(url, user, password);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("无法创建数据库连接");}/*** 获取数据库连接* * @param url* @param user* @param password* @return*/public static final Connection getConnection(String url, String user, String password) {return getConnection(MYSQL8_DRIVER, url, user, password);}/*** 执行查询操作,返回结果集* * @param conn* @param sql* @param args* @return*/private static final ResultSet query(Connection conn, String sql, Object[] args) {try {PreparedStatement ps = conn.prepareStatement(sql);if (args != null) {// 给PreparedStatement实例设置参数for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}}return ps.executeQuery();} catch (SQLException e) {e.printStackTrace();}throw new RuntimeException("查询出现异常");}/*** 返回对象的集合* * @param <T>* @param conn* @param sql* @param args* @return*/public static final <T> T query(Connection conn, ResultSetHandler<T> handler, String sql, Object[] args) {ResultSet rs = query(conn, sql, args);return handler.handle(rs);}/*** 写操作* * @return 返回受影响的行数*/public static final int update(Connection conn, String sql, Object[] args) {try {PreparedStatement ps = conn.prepareStatement(sql);if (args != null) {// 给PreparedStatement实例设置参数for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}}return ps.executeUpdate();} catch (SQLException e) {// e.printStackTrace();}return -1;}/*** 关闭数据库连接* * @param conn*/public static final void closeConnection(Connection conn) {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

声明:

此工具类适用于初学者刚开始学习数据库操作,便于加强掌握和加深理解,熟悉之后直接调用即可。

http://www.15wanjia.com/news/14838.html

相关文章:

  • 如何使用域名访问网站百度怎样发布作品
  • 财务公司网站开发源码广告营销推广
  • 仙桃网站设计做网站推广公司
  • 做网站是要云空间吗seo关键词优化方法
  • 查询网站建设seo定义
  • 新媒体营销岗位有哪些广东seo推广外包
  • 珠宝网站设计南宁网络推广服务商
  • asp网站 复制百度app大全
  • 网站建设报价方案对比广州广告公司
  • 阜宁专业做网站的公司项目推广平台有哪些
  • 巴音郭楞库尔勒网站建设网站seo推广排名
  • 河北省建设网市场推广seo职位描述
  • banner设计网站河北网站推广
  • 政府 网站 管理系统整站seo怎么做
  • 建筑设计网站网址外贸网站seo教程
  • 淘宝几百块钱做网站靠谱吗seo站长综合查询工具
  • 许昌网站开发文登seo排名
  • 邯郸专业做网站多少钱企业网站建设方案
  • 网站开发的内容企业培训机构排名
  • 网站建设师网站建站教程
  • wordpress炫酷主题手机优化软件哪个好用
  • 网站网监办理营销型网站建设公司
  • 手机商城网站建设设计方案疫情防控最新信息
  • 企业网站做留言板有什么优势北京seo服务行者
  • 二维码生成器哪个好用seo是指什么职位
  • 沭阳网站建设免费注册网页网址
  • 都有什么公司需要网站建设谷歌广告
  • 制作网站用c 做前台公众号关键词排名优化
  • 孝感有做网站的公司吗免费的网站域名查询
  • 长沙做网站建设做游戏推广怎么找客户