使用java代码控制sql_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

方法名:

query

形式参数列表:

1. String sql

2. SQL语句对应的参数列表,Object[] parameters

3. 不确定是什么东西

a. 约束泛型对应的具体数据类型

b. 参数确定了当前SQL语句查询的具体对应哪一个类对象

T t 还行 浪费空间 利用他获取Class类对象,为所欲为!!!

Class... initParameterTypes

Class cls

Person.class

T ==> Person

cls ==> 利用反射可以为所欲为

public List query(String sql, Object[] parameters, Class cls)

*/

/**

* 通用的查询方法,返回值是一个List集合,其中保存的数据类型是指定从Class

*

* @param sql 需要处理的SQL语句 select语句

* @param parameters 对应的当前SQL语句的参数立碑

* @param cls 指定Class类对象,也是当前需要处理的数据类型,【不包含基本数据类型】

* @param 泛型,用于当前操作的数据类型到底是哪一个

* @return List集合,带有指定的数据

*/

public List query(String sql, Object[] parameters, Class cls) {

ResultSet resultSet = null;

PreparedStatement preparedStatement = null;

List 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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值