添加获取结果集方法,删除无用的文件夹及文件
This commit is contained in:
parent
4d5aaa6510
commit
9d51273942
|
@ -18,7 +18,6 @@
|
|||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="lib" path="lib/beautyeye_lnf.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/target/
|
||||
/.apt_generated/
|
||||
/.apt_generated_tests/
|
||||
/dependency-reduced-pom.xml
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
// 使用 IntelliSense 了解相关属性。
|
||||
// 悬停以查看现有属性的描述。
|
||||
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "java",
|
||||
"name": "CodeLens (Launch) - TestCreateXml",
|
||||
"request": "launch",
|
||||
"mainClass": "test.javase.TestCreateXml",
|
||||
"projectName": "Autest",
|
||||
},
|
||||
{
|
||||
"type": "java",
|
||||
"name": "CodeLens (Launch) - Test123",
|
||||
"request": "launch",
|
||||
"mainClass": "test.javase.Test123",
|
||||
"projectName": "Autest"
|
||||
},
|
||||
{
|
||||
"type": "java",
|
||||
"name": "Debug (Launch) - Current File",
|
||||
"request": "launch",
|
||||
"mainClass": "${file}"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"java.configuration.updateBuildConfiguration": "automatic"
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/poi-3.17.jar
BIN
lib/poi-3.17.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,93 +0,0 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>AbstractSql.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 数据库工具基类,定义工具需要实现的基本方法以及通用方法
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年12月7日上午8:12:04</p>
|
||||
* <p><b>修改时间:</b>2020年12月7日上午8:12:04</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 1.8
|
||||
*
|
||||
* @param <T> 子类本身
|
||||
*/
|
||||
public class AbstractSql<T extends AbstractSql<T>> {
|
||||
/**
|
||||
* SQL语句的分隔符号
|
||||
*/
|
||||
protected final String SQL_SPLIT_SIGN = ";";
|
||||
|
||||
/**
|
||||
* 数据库连接类对象
|
||||
*/
|
||||
protected Connection connect;
|
||||
/**
|
||||
* 存储SQL执行结果集
|
||||
*/
|
||||
ArrayList<ResultSet> resultList;
|
||||
// protected Statement statement;
|
||||
// protected PreparedStatement preState;
|
||||
|
||||
/**
|
||||
* 运行指定的SQL语句,支持多条SQL执行,每条SQL语句间需要使用分号进行分隔。注意,
|
||||
* 执行多条语句时,若其中一条语句无法执行,则抛出异常,并结束所有语句的执行,且不会保存结果集。
|
||||
* @param sqlText SQL语句
|
||||
* @param isClear 是否清空原结果集
|
||||
* @return 类本身
|
||||
* @throws DatabaseException 当SQL语句为空或执行有误时,抛出的异常
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public T run(String sqlText, boolean isClear) {
|
||||
//若需要执行的SQL语句字符串为空,则抛出异常
|
||||
if (sqlText.isEmpty()) {
|
||||
throw new DatabaseException("SQL语句为空");
|
||||
}
|
||||
|
||||
ArrayList<ResultSet> resultList = new ArrayList<>();
|
||||
//按照分号拆分语句,并遍历执行所有的语句
|
||||
Arrays.stream(sqlText.split(SQL_SPLIT_SIGN)).
|
||||
filter(sql -> !sql.isEmpty()).
|
||||
map(sql -> {
|
||||
try {
|
||||
//执行SQL
|
||||
return connect.prepareStatement(sqlText.toString()).executeQuery();
|
||||
} catch (SQLException e) {
|
||||
//若执行异常,则抛出异常
|
||||
throw new DatabaseException(String.format("SQL无法执行。\nSQL:%s", sqlText.toString()), e);
|
||||
}
|
||||
}).forEach(resultList :: add);
|
||||
|
||||
//判断是否需要清空原结果集
|
||||
if (isClear) {
|
||||
clear();
|
||||
}
|
||||
//存储当前执行的结果集
|
||||
this.resultList.addAll(resultList);
|
||||
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于清空当前存储的SQL执行结果集
|
||||
*/
|
||||
public void clear() {
|
||||
resultList.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回指定的结果集
|
||||
* @param index 结果集下标
|
||||
* @return 相应的结果集
|
||||
*/
|
||||
public ResultSet getResult(int index) {
|
||||
return resultList.get(index);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>DataBaseType.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 枚举可操作的数据库类型
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年12月15日上午8:26:38</p>
|
||||
* <p><b>修改时间:</b>2020年12月15日上午8:26:38</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 1.8
|
||||
*
|
||||
*/
|
||||
public enum DataBaseType {
|
||||
/**
|
||||
* 连接Oracle数据库
|
||||
*/
|
||||
ORACLE("jdbc:oracle:thin:@%s:%s", "oracle.jdbc.driver.OracleDriver"),
|
||||
/**
|
||||
* 连接MySQL数据库
|
||||
*/
|
||||
MYSQL("jdbc:mysql://%s/%s", "com.mysql.jdbc.Driver"),
|
||||
/**
|
||||
* 连接SQL Server数据库
|
||||
*/
|
||||
SQL_SERVER("jdbc:sqlserver://%s;DataBaseName=%s", "com.microsoft.sqlserver.jdbc.SQLServerDriver"),
|
||||
;
|
||||
|
||||
/**
|
||||
* 存储数据库连接的URL
|
||||
*/
|
||||
String url;
|
||||
/**
|
||||
* 存储数据库加载的类名
|
||||
*/
|
||||
String className;
|
||||
/**
|
||||
* 初始化枚举
|
||||
* @param url 数据库连接的URL
|
||||
* @param className 数据库加载的类名
|
||||
*/
|
||||
private DataBaseType(String url, String className) {
|
||||
this.url = url;
|
||||
this.className = className;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回数据库连接的URL,URL为带格式化字符的字符串,可通过以下方法格式化当前数据库连接的URL:
|
||||
* <code><pre>
|
||||
* String.format(dataBaseType.getUrl(), host, dataBaseName)
|
||||
* <pre></code>
|
||||
* @return 数据库连接的URL
|
||||
*/
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回数据库加载的类名
|
||||
* @return 数据库加载的类名
|
||||
*/
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
}
|
|
@ -16,6 +16,7 @@ public class DatabaseException extends RuntimeException {
|
|||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public DatabaseException() {
|
||||
super("结果集为空,SQL执行异常");
|
||||
}
|
||||
|
||||
public DatabaseException(String message) {
|
||||
|
|
|
@ -1,50 +0,0 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
import java.sql.Driver;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
import oracle.jdbc.driver.OracleDriver;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>OracleSql.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 提供对Oracle数据进行基本的操作
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年12月7日上午8:13:20</p>
|
||||
* <p><b>修改时间:</b>2020年12月7日上午8:13:20</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 1.8
|
||||
*
|
||||
*/
|
||||
public class OracleSql extends AbstractSql<OracleSql> {
|
||||
/**
|
||||
* 构造方法,用于指定数据库基本信息
|
||||
* @param username 用户名
|
||||
* @param password 密码
|
||||
* @param host 主机(包括端口,默认为1521)
|
||||
* @param dataBase 数据源
|
||||
*/
|
||||
public OracleSql(String username, String password, String host, String dataBase) {
|
||||
//定义数据库对象,若驱动不存在时,则抛出异常
|
||||
Driver driver = new OracleDriver();
|
||||
try {
|
||||
DriverManager.deregisterDriver(driver);
|
||||
} catch (SQLException e) {
|
||||
throw new DatabaseException("ojdbc驱动不存在或驱动有误,无法连接Oracle数据库", e);
|
||||
}
|
||||
|
||||
// 添加用户名与密码,连接数据库,若数据连接有误,则抛出异常
|
||||
Properties pro = new Properties();
|
||||
pro.put("user", username);
|
||||
pro.put("password", password);
|
||||
String url = "jdbc:oracle:thin:@" + host + ":" + dataBase;
|
||||
try {
|
||||
connect = driver.connect(url, pro);
|
||||
} catch (SQLException e) {
|
||||
throw new DatabaseException(String.format("Oracle数据库连接异常,连接信息:\n用户名:%s\n密码:%s\n连接url:%s", username, password, url), e);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,295 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>SqlAction.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 数据库工具基类,定义工具需要实现的基本方法以及通用方法。
|
||||
* </p>
|
||||
* <p>
|
||||
* 类中的所有方法均为重头遍历结果集,与当前在结果集中光标的位置无关,并且遍历后不影响当前光标的位置。
|
||||
* 以调用{@link #getFirstResult()}方法为例:
|
||||
* </p>
|
||||
* <p>
|
||||
* 查询的结果集中存在ID字段,并且字段下有如下数据[1, 2, 3, 4, 5, 6, 7],对该字段循环获取5次:
|
||||
* <code><pre>
|
||||
* // run为SqlAction类对象
|
||||
* ResultSet result = run.{@link #getResult()};
|
||||
* for (int index = 0; index < 5 && result.next(), index++) {
|
||||
* System.out.print(result.getString("ID"));
|
||||
* }
|
||||
*
|
||||
* System.out.print(run.{@link #getFirstResult()});
|
||||
*
|
||||
* if (result.next()) {
|
||||
* System.out.print(result.getString("ID"));
|
||||
* }
|
||||
* <pre></code>
|
||||
* 其结果输出为:<br>
|
||||
* 12345<br>
|
||||
* 1<br>
|
||||
* 6<br>
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年12月7日上午8:12:04</p>
|
||||
* <p><b>修改时间:</b>2020年12月7日上午8:12:04</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 1.8
|
||||
*
|
||||
* @param <T> 子类本身
|
||||
*/
|
||||
public class SqlAction {
|
||||
/**
|
||||
* SQL语句的分隔符号
|
||||
*/
|
||||
protected final String SQL_SPLIT_SIGN = ";";
|
||||
|
||||
/**
|
||||
* 数据库连接类对象
|
||||
*/
|
||||
protected Optional<Connection> connect = Optional.empty();
|
||||
/**
|
||||
* 存储SQL执行结果集
|
||||
*/
|
||||
protected Optional<ResultSet> result = Optional.empty();
|
||||
|
||||
/**
|
||||
* 存储执行结果表的字段
|
||||
*/
|
||||
ArrayList<String> fieldNameList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 构造方法,用于指定数据库基本信息
|
||||
* @param username 用户名
|
||||
* @param password 密码
|
||||
* @param host 主机(包括端口,默认为1521)
|
||||
* @param dataBase 数据源
|
||||
*/
|
||||
public SqlAction(DataBaseType dataBaseType, String username, String password, String host, String dataBaseName) {
|
||||
try {
|
||||
Class.forName(dataBaseType.getClassName());
|
||||
connect = Optional.ofNullable(
|
||||
DriverManager.getConnection(
|
||||
String.format(dataBaseType.getUrl(), host, dataBaseName),
|
||||
username,
|
||||
password
|
||||
)
|
||||
);
|
||||
} catch (SQLException e) {
|
||||
throw new DatabaseException(String.format(dataBaseType + "数据库连接异常,连接信息:\n用户名:%s\n密码:%s\n连接url:%s", username, password, String.format(dataBaseType.getUrl(), host, dataBaseName)), e);
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new DatabaseException("数据库驱动不存在:" + dataBaseType.getClassName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行指定的SQL语句,支持多条SQL执行,每条SQL语句间需要使用分号进行分隔。注意,
|
||||
* 执行多条语句时,若其中一条语句无法执行,则抛出异常,并结束所有语句的执行,且不会保存结果集。
|
||||
* @param sqlText SQL语句
|
||||
* @param isClear 是否清空原结果集
|
||||
* @return 类本身
|
||||
* @throws DatabaseException 当SQL语句为空或执行有误时,抛出的异常
|
||||
*/
|
||||
public SqlAction run(String sqlText) {
|
||||
fieldNameList.clear();
|
||||
|
||||
//若需要执行的SQL语句字符串为空,则抛出异常
|
||||
if (sqlText.isEmpty()) {
|
||||
throw new DatabaseException("SQL语句为空");
|
||||
}
|
||||
|
||||
//若无法获取Connection类对象,则抛出异常
|
||||
Connection connect = this.connect.orElseThrow(() -> new DatabaseException("数据库连接异常"));
|
||||
|
||||
try {
|
||||
//执行SQL,设置结果集可以滚动
|
||||
result = Optional.ofNullable(
|
||||
connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
|
||||
.executeQuery(sqlText.toString())
|
||||
);
|
||||
|
||||
//存储执行结果的表字段名,若执行后不存在表(如执行插入等SQL)时,则不做任何处理
|
||||
try {
|
||||
ResultSetMetaData metaData = result.get().getMetaData();
|
||||
int columnSize = metaData.getColumnCount();
|
||||
//注意:JDBC下标都是从1开始计算
|
||||
for (int index = 1; index <= columnSize; index++) {
|
||||
fieldNameList.add(metaData.getColumnName(index));
|
||||
}
|
||||
} catch(SQLException noFieldException) {
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
//若执行异常,则抛出异常
|
||||
throw new DatabaseException(String.format("SQL无法执行。\nSQL:%s", sqlText.toString()), e);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回结果集
|
||||
* @return 结果集
|
||||
*/
|
||||
public ResultSet getResult() {
|
||||
return result.orElseThrow(DatabaseException :: new);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回当前结果集中的元素个数
|
||||
* @return 当前结果集中元素个数
|
||||
*/
|
||||
public int getResultSize() {
|
||||
int size = -1;
|
||||
ResultSet result = getResult();
|
||||
try {
|
||||
//获取当前行
|
||||
int nowIndex = result.getRow();
|
||||
|
||||
//将光标移至最后一行,并存储当前行的行号,其行号即为当前元素的个数
|
||||
result.last();
|
||||
size = result.getRow();
|
||||
|
||||
//将光标移回原行
|
||||
result.absolute(nowIndex);
|
||||
} catch (SQLException e) {
|
||||
//若执行异常,则抛出异常
|
||||
throw new DatabaseException("数据库异常,无法获取元素个数", e);
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回结果集中第一条数据,即第一行第一列的数据。若结果集中无任何数据,则返回空串
|
||||
* @return 结果集第一条数据
|
||||
* @throws DatabaseException 若字段有误或未执行SQL或无结果集时抛出的异常
|
||||
*/
|
||||
public String getFirstResult() {
|
||||
//返回字符串,若搜索结果无对应行,则返回空串
|
||||
try {
|
||||
return getResult(1, 1, fieldNameList.get(0)).get(fieldNameList.get(0)).get(0);
|
||||
} catch (IndexOutOfBoundsException e) {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回结果集第一列指定行的结果
|
||||
* <p>
|
||||
* 方法接收结果集的起始下标与结束下标,并根据该组下标,获取结果,将其转换为
|
||||
* 字符串的形式进行返回,另外,行下标从1开始遍历,下标传入0或者1都表示获取第1行元素,且下标允许
|
||||
* 传入负数,表示反序遍历。其可能会出现以下情况:
|
||||
* <ol>
|
||||
* <li>起始下标大于结果集总数:返回空集合</li>
|
||||
* <li>起始下标大于结束下标:只获取起始行的数据</li>
|
||||
* <li>起始下标等于结束下标:获取当前行的数据</li>
|
||||
* <li>起始下标小于结束下标:获取相应多行的数据</li>
|
||||
* </ol>
|
||||
* </p>
|
||||
* <p>
|
||||
* <b>注意:</b>调用方法后,下标传入的负数实则会根据结果集的个数,转换为一个正数
|
||||
* 进行传参,即假设结果集中有100个元素,下标传入-2时,会将其转换为99(倒数第二行)进行处理。
|
||||
* 若负数下标的绝对值超过结果集的总数,则表示获取第一行元素
|
||||
* </p>
|
||||
* @param startIndex 起始下标
|
||||
* @param endIndex 结束下标
|
||||
* @return 第一列指定行的元素集合
|
||||
* @throws DatabaseException 若字段有误或未执行SQL或无结果集时抛出的异常
|
||||
*/
|
||||
public ArrayList<String> getFirstRowResult(int startIndex, int endIndex) {
|
||||
return getResult(startIndex, endIndex, fieldNameList.get(0)).get(fieldNameList.get(0));
|
||||
}
|
||||
|
||||
public ArrayList<String> getRowResult(String fieldName, int startIndex, int endIndex) {
|
||||
return getResult(startIndex, endIndex, fieldName).get(fieldName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于根据表中的字段名,获取结果集指定行数的内容,并以字符串的形式进行存储。
|
||||
* <p>
|
||||
* <b>注意:</b>下标从1开始,可以传入负数,表示从后遍历
|
||||
* </p>
|
||||
* @param startIndex 开始行
|
||||
* @param endIndex 结束行
|
||||
* @param fieldNames 字段组,可传入多个值
|
||||
* @return 字段组对应的结果文本集合
|
||||
* @throws DatabaseException 若字段有误或未执行SQL或无结果集时抛出的异常
|
||||
*/
|
||||
private HashMap<String, ArrayList<String>> getResult(int startIndex, int endIndex, String...fieldNames) {
|
||||
//转换下标
|
||||
int length = getResultSize();
|
||||
startIndex = changeIndex(startIndex, length);
|
||||
endIndex = changeIndex(endIndex, length);
|
||||
|
||||
//初始化Map
|
||||
HashMap<String, ArrayList<String>> fieldResultMap = new HashMap<>(16);
|
||||
Arrays.stream(fieldNames).forEach(fieldName -> fieldResultMap.put(fieldName, new ArrayList<String>()));
|
||||
|
||||
//判断是否存在结果集,不存在则抛出异常
|
||||
ResultSet result = this.result.orElseThrow(DatabaseException :: new);
|
||||
|
||||
try {
|
||||
//记录当前结果集光标位置,用于最后设置回当前位置
|
||||
int rowIndex = result.getRow();
|
||||
|
||||
//设置结果集光标初始位置
|
||||
result.absolute(startIndex);
|
||||
//判断当前光标是否在最后一行之后,若不为最后一行之后,则进行结果的存储
|
||||
if (!result.isAfterLast()) {
|
||||
//无论endIndex为何值,至少需要执行获取命令一次
|
||||
int index = startIndex;
|
||||
do {
|
||||
//获取相应字段的内容,若字段为null,则存储为空串
|
||||
Arrays.stream(fieldNames).forEach(fieldName -> {
|
||||
try {
|
||||
fieldResultMap.get(fieldName).
|
||||
add(Optional.ofNullable(result.getString(fieldName)).orElse(""));
|
||||
} catch (SQLException e) {
|
||||
//若执行异常,则抛出异常
|
||||
throw new DatabaseException(String.format("“%s”字段内容无法获取", fieldName), e);
|
||||
}
|
||||
});
|
||||
} while((index++) < endIndex && result.next());
|
||||
}
|
||||
|
||||
//设置结果集回到原位
|
||||
result.absolute(rowIndex);
|
||||
} catch (SQLException e) {
|
||||
//若执行异常,则抛出异常
|
||||
throw new DatabaseException("数据库异常,结果无法返回", e);
|
||||
}
|
||||
|
||||
return fieldResultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于将下标转换为正序遍历的下标
|
||||
* @param index 传入的下标
|
||||
* @param length 结果集总数
|
||||
* @return 转换后的下标
|
||||
*/
|
||||
private int changeIndex(int index, int length) {
|
||||
//若下标为0,则直接返回1,若下标小于0,则对下标进行处理,若下标大于0,则直接返回下标
|
||||
if (index < 0) {
|
||||
//若下标的绝对值大于结果集总数,则返回1
|
||||
if (Math.abs(index) > length) {
|
||||
return 1;
|
||||
} else {
|
||||
return (length + index) + 1;
|
||||
}
|
||||
} else if (index == 0) {
|
||||
return 1;
|
||||
} else {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,82 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>SqlTextUtil.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 提供生成一些基本的SQL语句
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年12月14日上午8:14:57</p>
|
||||
* <p><b>修改时间:</b>2020年12月14日上午8:14:57</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 1.8
|
||||
*
|
||||
*/
|
||||
public class SqlTextUtil {
|
||||
/**
|
||||
* 添加字段与某个值相等或不相等的条件(“=”条件),即:
|
||||
* <ul>
|
||||
* <li>字段与值相等:Where.fieldEquals("name", "张三", false)</li>
|
||||
* <li>字段与值不相等:Where.fieldEquals("a.name", "李四", true)</li>
|
||||
* </ul>
|
||||
* @param field 字段名
|
||||
* @param value 值
|
||||
* @param isNot 是否取反
|
||||
* @return 相应的SQL语句
|
||||
*/
|
||||
public static String equalsValue(String field, String value, boolean isNot) {
|
||||
return field + (isNot ? " !" : " ") + "= '" + value + "'";
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加字段的值与表其他字段的值相等或不相等的条件(“=”条件),即:
|
||||
* <ul>
|
||||
* <li>字段与值相等:Where.fieldEquals("name", "login_name", false)</li>
|
||||
* <li>字段与值不相等:Where.fieldEquals("a.name", "b.name", true)</li>
|
||||
* </ul>
|
||||
* @param field 字段名
|
||||
* @param equalsField 需判断的字段名
|
||||
* @param isNot 是否取反
|
||||
* @return 相应的SQL语句
|
||||
*/
|
||||
public static String equalsField(String field, String equalsField, boolean isNot) {
|
||||
return field + (isNot ? " !" : " ") + "= " + equalsField;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加字段包含或不包含某个值的条件(like条件),即:
|
||||
* <ul>
|
||||
* <li>字段包含值:Where.like("name", "%张三%", false)</li>
|
||||
* <li>字段不包含值:Where.like("a.name", "%张三", true)</li>
|
||||
* </ul>
|
||||
* @param field 字段名
|
||||
* @param value 值
|
||||
* @param isNot 是否取反
|
||||
* @return 相应的SQL语句
|
||||
*/
|
||||
public static String like(String field, String value, boolean isNot) {
|
||||
return field + (isNot ? " NOT " : " ") + "LIKE " + value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加字段值是否在一组值集合中的条件(in条件),即:
|
||||
* <ul>
|
||||
* <li>字段在某个值集合中:Where.in("name", false, "张三", "李四", "王五")</li>
|
||||
* <li>字段不包含值:Where.like("a.name", true, "张三", "李四", "王五")</li>
|
||||
* </ul>
|
||||
* @param field 字段名
|
||||
* @param isNot 是否取反
|
||||
* @param values 值集合,可传入多个
|
||||
* @return 相应的SQL语句
|
||||
*/
|
||||
public static String in(String field, boolean isNot, String...values) {
|
||||
//拼接值集合
|
||||
StringJoiner valueText = new StringJoiner(", ", "(", ")");
|
||||
Arrays.stream(values).map(value -> "'" + value + "'").forEach(valueText :: add);
|
||||
|
||||
return field + (isNot ? " NOT " : " ") + "IN ";
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
package pres.auxiliary.tool.sql;
|
||||
|
||||
public enum SqlType {
|
||||
/**
|
||||
* 查询
|
||||
*/
|
||||
SELECT("SELECT"),
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
DELECT("DELECT"),
|
||||
/**
|
||||
* 插入
|
||||
*/
|
||||
INSERT("INSERT INTO"),
|
||||
/**
|
||||
* 更新
|
||||
*/
|
||||
UPDATE("UPDATE"),
|
||||
/**
|
||||
* 清除表数据
|
||||
*/
|
||||
TRUNCATE("TRUNCATE TABLE"),
|
||||
/**
|
||||
* 执行存储过程
|
||||
*/
|
||||
CALL("CALL")
|
||||
;
|
||||
String name;
|
||||
|
||||
private SqlType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回SQL名称
|
||||
* @return SQL名称
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue