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.权限和路径 一.原生数据库 ...
随机推荐
- hdu 1297
Children's Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HZOJ 20190719 那一天她离我而去(图论最小环)
这题算是这场考试里最水的一道题了吧,就是求个最小环,但之前没练过,就在考场上yy出了最短路+次短路的傻逼解法,首先是不会求次短路,其次是这显然不对呀,自己随便想想就可以反驳这种解法. 正解比较神,但是 ...
- JavaWeb-SpringSecurity初认识
Spring Security 安全 百度百科 功能:Spring Security对Web安全性的支持大量地依赖于Servlet过滤器.这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安 ...
- 常用Linux文件或目录的命令
1, mkdir命令 mkdir用来创建指定名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. (1) 命令格式:mkdir [选项] 目录 ( ...
- 使用vlc 或 ffmpeg发布RTP/UDP视频服务
一.FFmpeg 测试环境Centos 发布端: ffmpeg -re -stream_loop -1 -i test.ts -vcodec copy -acodec copy -f rtp_mpeg ...
- vim(vi)下的三种模式及其相关命令
vim(vi)下的三种模式1.命令行模式 2.末行模式 3.插入模式 三种模式的联系及其相互转换 在我们输入vi命令进入编写程序的页面后,我们看到的是命令行模式,在我们输入“a”.“i”.“o”.“O ...
- linux IP 网关配置
1. 关闭selinux 与防火墙 在虚拟机装好之后之后,先关闭selinux与防火墙 关闭selinx,重启生效 vim /etc/selinux/config 修改 SELINUX=disable ...
- git合并同事代码
git 操作: 如果龙哥提交了代码,我想拉去过来,我需要的操作: 1.git fetch 2. git add . 3.git commit -m '' 提交本地的文件 4.git merge ori ...
- android data binding jetpack I 环境配置 model-view 简单绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- CentOS6.5 64位下装Docker
试装,仅仅是做个记录. [root@localhost ~]# sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' > ; > [do ...