Java代码 简单用于处理和数据库相关的操作
package util;
import org.apache.commons.beanutils.BeanUtils;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
* 基础DAO层,用于处理和数据库相关的操作
*
* 1. 通用的更新方法
* 2. 通用的查询方法
*/
public class BaseDao {
/*
通用的更新方法:
1. SQL
2. 参数不一样
流程:
1. 获取数据库连接对象
2. 预处理SQL语句
3. 给予SQL语句参数【重点】
4. 执行SQL语句
方法分析:
权限修饰 public
返回值类型 int 数据库操作受到影响的行数
方法名 update
形式参数列表:
1. SQL
2. 对应SQL语句的参数
a. 参数类型不确定
Java中所有的类都是Object类的子类
选择Object作为数据类型
b. 参数个数不确定
基础数组
Object[] parameters
public int update(String sql, Object[] parameters)
*/
/**
* 通过的更新方法,可以处理insert,update,delete 对应的SQL语句
*
* @param sql String类型SQL语句
* @param parameters 对应当前SQL语句的参数列表
* @return MySQL数据库操作受到影响的行数
*/
public int update(String sql, Object[] parameters) {
int affectedRows = 0;
PreparedStatement preparedStatement = null;
Connection connection = JdbcUtil.getConnection();
try {
preparedStatement = connection.prepareStatement(sql);
/*
这里需要对SQL语句进行参数赋值操作
这里需要确定SQL语句的?有多少个,参数有多少个?
使用JDBC提供的一种方式,参数元数据!!!
*/
// 获取SQL语句对应的参数个数
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
// 对于SQL语句参数赋值之前,需要判断一些条件。
if (parameters != null && parameterCount == parameters.length) {
// 利用for循环,遍历数组,处理SQL语句对应的参数
for (int i = 0; i < parameters.length; i++) {
preparedStatement.setObject(i + 1, parameters[i]);
}
}
affectedRows = preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, preparedStatement);
}
return affectedRows;
}
/*
通用查询方法方法分析
权限修饰符 public
泛型:
T
返回值类型
void pass
int pass
List<T>
方法名:
query
形式参数列表:
1. String sql
2. SQL语句对应的参数列表,Object[] parameters
3. 不确定是什么东西
a. 约束泛型对应的具体数据类型
b. 参数确定了当前SQL语句查询的具体对应哪一个类对象
T t 还行 浪费空间 利用他获取Class类对象,为所欲为!!!
Class... initParameterTypes
Class<T> cls
Person.class
T ==> Person
cls ==> 利用反射可以为所欲为
public <T> List<T> query(String sql, Object[] parameters, Class<T> cls)
*/
/**
* 通用的查询方法,返回值是一个List集合,其中保存的数据类型是指定从Class<T>
*
* @param sql 需要处理的SQL语句 select语句
* @param parameters 对应的当前SQL语句的参数立碑
* @param cls 指定Class类对象,也是当前需要处理的数据类型,【不包含基本数据类型】
* @param <T> 泛型,用于当前操作的数据类型到底是哪一个
* @return List集合,带有指定的数据
*/
public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) {
ResultSet resultSet = null;
PreparedStatement preparedStatement = null;
List<T> list = new ArrayList<>();
Connection connection = JdbcUtil.getConnection();
try {
preparedStatement = connection.prepareStatement(sql);
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
if (parameters != null && parameterCount == parameters.length) {
for (int i = 0; i < parameterCount; i++) {
preparedStatement.setObject(i + 1, parameters[i]);
}
}
// 执行SQL语句,得到结果集对象
resultSet = preparedStatement.executeQuery();
// 获取结果集元数据
ResultSetMetaData metaData = resultSet.getMetaData();
// 获取当前结果集中字段个数
int columnCount = metaData.getColumnCount();
// 解析数据
while (resultSet.next()) {
T t = cls.getConstructor(null).newInstance(null);
for (int i = 1; i <= columnCount ; i++) {
// 获取字段名
String columnName = metaData.getColumnName(i);
// 取出对应数据,赋值类对象中对应成员变量
BeanUtils.setProperty(t, columnName, resultSet.getObject(columnName));
}
list.add(t);
}
} catch (SQLException | NoSuchMethodException | InstantiationException
| IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, preparedStatement, resultSet);
}
return list;
}
}
Java代码 简单用于处理和数据库相关的操作的更多相关文章
- Java秒杀简单设计二:数据库表和Dao层设计
Java秒杀简单设计二:数据库表Dao层设计 上一篇中搭建springboot项目环境和设计数据库表 https://www.cnblogs.com/taiguyiba/p/9791431.html ...
- 小白老凯,初出茅庐!请多关照!简单分享一些 mysql 数据库的安装操作!请给为大神雅正!
在我们写代码,存储数据时常常会用到各种数据库,如:mysql.access.sql.server.Oracle等等,在这里就说一下mysql数据库的的操作指令! 首先我们了解下如何安装mysql数据库 ...
- java代码简单练习
总结: package com.ds; import java.awt.Color; import java.awt.FlowLayout; import javax.swing.JFrame; im ...
- 遗传算法与Java代码简单实现
参阅地址: https://www.jianshu.com/p/ae5157c26af9 代码实现: public class GA { private int ChrNum = 10; //染色体数 ...
- java代码简单实现队列
1. 基于链表简单实现 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; / ...
- java代码简单实现栈
1. 基于数组简单实现 /** * @author <a herf="mailto:yanwu0527@163.com">XuBaofeng</a> * @ ...
- 一段JAVA代码了解多线程,JUC、CAS原子性操作。
@Test public void testPaceController_multiThread() throws InterruptedException { final PaceControlle ...
- JAVA使用JDBC连接,修改MySQL数据库(比较乱)
原文地址1(连接MySQL图文) : http://www.cnblogs.com/GarfieldEr007/p/5746137.html 原文地址2 (修改MySQL图文): http://www ...
- Android数据库相关整理
今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅.主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一.原生数据库 ...
随机推荐
- luoguP2863 [USACO06JAN]牛的舞会The Cow Prom
P2863 [USACO06JAN]牛的舞会The Cow Prom 123通过 221提交 题目提供者 洛谷OnlineJudge 标签 USACO 2006 云端 难度 普及+/提高 时空限制 1 ...
- 2019牛客暑期多校训练营(第八场)A 单调栈
题意 给一个\(n*m\)的01矩阵,找有多少个全1子矩阵不被其他全1子矩阵包括. 分析 用单调栈找到的全1子矩阵是不能向上扩展和向右扩展的,只需判断该子矩阵能否向左和向下扩展,若四个方向都不能扩展, ...
- sql 用表组织数据
一.四种完整性约束 1.实体完整性约束:不允许出现相同记录的数据 2.域完整性约束:对字段进行限定,不得插入不符合限定的数据 3.引用完整性:表与表之间的关系 4.自定义完整性约束:开发人员自己设定对 ...
- 存储映射--mmap
存储映射 使一个磁盘文件与存储空间中的一个缓冲区相映射. 当从缓冲区中取数据,就相当于读文件中的相应字节. 将数据存入缓冲区,则相应的字节就自动写入文件. 使用这种方法,首先应通知内核,将一个指定文件 ...
- JavaWeb-SpringBoot_使用MySQL管理用户登录注册+接入腾讯短信SDK_demo
使用Gradle编译项目 传送门 项目已托管到Github上 传送门 JavaWeb-SpringBoot_一个类实现腾讯云SDK发送短信 传送门 用户注册 用户并非一定要输入正确的手机验证码去激活当 ...
- IP输出 之 ip_local_out
概述 将要从本地发出的数据包,会在构造了ip头之后,调用ip_local_out函数,该函数设置数据包的总长度和校验和,然后经过netfilter的LOCAL_OUT钩子点进行检查过滤,如果通过,则调 ...
- Linux 竞态条件和临界区
1. 临界区和竞态条件: 临界区:访问和操作共享数据的代码段: 竞态条件:当有多个线程同时进入临界区时,执行结果取决于线程的执行顺序: 如下述代码,当多个线程同时调用func函数,对共享数据sum进行 ...
- vue——父组件向子组件传递数据
看例子: //注册一个全局组件,组件标签名为child Vue.component('child', { props: ['msg'], //接收父组件传递的数据 template: '<h3& ...
- T89379 【qbxt】复读警告
T89379 [qbxt]复读警告 题解 这是一道DP题 设置状态 f[ i ][ j ] 前 i 个数中所选数字之和 % key 得 j 的最大方案数 当前我们该选择第 i 个数字了,那么这个数 ...
- Javascript和JQuery获取浏览器窗口各种尺寸
原生JS 窗口尺寸: console.log('window.innerWidth = ' + window.innerWidth + '---window.innerHeight = ' + win ...