mirror of
https://github.com/CarmJos/EasySQL.git
synced 2024-09-19 21:35:47 +00:00
修改协议
This commit is contained in:
parent
69aaf4398f
commit
864c2ac128
14
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
14
.github/ISSUE_TEMPLATE/bugs_report.md
vendored
@ -1,30 +1,34 @@
|
|||||||
---
|
---
|
||||||
name: 问题提交
|
name: 问题提交 about: 描述问题并提交,帮助我们对其进行检查与修复。 title: ''
|
||||||
about: 描述问题并提交,帮助我们对其进行检查与修复。
|
labels: bug assignees: ''
|
||||||
title: ''
|
|
||||||
labels: bug
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **问题简述**
|
### **问题简述**
|
||||||
|
|
||||||
用简短的话语描述一下大概问题。
|
用简短的话语描述一下大概问题。
|
||||||
|
|
||||||
### **问题来源**
|
### **问题来源**
|
||||||
|
|
||||||
描述一下通过哪些操作才发现的问题,如:
|
描述一下通过哪些操作才发现的问题,如:
|
||||||
|
|
||||||
1. 使用了 '...'
|
1. 使用了 '...'
|
||||||
2. 输入了 '....'
|
2. 输入了 '....'
|
||||||
3. 出现了报错 '....'
|
3. 出现了报错 '....'
|
||||||
|
|
||||||
### **预期结果** (可选)
|
### **预期结果** (可选)
|
||||||
|
|
||||||
如果问题不发生,应该是什么情况
|
如果问题不发生,应该是什么情况
|
||||||
|
|
||||||
### **问题截图/问题报错**
|
### **问题截图/问题报错**
|
||||||
|
|
||||||
如果有报错或输出,请提供截图。
|
如果有报错或输出,请提供截图。
|
||||||
|
|
||||||
### **操作环境**
|
### **操作环境**
|
||||||
|
|
||||||
- 系统环境: `Windows 10` / `Ubuntu` / `...`
|
- 系统环境: `Windows 10` / `Ubuntu` / `...`
|
||||||
- Java版本: `JDK11` / `OPENJDK8` / `JRE8` / `...`
|
- Java版本: `JDK11` / `OPENJDK8` / `JRE8` / `...`
|
||||||
|
|
||||||
### **其他补充**
|
### **其他补充**
|
||||||
|
|
||||||
如有其他补充,可以在这里描述。
|
如有其他补充,可以在这里描述。
|
||||||
|
13
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
13
.github/ISSUE_TEMPLATE/feature_issues.md
vendored
@ -1,20 +1,21 @@
|
|||||||
---
|
---
|
||||||
name: 功能需求
|
name: 功能需求 about: 希望我们提供更多的功能。 title: ''
|
||||||
about: 希望我们提供更多的功能。
|
labels: enhancement assignees: ''
|
||||||
title: ''
|
|
||||||
labels: enhancement
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### **功能简述**
|
### **功能简述**
|
||||||
|
|
||||||
简单的描述一下你想要的功能
|
简单的描述一下你想要的功能
|
||||||
|
|
||||||
### **需求来源**
|
### **需求来源**
|
||||||
|
|
||||||
简单的描述一下为什么需要这个功能。
|
简单的描述一下为什么需要这个功能。
|
||||||
|
|
||||||
### **功能参考**(可选)
|
### **功能参考**(可选)
|
||||||
|
|
||||||
如果有相关功能的参考,如文本、截图,请提供给我们。
|
如果有相关功能的参考,如文本、截图,请提供给我们。
|
||||||
|
|
||||||
### **附加内容**
|
### **附加内容**
|
||||||
|
|
||||||
如果有什么小细节需要重点注意,请在这里告诉我们。
|
如果有什么小细节需要重点注意,请在这里告诉我们。
|
||||||
|
50
.github/workflows/codeql-analysis.yml
vendored
50
.github/workflows/codeql-analysis.yml
vendored
@ -37,34 +37,34 @@ jobs:
|
|||||||
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v1
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
# By default, queries listed here will override any specified in a config file.
|
# By default, queries listed here will override any specified in a config file.
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v1
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
# and modify them (or add more) to build your code if your project
|
# and modify them (or add more) to build your code if your project
|
||||||
# uses a compiled language
|
# uses a compiled language
|
||||||
|
|
||||||
#- run: |
|
#- run: |
|
||||||
# make bootstrap
|
# make bootstrap
|
||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v1
|
||||||
|
2
.github/workflows/sonar-analyze.yml
vendored
2
.github/workflows/sonar-analyze.yml
vendored
@ -4,7 +4,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [opened, synchronize, reopened]
|
types: [ opened, synchronize, reopened ]
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
|
23
README.md
23
README.md
@ -173,6 +173,7 @@ dependencies {
|
|||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
## 支持与捐赠
|
## 支持与捐赠
|
||||||
@ -185,22 +186,20 @@ dependencies {
|
|||||||
|
|
||||||
## 开源协议
|
## 开源协议
|
||||||
|
|
||||||
本项目源码采用 [GNU General Public License v3.0](https://opensource.org/licenses/GPL-3.0) 开源协议。
|
本项目源码采用 [The MIT License](https://opensource.org/licenses/MIT) 开源协议。
|
||||||
<details>
|
<details>
|
||||||
<summary>关于 GPL 协议</summary>
|
<summary>关于 MIT 协议</summary>
|
||||||
|
|
||||||
> GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:
|
> MIT 协议可能是几大开源协议中最宽松的一个,核心条款是:
|
||||||
>
|
>
|
||||||
> #### 可自由复制
|
> 该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版 权和许可提示。
|
||||||
> 你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
|
|
||||||
> #### 可自由分发
|
|
||||||
> 在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
|
|
||||||
> #### 可以用来盈利
|
|
||||||
> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
|
|
||||||
> #### 可自由修改
|
|
||||||
> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
|
|
||||||
>
|
>
|
||||||
> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
|
> 这意味着:
|
||||||
|
> - 你可以自由使用,复制,修改,可以用于自己的项目。
|
||||||
|
> - 可以免费分发或用来盈利。
|
||||||
|
> - 唯一的限制是必须包含许可声明。
|
||||||
|
>
|
||||||
|
> MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。
|
||||||
>
|
>
|
||||||
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
||||||
</details>
|
</details>
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
|
@ -29,138 +29,138 @@ import java.util.function.Consumer;
|
|||||||
*/
|
*/
|
||||||
public interface SQLAction<T> {
|
public interface SQLAction<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到该Action的UUID
|
* 得到该Action的UUID
|
||||||
*
|
*
|
||||||
* @return UUID
|
* @return UUID
|
||||||
*/
|
*/
|
||||||
@NotNull UUID getActionUUID();
|
@NotNull UUID getActionUUID();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到短八位格式的UUID
|
* 得到短八位格式的UUID
|
||||||
*
|
*
|
||||||
* @return UUID(8)
|
* @return UUID(8)
|
||||||
*/
|
*/
|
||||||
@NotNull String getShortID();
|
@NotNull String getShortID();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到该Action的创建时间
|
* 得到该Action的创建时间
|
||||||
*
|
*
|
||||||
* @return 创建时间
|
* @return 创建时间
|
||||||
*/
|
*/
|
||||||
long getCreateTime();
|
long getCreateTime();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到该Action所要执行的源SQL语句
|
* 得到该Action所要执行的源SQL语句
|
||||||
*
|
*
|
||||||
* @return 源SQL语句
|
* @return 源SQL语句
|
||||||
*/
|
*/
|
||||||
@NotNull String getSQLContent();
|
@NotNull String getSQLContent();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到承载该Action的对应{@link SQLManager}
|
* 得到承载该Action的对应{@link SQLManager}
|
||||||
*
|
*
|
||||||
* @return {@link SQLManager}
|
* @return {@link SQLManager}
|
||||||
*/
|
*/
|
||||||
@NotNull SQLManager getManager();
|
@NotNull SQLManager getManager();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行该Action对应的SQL语句
|
* 执行该Action对应的SQL语句
|
||||||
*
|
*
|
||||||
* @return 指定数据类型
|
* @return 指定数据类型
|
||||||
* @throws SQLException 当SQL操作出现问题时抛出
|
* @throws SQLException 当SQL操作出现问题时抛出
|
||||||
*/
|
*/
|
||||||
@NotNull T execute() throws SQLException;
|
@NotNull T execute() throws SQLException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行语句并返回值
|
* 执行语句并返回值
|
||||||
*
|
*
|
||||||
* @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()}
|
* @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()}
|
||||||
* @return 指定类型数据
|
* @return 指定类型数据
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
default T execute(@Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler) {
|
default T execute(@Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler) {
|
||||||
return execute(t -> t, exceptionHandler);
|
return execute(t -> t, exceptionHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行语句并处理返回值
|
* 执行语句并处理返回值
|
||||||
*
|
*
|
||||||
* @param function 处理方法
|
* @param function 处理方法
|
||||||
* @param <R> 需要返回的内容
|
* @param <R> 需要返回的内容
|
||||||
* @return 指定类型数据
|
* @return 指定类型数据
|
||||||
* @throws SQLException 当SQL操作出现问题时抛出
|
* @throws SQLException 当SQL操作出现问题时抛出
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
default <R> R executeFunction(@NotNull SQLFunction<T, R> function) throws SQLException {
|
default <R> R executeFunction(@NotNull SQLFunction<T, R> function) throws SQLException {
|
||||||
try {
|
try {
|
||||||
T value = execute();
|
T value = execute();
|
||||||
return function.apply(value);
|
return function.apply(value);
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
throw new SQLException(exception);
|
throw new SQLException(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行语句并处理返回值
|
* 执行语句并处理返回值
|
||||||
*
|
*
|
||||||
* @param function 处理方法
|
* @param function 处理方法
|
||||||
* @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()}
|
* @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()}
|
||||||
* @param <R> 需要返回的内容
|
* @param <R> 需要返回的内容
|
||||||
* @return 指定类型数据
|
* @return 指定类型数据
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
default <R> R execute(@NotNull SQLFunction<T, R> function,
|
default <R> R execute(@NotNull SQLFunction<T, R> function,
|
||||||
@Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler) {
|
@Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler) {
|
||||||
try {
|
try {
|
||||||
return executeFunction(function);
|
return executeFunction(function);
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
handleException(exceptionHandler, exception);
|
handleException(exceptionHandler, exception);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步执行SQL语句,采用默认异常处理,无需返回值。
|
* 异步执行SQL语句,采用默认异常处理,无需返回值。
|
||||||
*/
|
*/
|
||||||
default void executeAsync() {
|
default void executeAsync() {
|
||||||
executeAsync(null);
|
executeAsync(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步执行SQL语句
|
* 异步执行SQL语句
|
||||||
*
|
*
|
||||||
* @param success 成功时的操作
|
* @param success 成功时的操作
|
||||||
*/
|
*/
|
||||||
default void executeAsync(@Nullable Consumer<T> success) {
|
default void executeAsync(@Nullable Consumer<T> success) {
|
||||||
executeAsync(success, null);
|
executeAsync(success, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步执行SQL语句
|
* 异步执行SQL语句
|
||||||
*
|
*
|
||||||
* @param success 成功时的操作
|
* @param success 成功时的操作
|
||||||
* @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()}
|
* @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()}
|
||||||
*/
|
*/
|
||||||
void executeAsync(@Nullable Consumer<T> success, @Nullable BiConsumer<SQLException, SQLAction<T>> failure);
|
void executeAsync(@Nullable Consumer<T> success, @Nullable BiConsumer<SQLException, SQLAction<T>> failure);
|
||||||
|
|
||||||
|
|
||||||
default void handleException(@Nullable BiConsumer<SQLException, SQLAction<T>> handler, SQLException exception) {
|
default void handleException(@Nullable BiConsumer<SQLException, SQLAction<T>> handler, SQLException exception) {
|
||||||
if (handler == null) handler = defaultExceptionHandler();
|
if (handler == null) handler = defaultExceptionHandler();
|
||||||
handler.accept(exception, this);
|
handler.accept(exception, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 默认的异常处理器
|
* @return 默认的异常处理器
|
||||||
*/
|
*/
|
||||||
default BiConsumer<SQLException, SQLAction<T>> defaultExceptionHandler() {
|
default BiConsumer<SQLException, SQLAction<T>> defaultExceptionHandler() {
|
||||||
return (exception, action) -> {
|
return (exception, action) -> {
|
||||||
getManager().getLogger().severe("Error when execute [" + action.getSQLContent() + "]");
|
getManager().getLogger().severe("Error when execute [" + action.getSQLContent() + "]");
|
||||||
getManager().getLogger().severe(exception.getLocalizedMessage());
|
getManager().getLogger().severe(exception.getLocalizedMessage());
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
*/
|
*/
|
||||||
public interface SQLBuilder {
|
public interface SQLBuilder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到承载该Builder的对应{@link SQLManager}
|
* 得到承载该Builder的对应{@link SQLManager}
|
||||||
*
|
*
|
||||||
* @return {@link SQLManager}
|
* @return {@link SQLManager}
|
||||||
*/
|
*/
|
||||||
@NotNull SQLManager getManager();
|
@NotNull SQLManager getManager();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,145 +19,145 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public interface SQLManager {
|
public interface SQLManager {
|
||||||
|
|
||||||
Logger getLogger();
|
Logger getLogger();
|
||||||
|
|
||||||
boolean isDebugMode();
|
boolean isDebugMode();
|
||||||
|
|
||||||
void setDebugMode(boolean enable);
|
void setDebugMode(boolean enable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到连接池源
|
* 得到连接池源
|
||||||
*
|
*
|
||||||
* @return DataSource
|
* @return DataSource
|
||||||
*/
|
*/
|
||||||
@NotNull DataSource getDataSource();
|
@NotNull DataSource getDataSource();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到一个数据库连接实例
|
* 得到一个数据库连接实例
|
||||||
*
|
*
|
||||||
* @return Connection
|
* @return Connection
|
||||||
* @throws SQLException 见 {@link DataSource#getConnection()}
|
* @throws SQLException 见 {@link DataSource#getConnection()}
|
||||||
*/
|
*/
|
||||||
@NotNull Connection getConnection() throws SQLException;
|
@NotNull Connection getConnection() throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到正使用的查询。
|
* 得到正使用的查询。
|
||||||
*
|
*
|
||||||
* @return 查询列表
|
* @return 查询列表
|
||||||
*/
|
*/
|
||||||
@NotNull Map<UUID, SQLQuery> getActiveQuery();
|
@NotNull Map<UUID, SQLQuery> getActiveQuery();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行一条不需要返回结果的SQL语句(多用于UPDATE、REPLACE、DELETE方法)
|
* 执行一条不需要返回结果的SQL语句(多用于UPDATE、REPLACE、DELETE方法)
|
||||||
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
||||||
*
|
*
|
||||||
* @param sql SQL语句内容
|
* @param sql SQL语句内容
|
||||||
* @return 更新的行数
|
* @return 更新的行数
|
||||||
* @see SQLUpdateAction
|
* @see SQLUpdateAction
|
||||||
*/
|
*/
|
||||||
@Nullable Integer executeSQL(String sql);
|
@Nullable Integer executeSQL(String sql);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行一条不需要返回结果的预处理SQL更改(UPDATE、REPLACE、DELETE)
|
* 执行一条不需要返回结果的预处理SQL更改(UPDATE、REPLACE、DELETE)
|
||||||
*
|
*
|
||||||
* @param sql SQL语句内容
|
* @param sql SQL语句内容
|
||||||
* @param params SQL语句中 ? 的对应参数
|
* @param params SQL语句中 ? 的对应参数
|
||||||
* @return 更新的行数
|
* @return 更新的行数
|
||||||
* @see PreparedSQLUpdateAction
|
* @see PreparedSQLUpdateAction
|
||||||
*/
|
*/
|
||||||
@Nullable Integer executeSQL(String sql, Object[] params);
|
@Nullable Integer executeSQL(String sql, Object[] params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行多条不需要返回结果的SQL更改(UPDATE、REPLACE、DELETE)
|
* 执行多条不需要返回结果的SQL更改(UPDATE、REPLACE、DELETE)
|
||||||
*
|
*
|
||||||
* @param sql SQL语句内容
|
* @param sql SQL语句内容
|
||||||
* @param paramsBatch SQL语句中对应?的参数组
|
* @param paramsBatch SQL语句中对应?的参数组
|
||||||
* @return 对应参数返回的行数
|
* @return 对应参数返回的行数
|
||||||
* @see PreparedSQLUpdateBatchAction
|
* @see PreparedSQLUpdateBatchAction
|
||||||
*/
|
*/
|
||||||
@Nullable List<Integer> executeSQLBatch(String sql, Iterable<Object[]> paramsBatch);
|
@Nullable List<Integer> executeSQLBatch(String sql, Iterable<Object[]> paramsBatch);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行多条不需要返回结果的SQL。
|
* 执行多条不需要返回结果的SQL。
|
||||||
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
||||||
*
|
*
|
||||||
* @param sql SQL语句内容
|
* @param sql SQL语句内容
|
||||||
* @param moreSQL 更多SQL语句内容
|
* @param moreSQL 更多SQL语句内容
|
||||||
* @return 对应参数返回的行数
|
* @return 对应参数返回的行数
|
||||||
* @see SQLUpdateBatchAction
|
* @see SQLUpdateBatchAction
|
||||||
*/
|
*/
|
||||||
@Nullable List<Integer> executeSQLBatch(@NotNull String sql, String... moreSQL);
|
@Nullable List<Integer> executeSQLBatch(@NotNull String sql, String... moreSQL);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行多条不需要返回结果的SQL。
|
* 执行多条不需要返回结果的SQL。
|
||||||
*
|
*
|
||||||
* @param sqlBatch SQL语句内容
|
* @param sqlBatch SQL语句内容
|
||||||
* @return 对应参数返回的行数
|
* @return 对应参数返回的行数
|
||||||
*/
|
*/
|
||||||
@Nullable List<Integer> executeSQLBatch(@NotNull Iterable<String> sqlBatch);
|
@Nullable List<Integer> executeSQLBatch(@NotNull Iterable<String> sqlBatch);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在库中创建一个表
|
* 在库中创建一个表
|
||||||
*
|
*
|
||||||
* @param tableName 表名
|
* @param tableName 表名
|
||||||
* @return {@link TableCreateBuilder}
|
* @return {@link TableCreateBuilder}
|
||||||
*/
|
*/
|
||||||
TableCreateBuilder createTable(@NotNull String tableName);
|
TableCreateBuilder createTable(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新建一个查询
|
* 新建一个查询
|
||||||
*
|
*
|
||||||
* @return {@link QueryBuilder}
|
* @return {@link QueryBuilder}
|
||||||
*/
|
*/
|
||||||
QueryBuilder createQuery();
|
QueryBuilder createQuery();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一条插入操作
|
* 创建一条插入操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link InsertBuilder}
|
* @return {@link InsertBuilder}
|
||||||
*/
|
*/
|
||||||
InsertBuilder<PreparedSQLUpdateAction> createInsert(@NotNull String tableName);
|
InsertBuilder<PreparedSQLUpdateAction> createInsert(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建支持多组数据的插入操作
|
* 创建支持多组数据的插入操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link InsertBuilder}
|
* @return {@link InsertBuilder}
|
||||||
*/
|
*/
|
||||||
InsertBuilder<PreparedSQLUpdateBatchAction> createInsertBatch(@NotNull String tableName);
|
InsertBuilder<PreparedSQLUpdateBatchAction> createInsertBatch(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一条替换操作
|
* 创建一条替换操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link ReplaceBuilder}
|
* @return {@link ReplaceBuilder}
|
||||||
*/
|
*/
|
||||||
ReplaceBuilder<PreparedSQLUpdateAction> createReplace(@NotNull String tableName);
|
ReplaceBuilder<PreparedSQLUpdateAction> createReplace(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建支持多组数据的替换操作
|
* 创建支持多组数据的替换操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link ReplaceBuilder}
|
* @return {@link ReplaceBuilder}
|
||||||
*/
|
*/
|
||||||
ReplaceBuilder<PreparedSQLUpdateBatchAction> createReplaceBatch(@NotNull String tableName);
|
ReplaceBuilder<PreparedSQLUpdateBatchAction> createReplaceBatch(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建更新操作
|
* 创建更新操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link UpdateBuilder}
|
* @return {@link UpdateBuilder}
|
||||||
*/
|
*/
|
||||||
UpdateBuilder createUpdate(@NotNull String tableName);
|
UpdateBuilder createUpdate(@NotNull String tableName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建删除操作
|
* 创建删除操作
|
||||||
*
|
*
|
||||||
* @param tableName 目标表名
|
* @param tableName 目标表名
|
||||||
* @return {@link DeleteBuilder}
|
* @return {@link DeleteBuilder}
|
||||||
*/
|
*/
|
||||||
DeleteBuilder createDelete(@NotNull String tableName);
|
DeleteBuilder createDelete(@NotNull String tableName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,20 +4,20 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
public interface PreparedSQLUpdateAction extends SQLUpdateAction {
|
public interface PreparedSQLUpdateAction extends SQLUpdateAction {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定SQL语句中所有 ? 对应的参数
|
* 设定SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param params 参数内容
|
* @param params 参数内容
|
||||||
* @return {@link PreparedSQLUpdateAction}
|
* @return {@link PreparedSQLUpdateAction}
|
||||||
*/
|
*/
|
||||||
PreparedSQLUpdateAction setParams(Object... params);
|
PreparedSQLUpdateAction setParams(Object... params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定SQL语句中所有 ? 对应的参数
|
* 设定SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param params 参数内容
|
* @param params 参数内容
|
||||||
* @return {@link PreparedSQLUpdateAction}
|
* @return {@link PreparedSQLUpdateAction}
|
||||||
*/
|
*/
|
||||||
PreparedSQLUpdateAction setParams(@Nullable Iterable<Object> params);
|
PreparedSQLUpdateAction setParams(@Nullable Iterable<Object> params);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,39 +6,39 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface PreparedSQLUpdateBatchAction extends SQLAction<List<Integer>> {
|
public interface PreparedSQLUpdateBatchAction extends SQLAction<List<Integer>> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定多组SQL语句中所有 ? 对应的参数
|
* 设定多组SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param allParams 所有参数内容
|
* @param allParams 所有参数内容
|
||||||
* @return {@link PreparedSQLUpdateBatchAction}
|
* @return {@link PreparedSQLUpdateBatchAction}
|
||||||
*/
|
*/
|
||||||
PreparedSQLUpdateBatchAction setAllParams(Iterable<Object[]> allParams);
|
PreparedSQLUpdateBatchAction setAllParams(Iterable<Object[]> allParams);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加一组SQL语句中所有 ? 对应的参数
|
* 添加一组SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param params 参数内容
|
* @param params 参数内容
|
||||||
* @return {@link PreparedSQLUpdateBatchAction}
|
* @return {@link PreparedSQLUpdateBatchAction}
|
||||||
*/
|
*/
|
||||||
PreparedSQLUpdateBatchAction addParamsBatch(Object... params);
|
PreparedSQLUpdateBatchAction addParamsBatch(Object... params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定自增主键的序列
|
* 设定自增主键的序列
|
||||||
*
|
*
|
||||||
* @param keyColumnIndex 自增主键的序列
|
* @param keyColumnIndex 自增主键的序列
|
||||||
* <br>若该值 > 0,则 {@link #execute()} 返回自增主键数值
|
* <br>若该值 > 0,则 {@link #execute()} 返回自增主键数值
|
||||||
* <br>若该值 ≤ 0,则 {@link #execute()} 返回变更的行数
|
* <br>若该值 ≤ 0,则 {@link #execute()} 返回变更的行数
|
||||||
* @return {@link PreparedSQLUpdateBatchAction}
|
* @return {@link PreparedSQLUpdateBatchAction}
|
||||||
*/
|
*/
|
||||||
PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex);
|
PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。
|
* 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。
|
||||||
*
|
*
|
||||||
* @return 默认主键序列
|
* @return 默认主键序列
|
||||||
*/
|
*/
|
||||||
default PreparedSQLUpdateBatchAction defaultKeyIndex() {
|
default PreparedSQLUpdateBatchAction defaultKeyIndex() {
|
||||||
return setKeyIndex(-1); // will return changed lines number
|
return setKeyIndex(-1); // will return changed lines number
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,31 +2,26 @@ package cc.carm.lib.easysql.api.action;
|
|||||||
|
|
||||||
import cc.carm.lib.easysql.api.SQLAction;
|
import cc.carm.lib.easysql.api.SQLAction;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.BiConsumer;
|
|
||||||
|
|
||||||
public interface SQLUpdateAction extends SQLAction<Integer> {
|
public interface SQLUpdateAction extends SQLAction<Integer> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定自增主键的序列
|
* 设定自增主键的序列
|
||||||
*
|
*
|
||||||
* @param keyColumnIndex 自增主键的序列
|
* @param keyColumnIndex 自增主键的序列
|
||||||
* <br>若该值 > 0,则 {@link #execute()} 返回自增主键数值
|
* <br>若该值 > 0,则 {@link #execute()} 返回自增主键数值
|
||||||
* <br>若该值 ≤ 0,则 {@link #execute()} 返回变更的行数
|
* <br>若该值 ≤ 0,则 {@link #execute()} 返回变更的行数
|
||||||
* @return {@link SQLUpdateAction}
|
* @return {@link SQLUpdateAction}
|
||||||
*/
|
*/
|
||||||
SQLUpdateAction setKeyIndex(int keyColumnIndex);
|
SQLUpdateAction setKeyIndex(int keyColumnIndex);
|
||||||
|
|
||||||
/**
|
|
||||||
* 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。
|
|
||||||
*
|
|
||||||
* @return 默认主键序列
|
|
||||||
*/
|
|
||||||
default SQLUpdateAction defaultKeyIndex() {
|
|
||||||
return setKeyIndex(-1); // will return changed lines number
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。
|
||||||
|
*
|
||||||
|
* @return 默认主键序列
|
||||||
|
*/
|
||||||
|
default SQLUpdateAction defaultKeyIndex() {
|
||||||
|
return setKeyIndex(-1); // will return changed lines number
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,28 +9,28 @@ import java.util.function.BiConsumer;
|
|||||||
|
|
||||||
public interface SQLUpdateBatchAction extends SQLAction<List<Integer>> {
|
public interface SQLUpdateBatchAction extends SQLAction<List<Integer>> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加一条批量执行的SQL语句
|
* 添加一条批量执行的SQL语句
|
||||||
*
|
*
|
||||||
* @param sql SQL语句
|
* @param sql SQL语句
|
||||||
* @return {@link SQLUpdateBatchAction}
|
* @return {@link SQLUpdateBatchAction}
|
||||||
*/
|
*/
|
||||||
SQLUpdateBatchAction addBatch(@NotNull String sql);
|
SQLUpdateBatchAction addBatch(@NotNull String sql);
|
||||||
|
|
||||||
List<String> getSQLContents();
|
List<String> getSQLContents();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default BiConsumer<SQLException, SQLAction<List<Integer>>> defaultExceptionHandler() {
|
default BiConsumer<SQLException, SQLAction<List<Integer>>> defaultExceptionHandler() {
|
||||||
return (exception, action) -> {
|
return (exception, action) -> {
|
||||||
getManager().getLogger().severe("Error when execute SQLs : ");
|
getManager().getLogger().severe("Error when execute SQLs : ");
|
||||||
int i = 1;
|
int i = 1;
|
||||||
for (String content : getSQLContents()) {
|
for (String content : getSQLContents()) {
|
||||||
getManager().getLogger().severe("#" + i + " [" + content + "]");
|
getManager().getLogger().severe("#" + i + " [" + content + "]");
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
getManager().getLogger().severe(exception.getLocalizedMessage());
|
getManager().getLogger().severe(exception.getLocalizedMessage());
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,29 +7,29 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public interface PreparedQueryAction extends QueryAction {
|
public interface PreparedQueryAction extends QueryAction {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定SQL语句中所有 ? 对应的参数
|
* 设定SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param params 参数内容
|
* @param params 参数内容
|
||||||
* @return {@link PreparedQueryAction}
|
* @return {@link PreparedQueryAction}
|
||||||
*/
|
*/
|
||||||
PreparedQueryAction setParams(@Nullable Object... params);
|
PreparedQueryAction setParams(@Nullable Object... params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设定SQL语句中所有 ? 对应的参数
|
* 设定SQL语句中所有 ? 对应的参数
|
||||||
*
|
*
|
||||||
* @param params 参数内容
|
* @param params 参数内容
|
||||||
* @return {@link PreparedQueryAction}
|
* @return {@link PreparedQueryAction}
|
||||||
*/
|
*/
|
||||||
PreparedQueryAction setParams(@Nullable Iterable<Object> params);
|
PreparedQueryAction setParams(@Nullable Iterable<Object> params);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 直接对 {@link PreparedStatement} 进行处理
|
* 直接对 {@link PreparedStatement} 进行处理
|
||||||
*
|
*
|
||||||
* @param statement {@link Consumer} 处理操作
|
* @param statement {@link Consumer} 处理操作
|
||||||
* 若为空则不进行处理
|
* 若为空则不进行处理
|
||||||
* @return {@link PreparedQueryAction}
|
* @return {@link PreparedQueryAction}
|
||||||
*/
|
*/
|
||||||
PreparedQueryAction handleStatement(@Nullable Consumer<PreparedStatement> statement);
|
PreparedQueryAction handleStatement(@Nullable Consumer<PreparedStatement> statement);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,22 +30,22 @@ import java.util.function.Consumer;
|
|||||||
*/
|
*/
|
||||||
public interface QueryAction extends SQLAction<SQLQuery> {
|
public interface QueryAction extends SQLAction<SQLQuery> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行语句并处理返回值
|
* 执行语句并处理返回值
|
||||||
*
|
*
|
||||||
* @param function 处理方法
|
* @param function 处理方法
|
||||||
* @param <R> 需要返回的内容
|
* @param <R> 需要返回的内容
|
||||||
* @return 指定类型数据
|
* @return 指定类型数据
|
||||||
* @throws SQLException 当SQL操作出现问题时抛出
|
* @throws SQLException 当SQL操作出现问题时抛出
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
default <R> R executeFunction(@NotNull SQLFunction<SQLQuery, R> function)
|
default <R> R executeFunction(@NotNull SQLFunction<SQLQuery, R> function)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
try (SQLQuery value = execute()) {
|
try (SQLQuery value = execute()) {
|
||||||
return function.apply(value);
|
return function.apply(value);
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
throw new SQLException(exception);
|
throw new SQLException(exception);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,43 +8,43 @@ import java.sql.Statement;
|
|||||||
|
|
||||||
public interface SQLQuery extends AutoCloseable {
|
public interface SQLQuery extends AutoCloseable {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取该查询创建的时间
|
* 获取该查询创建的时间
|
||||||
*
|
*
|
||||||
* @return 创建时间
|
* @return 创建时间
|
||||||
*/
|
*/
|
||||||
long getExecuteTime();
|
long getExecuteTime();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到承载该SQLQuery的对应{@link SQLManager}
|
* 得到承载该SQLQuery的对应{@link SQLManager}
|
||||||
*
|
*
|
||||||
* @return {@link SQLManager}
|
* @return {@link SQLManager}
|
||||||
*/
|
*/
|
||||||
SQLManager getManager();
|
SQLManager getManager();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到承载该SQLQuery的对应{@link QueryAction}
|
* 得到承载该SQLQuery的对应{@link QueryAction}
|
||||||
*
|
*
|
||||||
* @return {@link QueryAction} 或 {@link PreparedQueryAction}
|
* @return {@link QueryAction} 或 {@link PreparedQueryAction}
|
||||||
*/
|
*/
|
||||||
QueryAction getAction();
|
QueryAction getAction();
|
||||||
|
|
||||||
ResultSet getResultSet();
|
ResultSet getResultSet();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到设定的SQL语句
|
* 得到设定的SQL语句
|
||||||
*
|
*
|
||||||
* @return SQL语句
|
* @return SQL语句
|
||||||
*/
|
*/
|
||||||
String getSQLContent();
|
String getSQLContent();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭所有内容
|
* 关闭所有内容
|
||||||
*/
|
*/
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
Statement getStatement();
|
Statement getStatement();
|
||||||
|
|
||||||
Connection getConnection();
|
Connection getConnection();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,34 +9,34 @@ import java.util.LinkedHashMap;
|
|||||||
|
|
||||||
public interface ConditionalBuilder<B extends ConditionalBuilder<B, T>, T> extends SQLBuilder {
|
public interface ConditionalBuilder<B extends ConditionalBuilder<B, T>, T> extends SQLBuilder {
|
||||||
|
|
||||||
T build();
|
T build();
|
||||||
|
|
||||||
B setLimit(int limit);
|
B setLimit(int limit);
|
||||||
|
|
||||||
B setConditions(@Nullable String condition);
|
B setConditions(@Nullable String condition);
|
||||||
|
|
||||||
B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs);
|
B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs);
|
||||||
|
|
||||||
B addCondition(@Nullable String condition);
|
B addCondition(@Nullable String condition);
|
||||||
|
|
||||||
B addCondition(@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue);
|
B addCondition(@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue);
|
||||||
|
|
||||||
default B addCondition(@NotNull String queryName, @Nullable Object queryValue) {
|
default B addCondition(@NotNull String queryName, @Nullable Object queryValue) {
|
||||||
return addCondition(queryName, "=", queryValue);
|
return addCondition(queryName, "=", queryValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
B addCondition(@NotNull String[] queryNames, @Nullable Object[] queryValues);
|
B addCondition(@NotNull String[] queryNames, @Nullable Object[] queryValues);
|
||||||
|
|
||||||
B addNotNullCondition(@NotNull String queryName);
|
B addNotNullCondition(@NotNull String queryName);
|
||||||
|
|
||||||
default B addTimeCondition(@NotNull String queryName, long startMillis, long endMillis) {
|
default B addTimeCondition(@NotNull String queryName, long startMillis, long endMillis) {
|
||||||
return addTimeCondition(queryName,
|
return addTimeCondition(queryName,
|
||||||
startMillis > 0 ? new Date(startMillis) : null,
|
startMillis > 0 ? new Date(startMillis) : null,
|
||||||
endMillis > 0 ? new Date(endMillis) : null
|
endMillis > 0 ? new Date(endMillis) : null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
B addTimeCondition(@NotNull String queryName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate);
|
B addTimeCondition(@NotNull String queryName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,6 @@ import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction;
|
|||||||
|
|
||||||
public interface DeleteBuilder extends ConditionalBuilder<DeleteBuilder, PreparedSQLUpdateAction> {
|
public interface DeleteBuilder extends ConditionalBuilder<DeleteBuilder, PreparedSQLUpdateAction> {
|
||||||
|
|
||||||
String getTableName();
|
String getTableName();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,13 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface InsertBuilder<T> {
|
public interface InsertBuilder<T> {
|
||||||
|
|
||||||
String getTableName();
|
String getTableName();
|
||||||
|
|
||||||
T setColumnNames(List<String> columnNames);
|
T setColumnNames(List<String> columnNames);
|
||||||
|
|
||||||
default T setColumnNames(String... columnNames) {
|
default T setColumnNames(String... columnNames) {
|
||||||
return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames));
|
return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,31 +7,31 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
public interface QueryBuilder extends SQLBuilder {
|
public interface QueryBuilder extends SQLBuilder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过一条 SQL语句创建查询。
|
* 通过一条 SQL语句创建查询。
|
||||||
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
* 该方法使用 Statement 实现,请注意SQL注入风险!
|
||||||
*
|
*
|
||||||
* @param sql SQL语句
|
* @param sql SQL语句
|
||||||
* @return {@link QueryAction}
|
* @return {@link QueryAction}
|
||||||
* @deprecated 存在SQL注入风险,建议使用 {@link QueryBuilder#withPreparedSQL(String)}
|
* @deprecated 存在SQL注入风险,建议使用 {@link QueryBuilder#withPreparedSQL(String)}
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
QueryAction withSQL(@NotNull String sql);
|
QueryAction withSQL(@NotNull String sql);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过一条 SQL语句创建预查询
|
* 通过一条 SQL语句创建预查询
|
||||||
*
|
*
|
||||||
* @param sql SQL语句
|
* @param sql SQL语句
|
||||||
* @return {@link PreparedQueryAction}
|
* @return {@link PreparedQueryAction}
|
||||||
*/
|
*/
|
||||||
PreparedQueryAction withPreparedSQL(@NotNull String sql);
|
PreparedQueryAction withPreparedSQL(@NotNull String sql);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建表查询
|
* 创建表查询
|
||||||
*
|
*
|
||||||
* @param tableName 表名
|
* @param tableName 表名
|
||||||
* @return {@link TableQueryBuilder}
|
* @return {@link TableQueryBuilder}
|
||||||
*/
|
*/
|
||||||
TableQueryBuilder inTable(@NotNull String tableName);
|
TableQueryBuilder inTable(@NotNull String tableName);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,13 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface ReplaceBuilder<T> {
|
public interface ReplaceBuilder<T> {
|
||||||
|
|
||||||
String getTableName();
|
String getTableName();
|
||||||
|
|
||||||
T setColumnNames(List<String> columnNames);
|
T setColumnNames(List<String> columnNames);
|
||||||
|
|
||||||
default T setColumnNames(String... columnNames) {
|
default T setColumnNames(String... columnNames) {
|
||||||
return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames));
|
return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,25 +6,25 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
public interface TableCreateBuilder extends SQLBuilder {
|
public interface TableCreateBuilder extends SQLBuilder {
|
||||||
|
|
||||||
@NotNull String getTableName();
|
@NotNull String getTableName();
|
||||||
|
|
||||||
@NotNull String getTableSettings();
|
@NotNull String getTableSettings();
|
||||||
|
|
||||||
TableCreateBuilder setTableSettings(@NotNull String settings);
|
TableCreateBuilder setTableSettings(@NotNull String settings);
|
||||||
|
|
||||||
SQLUpdateAction build();
|
SQLUpdateAction build();
|
||||||
|
|
||||||
default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) {
|
default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) {
|
||||||
return addColumn("`" + columnName + "` " + settings);
|
return addColumn("`" + columnName + "` " + settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
TableCreateBuilder addColumn(@NotNull String column);
|
TableCreateBuilder addColumn(@NotNull String column);
|
||||||
|
|
||||||
TableCreateBuilder setColumns(@NotNull String... columns);
|
TableCreateBuilder setColumns(@NotNull String... columns);
|
||||||
|
|
||||||
default TableCreateBuilder defaultTablesSettings() {
|
default TableCreateBuilder defaultTablesSettings() {
|
||||||
return setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8");
|
return setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,33 +5,33 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
public interface TableQueryBuilder extends ConditionalBuilder<TableQueryBuilder, PreparedQueryAction> {
|
public interface TableQueryBuilder extends ConditionalBuilder<TableQueryBuilder, PreparedQueryAction> {
|
||||||
|
|
||||||
@NotNull String getTableName();
|
@NotNull String getTableName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 选定用于查询的列名
|
* 选定用于查询的列名
|
||||||
*
|
*
|
||||||
* @param columnNames 列名
|
* @param columnNames 列名
|
||||||
* @return {@link TableQueryBuilder}
|
* @return {@link TableQueryBuilder}
|
||||||
*/
|
*/
|
||||||
TableQueryBuilder selectColumns(@NotNull String... columnNames);
|
TableQueryBuilder selectColumns(@NotNull String... columnNames);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对结果进行排序
|
* 对结果进行排序
|
||||||
*
|
*
|
||||||
* @param columnName 排序使用的列名
|
* @param columnName 排序使用的列名
|
||||||
* @param asc 是否为正序排序 (为false则倒序排序)
|
* @param asc 是否为正序排序 (为false则倒序排序)
|
||||||
* @return {@link TableQueryBuilder}
|
* @return {@link TableQueryBuilder}
|
||||||
*/
|
*/
|
||||||
TableQueryBuilder orderBy(@NotNull String columnName, boolean asc);
|
TableQueryBuilder orderBy(@NotNull String columnName, boolean asc);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 限制查询条数,用于分页查询。
|
* 限制查询条数,用于分页查询。
|
||||||
*
|
*
|
||||||
* @param start 开始数
|
* @param start 开始数
|
||||||
* @param end 结束条数
|
* @param end 结束条数
|
||||||
* @return {@link TableQueryBuilder}
|
* @return {@link TableQueryBuilder}
|
||||||
* @since 0.2.6
|
* @since 0.2.6
|
||||||
*/
|
*/
|
||||||
TableQueryBuilder setPageLimit(int start, int end);
|
TableQueryBuilder setPageLimit(int start, int end);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,15 +6,15 @@ import java.util.LinkedHashMap;
|
|||||||
|
|
||||||
public interface UpdateBuilder extends ConditionalBuilder<UpdateBuilder, PreparedSQLUpdateAction> {
|
public interface UpdateBuilder extends ConditionalBuilder<UpdateBuilder, PreparedSQLUpdateAction> {
|
||||||
|
|
||||||
String getTableName();
|
String getTableName();
|
||||||
|
|
||||||
UpdateBuilder setColumnValues(LinkedHashMap<String, Object> columnData);
|
UpdateBuilder setColumnValues(LinkedHashMap<String, Object> columnData);
|
||||||
|
|
||||||
UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues);
|
UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues);
|
||||||
|
|
||||||
default UpdateBuilder setColumnValues(String columnName, Object columnValue) {
|
default UpdateBuilder setColumnValues(String columnName, Object columnValue) {
|
||||||
return setColumnValues(new String[]{columnName}, new Object[]{columnValue});
|
return setColumnValues(new String[]{columnName}, new Object[]{columnValue});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@ package cc.carm.lib.easysql.api.builder;
|
|||||||
|
|
||||||
public interface UpsertBuilder {
|
public interface UpsertBuilder {
|
||||||
|
|
||||||
String getTableName();
|
String getTableName();
|
||||||
|
|
||||||
UpsertBuilder setColumnNames(String[] columnNames, String updateColumn);
|
UpsertBuilder setColumnNames(String[] columnNames, String updateColumn);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import java.sql.SQLException;
|
|||||||
|
|
||||||
public interface SQLFunction<T, R> {
|
public interface SQLFunction<T, R> {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
R apply(T t) throws SQLException;
|
R apply(T t) throws SQLException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,103 +6,103 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class TimeDateUtils {
|
public class TimeDateUtils {
|
||||||
public static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
public static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
public TimeDateUtils() {
|
public TimeDateUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到当前时间文本。
|
* 得到当前时间文本。
|
||||||
*
|
*
|
||||||
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
||||||
*/
|
*/
|
||||||
public static String getCurrentTime() {
|
public static String getCurrentTime() {
|
||||||
return getTimeString(System.currentTimeMillis());
|
return getTimeString(System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到一个时间戳的文本
|
* 得到一个时间戳的文本
|
||||||
*
|
*
|
||||||
* @param timeMillis 时间戳
|
* @param timeMillis 时间戳
|
||||||
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
||||||
*/
|
*/
|
||||||
public static String getTimeString(long timeMillis) {
|
public static String getTimeString(long timeMillis) {
|
||||||
return getFormat().format(new Date(timeMillis));
|
return getFormat().format(new Date(timeMillis));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到一个日期时间的文本
|
* 得到一个日期时间的文本
|
||||||
*
|
*
|
||||||
* @param time 日期时间
|
* @param time 日期时间
|
||||||
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
* @return 时间文本 格式{@link TimeDateUtils#getFormat()}
|
||||||
*/
|
*/
|
||||||
public static String getTimeString(Date time) {
|
public static String getTimeString(Date time) {
|
||||||
return getFormat().format(time);
|
return getFormat().format(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到一个时间文本的时间戳
|
* 得到一个时间文本的时间戳
|
||||||
*
|
*
|
||||||
* @param timeString 时间文本
|
* @param timeString 时间文本
|
||||||
* @return 时间戳 格式{@link TimeDateUtils#getFormat()}
|
* @return 时间戳 格式{@link TimeDateUtils#getFormat()}
|
||||||
*/
|
*/
|
||||||
public static long parseTimeMillis(String timeString) {
|
public static long parseTimeMillis(String timeString) {
|
||||||
if (timeString == null) {
|
if (timeString == null) {
|
||||||
return -1L;
|
return -1L;
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
return format.parse(timeString).getTime();
|
return format.parse(timeString).getTime();
|
||||||
} catch (ParseException var2) {
|
} catch (ParseException var2) {
|
||||||
return -1L;
|
return -1L;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到一个时间文本的对应日期实例
|
* 得到一个时间文本的对应日期实例
|
||||||
*
|
*
|
||||||
* @param timeString 时间文本
|
* @param timeString 时间文本
|
||||||
* @return 日期实例 格式{@link TimeDateUtils#getFormat()}
|
* @return 日期实例 格式{@link TimeDateUtils#getFormat()}
|
||||||
*/
|
*/
|
||||||
public static Date getTimeDate(String timeString) {
|
public static Date getTimeDate(String timeString) {
|
||||||
if (timeString == null) {
|
if (timeString == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
return format.parse(timeString);
|
return format.parse(timeString);
|
||||||
} catch (ParseException var2) {
|
} catch (ParseException var2) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将秒数转化为 DD:hh:mm:ss 格式
|
* 将秒数转化为 DD:hh:mm:ss 格式
|
||||||
*
|
*
|
||||||
* @param allSeconds 秒数
|
* @param allSeconds 秒数
|
||||||
* @return DD:hh:mm:ss格式文本
|
* @return DD:hh:mm:ss格式文本
|
||||||
*/
|
*/
|
||||||
public static String toDHMSStyle(long allSeconds) {
|
public static String toDHMSStyle(long allSeconds) {
|
||||||
long days = allSeconds / 86400L;
|
long days = allSeconds / 86400L;
|
||||||
long hours = allSeconds % 86400L / 3600L;
|
long hours = allSeconds % 86400L / 3600L;
|
||||||
long minutes = allSeconds % 3600L / 60L;
|
long minutes = allSeconds % 3600L / 60L;
|
||||||
long seconds = allSeconds % 60L;
|
long seconds = allSeconds % 60L;
|
||||||
String DateTimes;
|
String DateTimes;
|
||||||
if (days > 0L) {
|
if (days > 0L) {
|
||||||
DateTimes = days + "天" + (hours > 0L ? hours + "小时" : "") + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : "");
|
DateTimes = days + "天" + (hours > 0L ? hours + "小时" : "") + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : "");
|
||||||
} else if (hours > 0L) {
|
} else if (hours > 0L) {
|
||||||
DateTimes = hours + "小时" + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : "");
|
DateTimes = hours + "小时" + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : "");
|
||||||
} else if (minutes > 0L) {
|
} else if (minutes > 0L) {
|
||||||
DateTimes = minutes + "分钟" + (seconds > 0L ? seconds + "秒" : "");
|
DateTimes = minutes + "分钟" + (seconds > 0L ? seconds + "秒" : "");
|
||||||
} else {
|
} else {
|
||||||
DateTimes = seconds + "秒";
|
DateTimes = seconds + "秒";
|
||||||
}
|
}
|
||||||
|
|
||||||
return DateTimes;
|
return DateTimes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DateFormat getFormat() {
|
public static DateFormat getFormat() {
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,12 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class UUIDUtil {
|
public class UUIDUtil {
|
||||||
|
|
||||||
public static UUID toUUID(String s) {
|
public static UUID toUUID(String s) {
|
||||||
if (s.length() == 36) {
|
if (s.length() == 36) {
|
||||||
return UUID.fromString(s);
|
return UUID.fromString(s);
|
||||||
} else {
|
} else {
|
||||||
return UUID.fromString(s.substring(0, 8) + '-' + s.substring(8, 12) + '-' + s.substring(12, 16) + '-' + s.substring(16, 20) + '-' + s.substring(20));
|
return UUID.fromString(s.substring(0, 8) + '-' + s.substring(8, 12) + '-' + s.substring(12, 16) + '-' + s.substring(16, 20) + '-' + s.substring(20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easysql-parent</artifactId>
|
<artifactId>easysql-parent</artifactId>
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
|
@ -11,36 +11,36 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
public class EasySQL {
|
public class EasySQL {
|
||||||
|
|
||||||
public static SQLManagerImpl createManager(
|
public static SQLManagerImpl createManager(
|
||||||
@NotNull String driver, @NotNull String url,
|
@NotNull String driver, @NotNull String url,
|
||||||
@NotNull String username, @Nullable String password) {
|
@NotNull String username, @Nullable String password) {
|
||||||
return createManager(new BeeDataSourceConfig(driver, url, username, password));
|
return createManager(new BeeDataSourceConfig(driver, url, username, password));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SQLManagerImpl createManager(@NotNull BeeDataSourceConfig config) {
|
public static SQLManagerImpl createManager(@NotNull BeeDataSourceConfig config) {
|
||||||
return new SQLManagerImpl(new BeeDataSource(config));
|
return new SQLManagerImpl(new BeeDataSource(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) {
|
public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) {
|
||||||
if (!manager.getActiveQuery().isEmpty()) {
|
if (!manager.getActiveQuery().isEmpty()) {
|
||||||
manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running");
|
manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running");
|
||||||
for (SQLQuery value : manager.getActiveQuery().values()) {
|
for (SQLQuery value : manager.getActiveQuery().values()) {
|
||||||
if (outputActiveQuery) {
|
if (outputActiveQuery) {
|
||||||
manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent());
|
manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent());
|
||||||
manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime()));
|
manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime()));
|
||||||
}
|
}
|
||||||
if (forceClose) value.close();
|
if (forceClose) value.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (manager.getDataSource() instanceof BeeDataSource) {
|
if (manager.getDataSource() instanceof BeeDataSource) {
|
||||||
//Close bee connection pool
|
//Close bee connection pool
|
||||||
((BeeDataSource) manager.getDataSource()).close();
|
((BeeDataSource) manager.getDataSource()).close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void shutdownManager(SQLManager manager) {
|
public static void shutdownManager(SQLManager manager) {
|
||||||
shutdownManager(manager, true, manager.isDebugMode());
|
shutdownManager(manager, true, manager.isDebugMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easysql-parent</artifactId>
|
<artifactId>easysql-parent</artifactId>
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
|
@ -9,100 +9,100 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class EasySQLDemo {
|
public class EasySQLDemo {
|
||||||
|
|
||||||
public void createTable(SQLManager sqlManager) {
|
public void createTable(SQLManager sqlManager) {
|
||||||
// 同步创建表
|
// 同步创建表
|
||||||
sqlManager.createTable("users")
|
sqlManager.createTable("users")
|
||||||
.addColumn("id", "INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY")
|
.addColumn("id", "INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY")
|
||||||
.addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY")
|
.addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY")
|
||||||
.addColumn("username", "VARCHAR(16) NOT NULL UNIQUE KEY")
|
.addColumn("username", "VARCHAR(16) NOT NULL UNIQUE KEY")
|
||||||
.addColumn("age", "INT(3) NOT NULL DEFAULT 1")
|
.addColumn("age", "INT(3) NOT NULL DEFAULT 1")
|
||||||
.addColumn("email", "VARCHAR(32)")
|
.addColumn("email", "VARCHAR(32)")
|
||||||
.addColumn("phone", "VARCHAR(16)")
|
.addColumn("phone", "VARCHAR(16)")
|
||||||
.addColumn("registerTime", "DATETIME NOT NULL")
|
.addColumn("registerTime", "DATETIME NOT NULL")
|
||||||
.build().execute(null /* 不处理错误 */);
|
.build().execute(null /* 不处理错误 */);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sqlQuery(SQLManager sqlManager) {
|
public void sqlQuery(SQLManager sqlManager) {
|
||||||
// 同步SQL查询
|
// 同步SQL查询
|
||||||
try (SQLQuery query = sqlManager.createQuery()
|
try (SQLQuery query = sqlManager.createQuery()
|
||||||
.inTable("users") // 在users表中查询
|
.inTable("users") // 在users表中查询
|
||||||
.selectColumns("id", "name") // 选中 id 与 name列
|
.selectColumns("id", "name") // 选中 id 与 name列
|
||||||
.addCondition("age", ">", 18) // 限定 age 要大于5
|
.addCondition("age", ">", 18) // 限定 age 要大于5
|
||||||
.addCondition("email", null) // 限定查询 email 字段为空
|
.addCondition("email", null) // 限定查询 email 字段为空
|
||||||
.addNotNullCondition("phone") // 限定 phone 字段不为空
|
.addNotNullCondition("phone") // 限定 phone 字段不为空
|
||||||
.addTimeCondition("registerTime", // 时间字段
|
.addTimeCondition("registerTime", // 时间字段
|
||||||
System.currentTimeMillis() - 100000, //限制开始时间
|
System.currentTimeMillis() - 100000, //限制开始时间
|
||||||
-1//不限制结束时间
|
-1//不限制结束时间
|
||||||
).build().execute()) {
|
).build().execute()) {
|
||||||
ResultSet resultSet = query.getResultSet();
|
ResultSet resultSet = query.getResultSet();
|
||||||
//do something
|
//do something
|
||||||
|
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID userUUID = sqlManager.createQuery()
|
UUID userUUID = sqlManager.createQuery()
|
||||||
.inTable("users") // 在users表中查询
|
.inTable("users") // 在users表中查询
|
||||||
.selectColumns("uuid")
|
.selectColumns("uuid")
|
||||||
.addCondition("id", 5) // 限定 id 为 5
|
.addCondition("id", 5) // 限定 id 为 5
|
||||||
.setLimit(1) // 只取出一个数据
|
.setLimit(1) // 只取出一个数据
|
||||||
.build().execute(query -> {
|
.build().execute(query -> {
|
||||||
//可以直接进行数据处理
|
//可以直接进行数据处理
|
||||||
ResultSet result = query.getResultSet();
|
ResultSet result = query.getResultSet();
|
||||||
return result.next() ? UUIDUtil.toUUID(result.getString("uuid")) : null;
|
return result.next() ? UUIDUtil.toUUID(result.getString("uuid")) : null;
|
||||||
}, (exception, action) -> {
|
}, (exception, action) -> {
|
||||||
// 处理异常,不想处理直接填null
|
// 处理异常,不想处理直接填null
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sqlQueryAsync(SQLManager sqlManager) {
|
public void sqlQueryAsync(SQLManager sqlManager) {
|
||||||
// 异步SQL查询
|
// 异步SQL查询
|
||||||
sqlManager.createQuery()
|
sqlManager.createQuery()
|
||||||
.inTable("users") // 在users表中查询
|
.inTable("users") // 在users表中查询
|
||||||
.addCondition("id", 5) // 限定 id 为 5
|
.addCondition("id", 5) // 限定 id 为 5
|
||||||
.setLimit(1) // 只取出一个数据
|
.setLimit(1) // 只取出一个数据
|
||||||
.build().executeAsync(success -> {
|
.build().executeAsync(success -> {
|
||||||
ResultSet resultSet = success.getResultSet();
|
ResultSet resultSet = success.getResultSet();
|
||||||
try {
|
try {
|
||||||
if (resultSet != null && resultSet.next()) {
|
if (resultSet != null && resultSet.next()) {
|
||||||
String username = resultSet.getString("username");
|
String username = resultSet.getString("username");
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}, (exception, action) -> {
|
}, (exception, action) -> {
|
||||||
//do something
|
//do something
|
||||||
long createTIme = action.getCreateTime();
|
long createTIme = action.getCreateTime();
|
||||||
String shortID = action.getShortID();
|
String shortID = action.getShortID();
|
||||||
String sqlContent = action.getSQLContent();
|
String sqlContent = action.getSQLContent();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sqlInsert(SQLManager sqlManager) {
|
public void sqlInsert(SQLManager sqlManager) {
|
||||||
// 同步SQL插入 (不使用try-catch的情况下,返回的数值可能为空。)
|
// 同步SQL插入 (不使用try-catch的情况下,返回的数值可能为空。)
|
||||||
Integer id = sqlManager.createInsert("users")
|
Integer id = sqlManager.createInsert("users")
|
||||||
.setColumnNames("username", "phone", "email", "registerTime")
|
.setColumnNames("username", "phone", "email", "registerTime")
|
||||||
.setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime())
|
.setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime())
|
||||||
.setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键
|
.setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键
|
||||||
.execute((exception, action) -> {
|
.execute((exception, action) -> {
|
||||||
// 处理异常
|
// 处理异常
|
||||||
System.out.println("#" + action.getShortID() + " -> " + action.getSQLContent());
|
System.out.println("#" + action.getShortID() + " -> " + action.getSQLContent());
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Integer userID = sqlManager.createInsert("users")
|
Integer userID = sqlManager.createInsert("users")
|
||||||
.setColumnNames("username", "phone", "email", "registerTime")
|
.setColumnNames("username", "phone", "email", "registerTime")
|
||||||
.setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime())
|
.setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime())
|
||||||
.setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键
|
.setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
System.out.println("新用户的ID为 " + userID);
|
System.out.println("新用户的ID为 " + userID);
|
||||||
|
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easysql-parent</artifactId>
|
<artifactId>easysql-parent</artifactId>
|
||||||
@ -29,8 +29,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
|
@ -13,44 +13,44 @@ import java.util.Properties;
|
|||||||
|
|
||||||
public class EasySQL {
|
public class EasySQL {
|
||||||
|
|
||||||
public static SQLManagerImpl createManager(
|
public static SQLManagerImpl createManager(
|
||||||
@NotNull String driver, @NotNull String url,
|
@NotNull String driver, @NotNull String url,
|
||||||
@NotNull String username, @Nullable String password) {
|
@NotNull String username, @Nullable String password) {
|
||||||
HikariConfig config = new HikariConfig();
|
HikariConfig config = new HikariConfig();
|
||||||
config.setDriverClassName(driver);
|
config.setDriverClassName(driver);
|
||||||
config.setJdbcUrl(url);
|
config.setJdbcUrl(url);
|
||||||
config.setUsername(username);
|
config.setUsername(username);
|
||||||
config.setPassword(password);
|
config.setPassword(password);
|
||||||
return createManager(config);
|
return createManager(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SQLManagerImpl createManager(@NotNull Properties properties) {
|
public static SQLManagerImpl createManager(@NotNull Properties properties) {
|
||||||
return createManager(new HikariConfig(properties));
|
return createManager(new HikariConfig(properties));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SQLManagerImpl createManager(@NotNull HikariConfig config) {
|
public static SQLManagerImpl createManager(@NotNull HikariConfig config) {
|
||||||
return new SQLManagerImpl(new HikariDataSource(config));
|
return new SQLManagerImpl(new HikariDataSource(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) {
|
public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) {
|
||||||
if (!manager.getActiveQuery().isEmpty()) {
|
if (!manager.getActiveQuery().isEmpty()) {
|
||||||
manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running");
|
manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running");
|
||||||
for (SQLQuery value : manager.getActiveQuery().values()) {
|
for (SQLQuery value : manager.getActiveQuery().values()) {
|
||||||
if (outputActiveQuery) {
|
if (outputActiveQuery) {
|
||||||
manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent());
|
manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent());
|
||||||
manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime()));
|
manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime()));
|
||||||
}
|
}
|
||||||
if (forceClose) value.close();
|
if (forceClose) value.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (manager.getDataSource() instanceof HikariDataSource) {
|
if (manager.getDataSource() instanceof HikariDataSource) {
|
||||||
//Close hikari pool
|
//Close hikari pool
|
||||||
((HikariDataSource) manager.getDataSource()).close();
|
((HikariDataSource) manager.getDataSource()).close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void shutdownManager(SQLManager manager) {
|
public static void shutdownManager(SQLManager manager) {
|
||||||
shutdownManager(manager, true, manager.isDebugMode());
|
shutdownManager(manager, true, manager.isDebugMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easysql-parent</artifactId>
|
<artifactId>easysql-parent</artifactId>
|
||||||
@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
|
@ -12,84 +12,84 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public abstract class AbstractSQLAction<T> implements SQLAction<T> {
|
public abstract class AbstractSQLAction<T> implements SQLAction<T> {
|
||||||
|
|
||||||
private final @NotNull SQLManagerImpl sqlManager;
|
private final @NotNull SQLManagerImpl sqlManager;
|
||||||
|
|
||||||
private final @NotNull UUID uuid;
|
private final @NotNull UUID uuid;
|
||||||
private final long createTime;
|
private final long createTime;
|
||||||
|
|
||||||
protected @NotNull String sqlContent;
|
protected @NotNull String sqlContent;
|
||||||
|
|
||||||
protected @Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler = null;
|
protected @Nullable BiConsumer<SQLException, SQLAction<T>> exceptionHandler = null;
|
||||||
|
|
||||||
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
this(manager, sql, System.currentTimeMillis());
|
this(manager, sql, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, @NotNull UUID uuid) {
|
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, @NotNull UUID uuid) {
|
||||||
this(manager, sql, uuid, System.currentTimeMillis());
|
this(manager, sql, uuid, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, long createTime) {
|
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, long createTime) {
|
||||||
this(manager, sql, UUID.randomUUID(), createTime);
|
this(manager, sql, UUID.randomUUID(), createTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
||||||
@NotNull UUID uuid, long createTime) {
|
@NotNull UUID uuid, long createTime) {
|
||||||
this.sqlManager = manager;
|
this.sqlManager = manager;
|
||||||
this.sqlContent = sql;
|
this.sqlContent = sql;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.createTime = createTime;
|
this.createTime = createTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull UUID getActionUUID() {
|
public @NotNull UUID getActionUUID() {
|
||||||
return this.uuid;
|
return this.uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getShortID() {
|
public @NotNull String getShortID() {
|
||||||
return getActionUUID().toString().substring(0, 8);
|
return getActionUUID().toString().substring(0, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getCreateTime() {
|
public long getCreateTime() {
|
||||||
return this.createTime;
|
return this.createTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getSQLContent() {
|
public @NotNull String getSQLContent() {
|
||||||
return this.sqlContent.trim();
|
return this.sqlContent.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull SQLManagerImpl getManager() {
|
public @NotNull SQLManagerImpl getManager() {
|
||||||
return this.sqlManager;
|
return this.sqlManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void outputDebugMessage() {
|
protected void outputDebugMessage() {
|
||||||
getManager().debug("#" + getShortID() + " ->" + getSQLContent());
|
getManager().debug("#" + getShortID() + " ->" + getSQLContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleException(SQLException exception) {
|
public void handleException(SQLException exception) {
|
||||||
if (this.exceptionHandler == null) {
|
if (this.exceptionHandler == null) {
|
||||||
defaultExceptionHandler().accept(exception, this);
|
defaultExceptionHandler().accept(exception, this);
|
||||||
} else {
|
} else {
|
||||||
this.exceptionHandler.accept(exception, this);
|
this.exceptionHandler.accept(exception, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeAsync(Consumer<T> success, BiConsumer<SQLException, SQLAction<T>> failure) {
|
public void executeAsync(Consumer<T> success, BiConsumer<SQLException, SQLAction<T>> failure) {
|
||||||
getManager().getExecutorPool().submit(() -> {
|
getManager().getExecutorPool().submit(() -> {
|
||||||
try {
|
try {
|
||||||
T returnedValue = execute();
|
T returnedValue = execute();
|
||||||
if (success != null) success.accept(returnedValue);
|
if (success != null) success.accept(returnedValue);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
(failure == null ? defaultExceptionHandler() : failure).accept(e, this);
|
(failure == null ? defaultExceptionHandler() : failure).accept(e, this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,60 +16,60 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class PreparedSQLBatchUpdateActionImpl extends AbstractSQLAction<List<Integer>> implements PreparedSQLUpdateBatchAction {
|
public class PreparedSQLBatchUpdateActionImpl extends AbstractSQLAction<List<Integer>> implements PreparedSQLUpdateBatchAction {
|
||||||
|
|
||||||
int keyIndex = -1;
|
int keyIndex = -1;
|
||||||
List<Object[]> allParams;
|
List<Object[]> allParams;
|
||||||
|
|
||||||
public PreparedSQLBatchUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public PreparedSQLBatchUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
this.allParams = new ArrayList<>();
|
this.allParams = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateBatchAction setAllParams(Iterable<Object[]> allParams) {
|
public PreparedSQLUpdateBatchAction setAllParams(Iterable<Object[]> allParams) {
|
||||||
List<Object[]> paramsList = new ArrayList<>();
|
List<Object[]> paramsList = new ArrayList<>();
|
||||||
allParams.forEach(paramsList::add);
|
allParams.forEach(paramsList::add);
|
||||||
this.allParams = paramsList;
|
this.allParams = paramsList;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateBatchAction addParamsBatch(Object[] params) {
|
public PreparedSQLUpdateBatchAction addParamsBatch(Object[] params) {
|
||||||
this.allParams.add(params);
|
this.allParams.add(params);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex) {
|
public PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex) {
|
||||||
this.keyIndex = keyColumnIndex;
|
this.keyIndex = keyColumnIndex;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<Integer> execute() throws SQLException {
|
public @NotNull List<Integer> execute() throws SQLException {
|
||||||
List<Integer> returnedValues;
|
List<Integer> returnedValues;
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
PreparedStatement statement = StatementUtil.createPrepareStatementBatch(
|
PreparedStatement statement = StatementUtil.createPrepareStatementBatch(
|
||||||
connection, getSQLContent(), allParams, keyIndex > 0
|
connection, getSQLContent(), allParams, keyIndex > 0
|
||||||
);
|
);
|
||||||
outputDebugMessage();
|
outputDebugMessage();
|
||||||
if (keyIndex > 0) {
|
if (keyIndex > 0) {
|
||||||
statement.executeBatch();
|
statement.executeBatch();
|
||||||
List<Integer> generatedKeys = new ArrayList<>();
|
List<Integer> generatedKeys = new ArrayList<>();
|
||||||
ResultSet resultSet = statement.getGeneratedKeys();
|
ResultSet resultSet = statement.getGeneratedKeys();
|
||||||
if (resultSet != null) {
|
if (resultSet != null) {
|
||||||
while (resultSet.next()) generatedKeys.add(resultSet.getInt(keyIndex));
|
while (resultSet.next()) generatedKeys.add(resultSet.getInt(keyIndex));
|
||||||
resultSet.close();
|
resultSet.close();
|
||||||
}
|
}
|
||||||
returnedValues = generatedKeys;
|
returnedValues = generatedKeys;
|
||||||
} else {
|
} else {
|
||||||
int[] executed = statement.executeBatch();
|
int[] executed = statement.executeBatch();
|
||||||
returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList());
|
returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.close();
|
statement.close();
|
||||||
connection.close();
|
connection.close();
|
||||||
|
|
||||||
return returnedValues;
|
return returnedValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,64 +15,64 @@ import java.util.List;
|
|||||||
|
|
||||||
public class PreparedSQLUpdateActionImpl extends SQLUpdateActionImpl implements PreparedSQLUpdateAction {
|
public class PreparedSQLUpdateActionImpl extends SQLUpdateActionImpl implements PreparedSQLUpdateAction {
|
||||||
|
|
||||||
Object[] params;
|
Object[] params;
|
||||||
|
|
||||||
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
this(manager, sql, (Object[]) null);
|
this(manager, sql, (Object[]) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
||||||
@Nullable List<Object> params) {
|
@Nullable List<Object> params) {
|
||||||
this(manager, sql, params == null ? null : params.toArray());
|
this(manager, sql, params == null ? null : params.toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql,
|
||||||
@Nullable Object[] params) {
|
@Nullable Object[] params) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
this.params = params;
|
this.params = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateActionImpl setParams(Object[] params) {
|
public PreparedSQLUpdateActionImpl setParams(Object[] params) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateAction setParams(@Nullable Iterable<Object> params) {
|
public PreparedSQLUpdateAction setParams(@Nullable Iterable<Object> params) {
|
||||||
if (params == null) {
|
if (params == null) {
|
||||||
return setParams((Object[]) null);
|
return setParams((Object[]) null);
|
||||||
} else {
|
} else {
|
||||||
List<Object> paramsList = new ArrayList<>();
|
List<Object> paramsList = new ArrayList<>();
|
||||||
params.forEach(paramsList::add);
|
params.forEach(paramsList::add);
|
||||||
return setParams(paramsList.toArray());
|
return setParams(paramsList.toArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Integer execute() throws SQLException {
|
public @NotNull Integer execute() throws SQLException {
|
||||||
int value = -1;
|
int value = -1;
|
||||||
|
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
PreparedStatement statement = StatementUtil.createPrepareStatement(
|
PreparedStatement statement = StatementUtil.createPrepareStatement(
|
||||||
connection, getSQLContent(), params, keyIndex > 0
|
connection, getSQLContent(), params, keyIndex > 0
|
||||||
);
|
);
|
||||||
outputDebugMessage();
|
outputDebugMessage();
|
||||||
if (keyIndex > 0) {
|
if (keyIndex > 0) {
|
||||||
statement.executeUpdate();
|
statement.executeUpdate();
|
||||||
ResultSet resultSet = statement.getGeneratedKeys();
|
ResultSet resultSet = statement.getGeneratedKeys();
|
||||||
if (resultSet != null) {
|
if (resultSet != null) {
|
||||||
if (resultSet.next()) value = resultSet.getInt(keyIndex);
|
if (resultSet.next()) value = resultSet.getInt(keyIndex);
|
||||||
resultSet.close();
|
resultSet.close();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
value = statement.executeUpdate();
|
value = statement.executeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.close();
|
statement.close();
|
||||||
connection.close();
|
connection.close();
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,42 +11,42 @@ import java.sql.Statement;
|
|||||||
|
|
||||||
public class SQLUpdateActionImpl extends AbstractSQLAction<Integer> implements SQLUpdateAction {
|
public class SQLUpdateActionImpl extends AbstractSQLAction<Integer> implements SQLUpdateAction {
|
||||||
|
|
||||||
int keyIndex = -1;
|
int keyIndex = -1;
|
||||||
|
|
||||||
public SQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public SQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Integer execute() throws SQLException {
|
public @NotNull Integer execute() throws SQLException {
|
||||||
int returnedValue = -1;
|
int returnedValue = -1;
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
Statement statement = connection.createStatement();
|
Statement statement = connection.createStatement();
|
||||||
outputDebugMessage();
|
outputDebugMessage();
|
||||||
if (keyIndex > 0) {
|
if (keyIndex > 0) {
|
||||||
statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS);
|
statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS);
|
||||||
ResultSet resultSet = statement.getGeneratedKeys();
|
ResultSet resultSet = statement.getGeneratedKeys();
|
||||||
if (resultSet != null) {
|
if (resultSet != null) {
|
||||||
if (resultSet.next()) {
|
if (resultSet.next()) {
|
||||||
returnedValue = resultSet.getInt(keyIndex);
|
returnedValue = resultSet.getInt(keyIndex);
|
||||||
}
|
}
|
||||||
resultSet.close();
|
resultSet.close();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
returnedValue = statement.executeUpdate(getSQLContent());
|
returnedValue = statement.executeUpdate(getSQLContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
statement.close();
|
statement.close();
|
||||||
connection.close();
|
connection.close();
|
||||||
|
|
||||||
return returnedValue;
|
return returnedValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SQLUpdateActionImpl setKeyIndex(int keyIndex) {
|
public SQLUpdateActionImpl setKeyIndex(int keyIndex) {
|
||||||
this.keyIndex = keyIndex;
|
this.keyIndex = keyIndex;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,43 +14,43 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class SQLUpdateBatchActionImpl extends AbstractSQLAction<List<Integer>> implements SQLUpdateBatchAction {
|
public class SQLUpdateBatchActionImpl extends AbstractSQLAction<List<Integer>> implements SQLUpdateBatchAction {
|
||||||
|
|
||||||
List<String> sqlContents = new ArrayList<>();
|
List<String> sqlContents = new ArrayList<>();
|
||||||
|
|
||||||
public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
this.sqlContents.add(sql);
|
this.sqlContents.add(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getSQLContent() {
|
public @NotNull String getSQLContent() {
|
||||||
return this.sqlContents.get(0);
|
return this.sqlContents.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<String> getSQLContents() {
|
public @NotNull List<String> getSQLContents() {
|
||||||
return this.sqlContents;
|
return this.sqlContents;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SQLUpdateBatchAction addBatch(@NotNull String sql) {
|
public SQLUpdateBatchAction addBatch(@NotNull String sql) {
|
||||||
this.sqlContents.add(sql);
|
this.sqlContents.add(sql);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull List<Integer> execute() throws SQLException {
|
public @NotNull List<Integer> execute() throws SQLException {
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
Statement statement = connection.createStatement();
|
Statement statement = connection.createStatement();
|
||||||
outputDebugMessage();
|
outputDebugMessage();
|
||||||
for (String content : this.sqlContents) {
|
for (String content : this.sqlContents) {
|
||||||
statement.addBatch(content);
|
statement.addBatch(content);
|
||||||
}
|
}
|
||||||
int[] executed = statement.executeBatch();
|
int[] executed = statement.executeBatch();
|
||||||
List<Integer> returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList());
|
List<Integer> returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList());
|
||||||
|
|
||||||
statement.close();
|
statement.close();
|
||||||
connection.close();
|
connection.close();
|
||||||
|
|
||||||
return returnedValues;
|
return returnedValues;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,51 +17,51 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public class PreparedQueryActionImpl extends QueryActionImpl implements PreparedQueryAction {
|
public class PreparedQueryActionImpl extends QueryActionImpl implements PreparedQueryAction {
|
||||||
|
|
||||||
Consumer<PreparedStatement> handler;
|
Consumer<PreparedStatement> handler;
|
||||||
Object[] params;
|
Object[] params;
|
||||||
|
|
||||||
public PreparedQueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public PreparedQueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedQueryActionImpl setParams(@Nullable Object[] params) {
|
public PreparedQueryActionImpl setParams(@Nullable Object[] params) {
|
||||||
this.params = params;
|
this.params = params;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedQueryActionImpl setParams(@Nullable Iterable<Object> params) {
|
public PreparedQueryActionImpl setParams(@Nullable Iterable<Object> params) {
|
||||||
if (params == null) {
|
if (params == null) {
|
||||||
return setParams((Object[]) null);
|
return setParams((Object[]) null);
|
||||||
} else {
|
} else {
|
||||||
List<Object> paramsList = new ArrayList<>();
|
List<Object> paramsList = new ArrayList<>();
|
||||||
params.forEach(paramsList::add);
|
params.forEach(paramsList::add);
|
||||||
return setParams(paramsList.toArray());
|
return setParams(paramsList.toArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedQueryActionImpl handleStatement(@Nullable Consumer<PreparedStatement> statement) {
|
public PreparedQueryActionImpl handleStatement(@Nullable Consumer<PreparedStatement> statement) {
|
||||||
this.handler = statement;
|
this.handler = statement;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull SQLQueryImpl execute() throws SQLException {
|
public @NotNull SQLQueryImpl execute() throws SQLException {
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
getManager().debug("#" + getShortID() + " ->" + getSQLContent());
|
getManager().debug("#" + getShortID() + " ->" + getSQLContent());
|
||||||
PreparedStatement preparedStatement;
|
PreparedStatement preparedStatement;
|
||||||
if (handler == null) {
|
if (handler == null) {
|
||||||
preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params);
|
preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params);
|
||||||
} else {
|
} else {
|
||||||
preparedStatement = connection.prepareStatement(getSQLContent());
|
preparedStatement = connection.prepareStatement(getSQLContent());
|
||||||
handler.accept(preparedStatement);
|
handler.accept(preparedStatement);
|
||||||
}
|
}
|
||||||
|
|
||||||
ResultSet resultSet = preparedStatement.executeQuery();
|
ResultSet resultSet = preparedStatement.executeQuery();
|
||||||
|
|
||||||
return new SQLQueryImpl(getManager(), this, connection, preparedStatement, resultSet);
|
return new SQLQueryImpl(getManager(), this, connection, preparedStatement, resultSet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,8 @@ package cc.carm.lib.easysql.action.query;
|
|||||||
|
|
||||||
import cc.carm.lib.easysql.action.AbstractSQLAction;
|
import cc.carm.lib.easysql.action.AbstractSQLAction;
|
||||||
import cc.carm.lib.easysql.api.SQLAction;
|
import cc.carm.lib.easysql.api.SQLAction;
|
||||||
import cc.carm.lib.easysql.api.action.query.SQLQuery;
|
|
||||||
import cc.carm.lib.easysql.api.action.query.QueryAction;
|
import cc.carm.lib.easysql.api.action.query.QueryAction;
|
||||||
|
import cc.carm.lib.easysql.api.action.query.SQLQuery;
|
||||||
import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
||||||
import cc.carm.lib.easysql.query.SQLQueryImpl;
|
import cc.carm.lib.easysql.query.SQLQueryImpl;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -17,31 +17,31 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public class QueryActionImpl extends AbstractSQLAction<SQLQuery> implements QueryAction {
|
public class QueryActionImpl extends AbstractSQLAction<SQLQuery> implements QueryAction {
|
||||||
|
|
||||||
public QueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
public QueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) {
|
||||||
super(manager, sql);
|
super(manager, sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull SQLQueryImpl execute() throws SQLException {
|
public @NotNull SQLQueryImpl execute() throws SQLException {
|
||||||
Connection connection = getManager().getConnection();
|
Connection connection = getManager().getConnection();
|
||||||
Statement statement = connection.createStatement();
|
Statement statement = connection.createStatement();
|
||||||
|
|
||||||
outputDebugMessage();
|
outputDebugMessage();
|
||||||
|
|
||||||
ResultSet resultSet = statement.executeQuery(getSQLContent());
|
ResultSet resultSet = statement.executeQuery(getSQLContent());
|
||||||
SQLQueryImpl query = new SQLQueryImpl(getManager(), this, connection, statement, resultSet);
|
SQLQueryImpl query = new SQLQueryImpl(getManager(), this, connection, statement, resultSet);
|
||||||
getManager().getActiveQuery().put(getActionUUID(), query);
|
getManager().getActiveQuery().put(getActionUUID(), query);
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeAsync(Consumer<SQLQuery> success, BiConsumer<SQLException, SQLAction<SQLQuery>> failure) {
|
public void executeAsync(Consumer<SQLQuery> success, BiConsumer<SQLException, SQLAction<SQLQuery>> failure) {
|
||||||
try (SQLQueryImpl query = execute()) {
|
try (SQLQueryImpl query = execute()) {
|
||||||
if (success != null) success.accept(query);
|
if (success != null) success.accept(query);
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
(exceptionHandler == null ? defaultExceptionHandler() : exceptionHandler).accept(exception, this);
|
(exceptionHandler == null ? defaultExceptionHandler() : exceptionHandler).accept(exception, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,14 +6,14 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
|
|
||||||
public abstract class AbstractSQLBuilder implements SQLBuilder {
|
public abstract class AbstractSQLBuilder implements SQLBuilder {
|
||||||
|
|
||||||
@NotNull SQLManagerImpl sqlManager;
|
@NotNull SQLManagerImpl sqlManager;
|
||||||
|
|
||||||
public AbstractSQLBuilder(@NotNull SQLManagerImpl manager) {
|
public AbstractSQLBuilder(@NotNull SQLManagerImpl manager) {
|
||||||
this.sqlManager = manager;
|
this.sqlManager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull SQLManagerImpl getManager() {
|
public @NotNull SQLManagerImpl getManager() {
|
||||||
return this.sqlManager;
|
return this.sqlManager;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,131 +14,131 @@ import java.util.Iterator;
|
|||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
public abstract class AbstractConditionalBuilder<B extends ConditionalBuilder<B, T>, T>
|
public abstract class AbstractConditionalBuilder<B extends ConditionalBuilder<B, T>, T>
|
||||||
extends AbstractSQLBuilder implements ConditionalBuilder<B, T> {
|
extends AbstractSQLBuilder implements ConditionalBuilder<B, T> {
|
||||||
|
|
||||||
ArrayList<String> conditionSQLs = new ArrayList<>();
|
ArrayList<String> conditionSQLs = new ArrayList<>();
|
||||||
ArrayList<Object> conditionParams = new ArrayList<>();
|
ArrayList<Object> conditionParams = new ArrayList<>();
|
||||||
int limit = -1;
|
int limit = -1;
|
||||||
|
|
||||||
public AbstractConditionalBuilder(@NotNull SQLManagerImpl manager) {
|
public AbstractConditionalBuilder(@NotNull SQLManagerImpl manager) {
|
||||||
super(manager);
|
super(manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract B getThis();
|
protected abstract B getThis();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B setConditions(@Nullable String condition) {
|
public B setConditions(@Nullable String condition) {
|
||||||
this.conditionSQLs = new ArrayList<>();
|
this.conditionSQLs = new ArrayList<>();
|
||||||
this.conditionParams = new ArrayList<>();
|
this.conditionParams = new ArrayList<>();
|
||||||
if (condition != null) this.conditionSQLs.add(condition);
|
if (condition != null) this.conditionSQLs.add(condition);
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B setConditions(
|
public B setConditions(
|
||||||
LinkedHashMap<@NotNull String, @Nullable Object> conditions
|
LinkedHashMap<@NotNull String, @Nullable Object> conditions
|
||||||
) {
|
) {
|
||||||
conditions.forEach(this::addCondition);
|
conditions.forEach(this::addCondition);
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B addCondition(@Nullable String condition) {
|
public B addCondition(@Nullable String condition) {
|
||||||
this.conditionSQLs.add(condition);
|
this.conditionSQLs.add(condition);
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B addCondition(
|
public B addCondition(
|
||||||
@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue
|
@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue
|
||||||
) {
|
) {
|
||||||
addCondition("`" + queryName + "` " + operator + " ?");
|
addCondition("`" + queryName + "` " + operator + " ?");
|
||||||
this.conditionParams.add(queryValue);
|
this.conditionParams.add(queryValue);
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B addCondition(
|
public B addCondition(
|
||||||
@NotNull String[] queryNames, @Nullable Object[] queryValues
|
@NotNull String[] queryNames, @Nullable Object[] queryValues
|
||||||
) {
|
) {
|
||||||
if (queryNames.length != queryValues.length) {
|
if (queryNames.length != queryValues.length) {
|
||||||
throw new RuntimeException("queryNames are not match with queryValues");
|
throw new RuntimeException("queryNames are not match with queryValues");
|
||||||
}
|
}
|
||||||
for (int i = 0; i < queryNames.length; i++) {
|
for (int i = 0; i < queryNames.length; i++) {
|
||||||
addCondition(queryNames[i], queryValues[i]);
|
addCondition(queryNames[i], queryValues[i]);
|
||||||
}
|
}
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B addNotNullCondition(@NotNull String queryName) {
|
public B addNotNullCondition(@NotNull String queryName) {
|
||||||
return addCondition("`" + queryName + "` IS NOT NULL");
|
return addCondition("`" + queryName + "` IS NOT NULL");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B addTimeCondition(
|
public B addTimeCondition(
|
||||||
@NotNull String queryName, @Nullable Date startDate, @Nullable Date endDate
|
@NotNull String queryName, @Nullable Date startDate, @Nullable Date endDate
|
||||||
) {
|
) {
|
||||||
if (startDate == null && endDate == null) return getThis(); // 都不限定时间,不用判断了
|
if (startDate == null && endDate == null) return getThis(); // 都不限定时间,不用判断了
|
||||||
if (startDate != null) {
|
if (startDate != null) {
|
||||||
addCondition("`" + queryName + "` BETWEEN ? AND ?");
|
addCondition("`" + queryName + "` BETWEEN ? AND ?");
|
||||||
this.conditionParams.add(startDate);
|
this.conditionParams.add(startDate);
|
||||||
if (endDate != null) {
|
if (endDate != null) {
|
||||||
this.conditionParams.add(endDate);
|
this.conditionParams.add(endDate);
|
||||||
} else {
|
} else {
|
||||||
if (startDate instanceof java.sql.Date) {
|
if (startDate instanceof java.sql.Date) {
|
||||||
this.conditionParams.add(new java.sql.Date(System.currentTimeMillis()));
|
this.conditionParams.add(new java.sql.Date(System.currentTimeMillis()));
|
||||||
} else if (startDate instanceof Time) {
|
} else if (startDate instanceof Time) {
|
||||||
this.conditionParams.add(new Time(System.currentTimeMillis()));
|
this.conditionParams.add(new Time(System.currentTimeMillis()));
|
||||||
} else {
|
} else {
|
||||||
this.conditionParams.add(new Timestamp(System.currentTimeMillis()));
|
this.conditionParams.add(new Timestamp(System.currentTimeMillis()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
addCondition(queryName, "<=", endDate);
|
addCondition(queryName, "<=", endDate);
|
||||||
}
|
}
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public B setLimit(int limit) {
|
public B setLimit(int limit) {
|
||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
return getThis();
|
return getThis();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String buildConditionSQL() {
|
protected String buildConditionSQL() {
|
||||||
|
|
||||||
if (!conditionSQLs.isEmpty()) {
|
if (!conditionSQLs.isEmpty()) {
|
||||||
StringBuilder conditionBuilder = new StringBuilder();
|
StringBuilder conditionBuilder = new StringBuilder();
|
||||||
conditionBuilder.append("WHERE").append(" ");
|
conditionBuilder.append("WHERE").append(" ");
|
||||||
Iterator<String> iterator = conditionSQLs.iterator();
|
Iterator<String> iterator = conditionSQLs.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
conditionBuilder.append(iterator.next());
|
conditionBuilder.append(iterator.next());
|
||||||
if (iterator.hasNext()) conditionBuilder.append(" ");
|
if (iterator.hasNext()) conditionBuilder.append(" ");
|
||||||
}
|
}
|
||||||
return conditionBuilder.toString();
|
return conditionBuilder.toString();
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String buildLimitSQL() {
|
protected String buildLimitSQL() {
|
||||||
return limit > 0 ? "LIMIT " + limit : "";
|
return limit > 0 ? "LIMIT " + limit : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ArrayList<Object> getConditionParams() {
|
protected ArrayList<Object> getConditionParams() {
|
||||||
return conditionParams;
|
return conditionParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hasConditions() {
|
protected boolean hasConditions() {
|
||||||
return this.conditionSQLs != null && !this.conditionSQLs.isEmpty();
|
return this.conditionSQLs != null && !this.conditionSQLs.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hasConditionParams() {
|
protected boolean hasConditionParams() {
|
||||||
return hasConditions() && getConditionParams() != null && !getConditionParams().isEmpty();
|
return hasConditions() && getConditionParams() != null && !getConditionParams().isEmpty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,41 +7,41 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class DeleteBuilderImpl
|
public class DeleteBuilderImpl
|
||||||
extends AbstractConditionalBuilder<DeleteBuilder, PreparedSQLUpdateAction>
|
extends AbstractConditionalBuilder<DeleteBuilder, PreparedSQLUpdateAction>
|
||||||
implements DeleteBuilder {
|
implements DeleteBuilder {
|
||||||
|
|
||||||
String tableName;
|
String tableName;
|
||||||
|
|
||||||
public DeleteBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
public DeleteBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateAction build() {
|
public PreparedSQLUpdateAction build() {
|
||||||
|
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
||||||
sqlBuilder.append("DELETE FROM `").append(getTableName()).append("`");
|
sqlBuilder.append("DELETE FROM `").append(getTableName()).append("`");
|
||||||
|
|
||||||
if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL());
|
if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL());
|
||||||
if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL());
|
if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL());
|
||||||
|
|
||||||
return new PreparedSQLUpdateActionImpl(
|
return new PreparedSQLUpdateActionImpl(
|
||||||
getManager(), sqlBuilder.toString(),
|
getManager(), sqlBuilder.toString(),
|
||||||
hasConditionParams() ? getConditionParams() : null
|
hasConditionParams() ? getConditionParams() : null
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected DeleteBuilderImpl getThis() {
|
protected DeleteBuilderImpl getThis() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,37 +10,37 @@ import java.util.List;
|
|||||||
|
|
||||||
public abstract class InsertBuilderImpl<T> extends AbstractSQLBuilder implements InsertBuilder<T> {
|
public abstract class InsertBuilderImpl<T> extends AbstractSQLBuilder implements InsertBuilder<T> {
|
||||||
|
|
||||||
String tableName;
|
String tableName;
|
||||||
|
|
||||||
public InsertBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) {
|
public InsertBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static String buildSQL(String tableName, List<String> columnNames) {
|
protected static String buildSQL(String tableName, List<String> columnNames) {
|
||||||
int valueLength = columnNames.size();
|
int valueLength = columnNames.size();
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
||||||
sqlBuilder.append("INSERT IGNORE INTO `").append(tableName).append("`(");
|
sqlBuilder.append("INSERT IGNORE INTO `").append(tableName).append("`(");
|
||||||
Iterator<String> iterator = columnNames.iterator();
|
Iterator<String> iterator = columnNames.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
sqlBuilder.append("`").append(iterator.next()).append("`");
|
sqlBuilder.append("`").append(iterator.next()).append("`");
|
||||||
if (iterator.hasNext()) sqlBuilder.append(", ");
|
if (iterator.hasNext()) sqlBuilder.append(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlBuilder.append(") VALUES (");
|
sqlBuilder.append(") VALUES (");
|
||||||
|
|
||||||
for (int i = 0; i < valueLength; i++) {
|
for (int i = 0; i < valueLength; i++) {
|
||||||
sqlBuilder.append("?");
|
sqlBuilder.append("?");
|
||||||
if (i != valueLength - 1) {
|
if (i != valueLength - 1) {
|
||||||
sqlBuilder.append(", ");
|
sqlBuilder.append(", ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlBuilder.append(")");
|
sqlBuilder.append(")");
|
||||||
return sqlBuilder.toString();
|
return sqlBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,24 +11,24 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class QueryBuilderImpl extends AbstractSQLBuilder implements QueryBuilder {
|
public class QueryBuilderImpl extends AbstractSQLBuilder implements QueryBuilder {
|
||||||
public QueryBuilderImpl(@NotNull SQLManagerImpl manager) {
|
public QueryBuilderImpl(@NotNull SQLManagerImpl manager) {
|
||||||
super(manager);
|
super(manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public QueryAction withSQL(@NotNull String sql) {
|
public QueryAction withSQL(@NotNull String sql) {
|
||||||
return new QueryActionImpl(getManager(), sql);
|
return new QueryActionImpl(getManager(), sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedQueryAction withPreparedSQL(@NotNull String sql) {
|
public PreparedQueryAction withPreparedSQL(@NotNull String sql) {
|
||||||
return new PreparedQueryActionImpl(getManager(), sql);
|
return new PreparedQueryActionImpl(getManager(), sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableQueryBuilder inTable(@NotNull String tableName) {
|
public TableQueryBuilder inTable(@NotNull String tableName) {
|
||||||
return new TableQueryBuilderImpl(getManager(), tableName);
|
return new TableQueryBuilderImpl(getManager(), tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -10,37 +10,37 @@ import java.util.List;
|
|||||||
|
|
||||||
public abstract class ReplaceBuilderImpl<T> extends AbstractSQLBuilder implements ReplaceBuilder<T> {
|
public abstract class ReplaceBuilderImpl<T> extends AbstractSQLBuilder implements ReplaceBuilder<T> {
|
||||||
|
|
||||||
String tableName;
|
String tableName;
|
||||||
|
|
||||||
public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) {
|
public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static String buildSQL(String tableName, List<String> columnNames) {
|
protected static String buildSQL(String tableName, List<String> columnNames) {
|
||||||
int valueLength = columnNames.size();
|
int valueLength = columnNames.size();
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
||||||
sqlBuilder.append("REPLACE INTO `").append(tableName).append("`(");
|
sqlBuilder.append("REPLACE INTO `").append(tableName).append("`(");
|
||||||
Iterator<String> iterator = columnNames.iterator();
|
Iterator<String> iterator = columnNames.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
sqlBuilder.append("`").append(iterator.next()).append("`");
|
sqlBuilder.append("`").append(iterator.next()).append("`");
|
||||||
if (iterator.hasNext()) sqlBuilder.append(", ");
|
if (iterator.hasNext()) sqlBuilder.append(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlBuilder.append(") VALUES (");
|
sqlBuilder.append(") VALUES (");
|
||||||
|
|
||||||
for (int i = 0; i < valueLength; i++) {
|
for (int i = 0; i < valueLength; i++) {
|
||||||
sqlBuilder.append("?");
|
sqlBuilder.append("?");
|
||||||
if (i != valueLength - 1) {
|
if (i != valueLength - 1) {
|
||||||
sqlBuilder.append(", ");
|
sqlBuilder.append(", ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlBuilder.append(")");
|
sqlBuilder.append(")");
|
||||||
return sqlBuilder.toString();
|
return sqlBuilder.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,59 +13,59 @@ import java.util.List;
|
|||||||
|
|
||||||
public class TableCreateBuilderImpl extends AbstractSQLBuilder implements TableCreateBuilder {
|
public class TableCreateBuilderImpl extends AbstractSQLBuilder implements TableCreateBuilder {
|
||||||
|
|
||||||
String tableName;
|
String tableName;
|
||||||
|
|
||||||
List<String> columns;
|
List<String> columns;
|
||||||
|
|
||||||
String tableSettings;
|
String tableSettings;
|
||||||
|
|
||||||
public TableCreateBuilderImpl(SQLManagerImpl manager, String tableName) {
|
public TableCreateBuilderImpl(SQLManagerImpl manager, String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
this.columns = new ArrayList<>();
|
this.columns = new ArrayList<>();
|
||||||
defaultTablesSettings();
|
defaultTablesSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getTableName() {
|
public @NotNull String getTableName() {
|
||||||
return this.tableName;
|
return this.tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getTableSettings() {
|
public @NotNull String getTableSettings() {
|
||||||
return this.tableSettings;
|
return this.tableSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SQLUpdateAction build() {
|
public SQLUpdateAction build() {
|
||||||
StringBuilder createSQL = new StringBuilder();
|
StringBuilder createSQL = new StringBuilder();
|
||||||
createSQL.append("CREATE TABLE IF NOT EXISTS `").append(tableName).append("`");
|
createSQL.append("CREATE TABLE IF NOT EXISTS `").append(tableName).append("`");
|
||||||
createSQL.append("(");
|
createSQL.append("(");
|
||||||
for (int i = 0; i < columns.size(); i++) {
|
for (int i = 0; i < columns.size(); i++) {
|
||||||
createSQL.append(columns.get(i));
|
createSQL.append(columns.get(i));
|
||||||
if (i != columns.size() - 1) createSQL.append(", ");
|
if (i != columns.size() - 1) createSQL.append(", ");
|
||||||
}
|
}
|
||||||
createSQL.append(") ").append(tableSettings);
|
createSQL.append(") ").append(tableSettings);
|
||||||
|
|
||||||
return new SQLUpdateActionImpl(getManager(), createSQL.toString());
|
return new SQLUpdateActionImpl(getManager(), createSQL.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCreateBuilder addColumn(@NotNull String column) {
|
public TableCreateBuilder addColumn(@NotNull String column) {
|
||||||
this.columns.add(column);
|
this.columns.add(column);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCreateBuilder setColumns(@NotNull String[] columns) {
|
public TableCreateBuilder setColumns(@NotNull String[] columns) {
|
||||||
this.columns = Arrays.asList(columns);
|
this.columns = Arrays.asList(columns);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCreateBuilder setTableSettings(@NotNull String settings) {
|
public TableCreateBuilder setTableSettings(@NotNull String settings) {
|
||||||
this.tableSettings = settings;
|
this.tableSettings = settings;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,80 +8,80 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class TableQueryBuilderImpl
|
public class TableQueryBuilderImpl
|
||||||
extends AbstractConditionalBuilder<TableQueryBuilder, PreparedQueryAction>
|
extends AbstractConditionalBuilder<TableQueryBuilder, PreparedQueryAction>
|
||||||
implements TableQueryBuilder {
|
implements TableQueryBuilder {
|
||||||
|
|
||||||
@NotNull String tableName;
|
@NotNull String tableName;
|
||||||
|
|
||||||
String[] columns;
|
String[] columns;
|
||||||
|
|
||||||
@Nullable String orderBy;
|
@Nullable String orderBy;
|
||||||
|
|
||||||
int[] pageLimit;
|
int[] pageLimit;
|
||||||
|
|
||||||
public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedQueryActionImpl build() {
|
public PreparedQueryActionImpl build() {
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
sqlBuilder.append("SELECT").append(" ");
|
sqlBuilder.append("SELECT").append(" ");
|
||||||
if (columns == null || columns.length < 1) {
|
if (columns == null || columns.length < 1) {
|
||||||
sqlBuilder.append("*");
|
sqlBuilder.append("*");
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < columns.length; i++) {
|
for (int i = 0; i < columns.length; i++) {
|
||||||
String name = columns[i];
|
String name = columns[i];
|
||||||
sqlBuilder.append("`").append(name).append("`");
|
sqlBuilder.append("`").append(name).append("`");
|
||||||
if (i != columns.length - 1) {
|
if (i != columns.length - 1) {
|
||||||
sqlBuilder.append(",");
|
sqlBuilder.append(",");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlBuilder.append(" ").append("FROM").append(" ");
|
sqlBuilder.append(" ").append("FROM").append(" ");
|
||||||
sqlBuilder.append("`").append(tableName).append("`");
|
sqlBuilder.append("`").append(tableName).append("`");
|
||||||
|
|
||||||
if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL());
|
if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL());
|
||||||
|
|
||||||
if (pageLimit != null && pageLimit.length == 2) {
|
if (pageLimit != null && pageLimit.length == 2) {
|
||||||
sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]);
|
sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]);
|
||||||
} else if (limit > 0) {
|
} else if (limit > 0) {
|
||||||
sqlBuilder.append(" ").append(buildLimitSQL());
|
sqlBuilder.append(" ").append(buildLimitSQL());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (orderBy != null) sqlBuilder.append(orderBy);
|
if (orderBy != null) sqlBuilder.append(orderBy);
|
||||||
|
|
||||||
return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString())
|
return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString())
|
||||||
.setParams(hasConditionParams() ? getConditionParams() : null);
|
.setParams(hasConditionParams() ? getConditionParams() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getTableName() {
|
public @NotNull String getTableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableQueryBuilderImpl selectColumns(@NotNull String[] columnNames) {
|
public TableQueryBuilderImpl selectColumns(@NotNull String[] columnNames) {
|
||||||
this.columns = columnNames;
|
this.columns = columnNames;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) {
|
public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) {
|
||||||
this.orderBy = "ORDER BY `" + columnName + "` " + (asc ? "ASC" : "DESC");
|
this.orderBy = "ORDER BY `" + columnName + "` " + (asc ? "ASC" : "DESC");
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableQueryBuilder setPageLimit(int start, int end) {
|
public TableQueryBuilder setPageLimit(int start, int end) {
|
||||||
this.pageLimit = new int[]{start, end};
|
this.pageLimit = new int[]{start, end};
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TableQueryBuilderImpl getThis() {
|
protected TableQueryBuilderImpl getThis() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,72 +9,72 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class UpdateBuilderImpl
|
public class UpdateBuilderImpl
|
||||||
extends AbstractConditionalBuilder<UpdateBuilder, PreparedSQLUpdateAction>
|
extends AbstractConditionalBuilder<UpdateBuilder, PreparedSQLUpdateAction>
|
||||||
implements UpdateBuilder {
|
implements UpdateBuilder {
|
||||||
|
|
||||||
String tableName;
|
String tableName;
|
||||||
|
|
||||||
List<String> columnNames;
|
List<String> columnNames;
|
||||||
List<Object> columnValues;
|
List<Object> columnValues;
|
||||||
|
|
||||||
public UpdateBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
public UpdateBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
|
||||||
super(manager);
|
super(manager);
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateAction build() {
|
public PreparedSQLUpdateAction build() {
|
||||||
|
|
||||||
StringBuilder sqlBuilder = new StringBuilder();
|
StringBuilder sqlBuilder = new StringBuilder();
|
||||||
|
|
||||||
sqlBuilder.append("UPDATE `").append(getTableName()).append("` SET ");
|
sqlBuilder.append("UPDATE `").append(getTableName()).append("` SET ");
|
||||||
|
|
||||||
Iterator<String> iterator = this.columnNames.iterator();
|
Iterator<String> iterator = this.columnNames.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
sqlBuilder.append("`").append(iterator.next()).append("` = ?");
|
sqlBuilder.append("`").append(iterator.next()).append("` = ?");
|
||||||
if (iterator.hasNext()) sqlBuilder.append(" , ");
|
if (iterator.hasNext()) sqlBuilder.append(" , ");
|
||||||
}
|
}
|
||||||
List<Object> allParams = new ArrayList<>(this.columnValues);
|
List<Object> allParams = new ArrayList<>(this.columnValues);
|
||||||
|
|
||||||
if (hasConditions()) {
|
if (hasConditions()) {
|
||||||
sqlBuilder.append(" ").append(buildConditionSQL());
|
sqlBuilder.append(" ").append(buildConditionSQL());
|
||||||
allParams.addAll(getConditionParams());
|
allParams.addAll(getConditionParams());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL());
|
if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL());
|
||||||
|
|
||||||
return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams);
|
return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateBuilder setColumnValues(LinkedHashMap<String, Object> columnData) {
|
public UpdateBuilder setColumnValues(LinkedHashMap<String, Object> columnData) {
|
||||||
this.columnNames = new ArrayList<>();
|
this.columnNames = new ArrayList<>();
|
||||||
this.columnValues = new ArrayList<>();
|
this.columnValues = new ArrayList<>();
|
||||||
columnData.forEach((name, value) -> {
|
columnData.forEach((name, value) -> {
|
||||||
this.columnNames.add(name);
|
this.columnNames.add(name);
|
||||||
this.columnValues.add(value);
|
this.columnValues.add(value);
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues) {
|
public UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues) {
|
||||||
if (columnNames.length != columnValues.length) {
|
if (columnNames.length != columnValues.length) {
|
||||||
throw new RuntimeException("columnNames are not match with columnValues");
|
throw new RuntimeException("columnNames are not match with columnValues");
|
||||||
}
|
}
|
||||||
this.columnNames = Arrays.asList(columnNames);
|
this.columnNames = Arrays.asList(columnNames);
|
||||||
this.columnValues = Arrays.asList(columnValues);
|
this.columnValues = Arrays.asList(columnValues);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected UpdateBuilder getThis() {
|
protected UpdateBuilder getThis() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,164 +25,162 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public class SQLManagerImpl implements SQLManager {
|
public class SQLManagerImpl implements SQLManager {
|
||||||
|
|
||||||
private final Logger LOGGER;
|
private final Logger LOGGER;
|
||||||
private final DataSource dataSource;
|
private final DataSource dataSource;
|
||||||
ConcurrentHashMap<UUID, SQLQuery> activeQuery = new ConcurrentHashMap<>();
|
protected ExecutorService executorPool;
|
||||||
|
ConcurrentHashMap<UUID, SQLQuery> activeQuery = new ConcurrentHashMap<>();
|
||||||
|
boolean debug = false;
|
||||||
|
|
||||||
boolean debug = false;
|
public SQLManagerImpl(@NotNull DataSource dataSource) {
|
||||||
|
this(dataSource, null);
|
||||||
|
}
|
||||||
|
|
||||||
protected ExecutorService executorPool;
|
public SQLManagerImpl(@NotNull DataSource dataSource, @Nullable String name) {
|
||||||
|
String managerName = "SQLManager" + (name != null ? "#" + name : "");
|
||||||
|
this.LOGGER = Logger.getLogger(managerName);
|
||||||
|
this.dataSource = dataSource;
|
||||||
|
this.executorPool = Executors.newFixedThreadPool(3, r -> {
|
||||||
|
Thread thread = new Thread(r, managerName);
|
||||||
|
thread.setDaemon(true);
|
||||||
|
return thread;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public SQLManagerImpl(@NotNull DataSource dataSource) {
|
@Override
|
||||||
this(dataSource, null);
|
public boolean isDebugMode() {
|
||||||
}
|
return this.debug;
|
||||||
|
}
|
||||||
|
|
||||||
public SQLManagerImpl(@NotNull DataSource dataSource, @Nullable String name) {
|
@Override
|
||||||
String managerName = "SQLManager" + (name != null ? "#" + name : "");
|
public void setDebugMode(boolean enable) {
|
||||||
this.LOGGER = Logger.getLogger(managerName);
|
this.debug = enable;
|
||||||
this.dataSource = dataSource;
|
}
|
||||||
this.executorPool = Executors.newFixedThreadPool(3, r -> {
|
|
||||||
Thread thread = new Thread(r, managerName);
|
|
||||||
thread.setDaemon(true);
|
|
||||||
return thread;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public void debug(String msg) {
|
||||||
public boolean isDebugMode() {
|
if (isDebugMode()) getLogger().info("[DEBUG] " + msg);
|
||||||
return this.debug;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public Logger getLogger() {
|
||||||
public void setDebugMode(boolean enable) {
|
return LOGGER;
|
||||||
this.debug = enable;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void debug(String msg) {
|
public ExecutorService getExecutorPool() {
|
||||||
if (isDebugMode()) getLogger().info("[DEBUG] " + msg);
|
return executorPool;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Logger getLogger() {
|
@Override
|
||||||
return LOGGER;
|
public @NotNull DataSource getDataSource() {
|
||||||
}
|
return this.dataSource;
|
||||||
|
}
|
||||||
|
|
||||||
public ExecutorService getExecutorPool() {
|
@Override
|
||||||
return executorPool;
|
public @NotNull Connection getConnection() throws SQLException {
|
||||||
}
|
return getDataSource().getConnection();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull DataSource getDataSource() {
|
public @NotNull Map<UUID, SQLQuery> getActiveQuery() {
|
||||||
return this.dataSource;
|
return this.activeQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Connection getConnection() throws SQLException {
|
public Integer executeSQL(String sql) {
|
||||||
return getDataSource().getConnection();
|
return new SQLUpdateActionImpl(this, sql).execute(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Map<UUID, SQLQuery> getActiveQuery() {
|
public Integer executeSQL(String sql, Object[] params) {
|
||||||
return this.activeQuery;
|
return new PreparedSQLUpdateActionImpl(this, sql, params).execute(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer executeSQL(String sql) {
|
public List<Integer> executeSQLBatch(String sql, Iterable<Object[]> paramsBatch) {
|
||||||
return new SQLUpdateActionImpl(this, sql).execute(null);
|
return new PreparedSQLBatchUpdateActionImpl(this, sql)
|
||||||
}
|
.setAllParams(paramsBatch)
|
||||||
|
.execute(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer executeSQL(String sql, Object[] params) {
|
public List<Integer> executeSQLBatch(@NotNull String sql, String[] moreSQL) {
|
||||||
return new PreparedSQLUpdateActionImpl(this, sql, params).execute(null);
|
SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, sql);
|
||||||
}
|
if (moreSQL != null && moreSQL.length > 0) {
|
||||||
|
Arrays.stream(moreSQL).forEach(action::addBatch);
|
||||||
|
}
|
||||||
|
return action.execute(null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Integer> executeSQLBatch(String sql, Iterable<Object[]> paramsBatch) {
|
public @Nullable List<Integer> executeSQLBatch(@NotNull Iterable<String> sqlBatch) {
|
||||||
return new PreparedSQLBatchUpdateActionImpl(this, sql)
|
Iterator<String> iterator = sqlBatch.iterator();
|
||||||
.setAllParams(paramsBatch)
|
if (!iterator.hasNext()) return null; // PLEASE GIVE IT SOMETHING
|
||||||
.execute(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next());
|
||||||
public List<Integer> executeSQLBatch(@NotNull String sql, String[] moreSQL) {
|
while (iterator.hasNext()) {
|
||||||
SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, sql);
|
action.addBatch(iterator.next());
|
||||||
if (moreSQL != null && moreSQL.length > 0) {
|
}
|
||||||
Arrays.stream(moreSQL).forEach(action::addBatch);
|
|
||||||
}
|
|
||||||
return action.execute(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return action.execute(null);
|
||||||
public @Nullable List<Integer> executeSQLBatch(@NotNull Iterable<String> sqlBatch) {
|
}
|
||||||
Iterator<String> iterator = sqlBatch.iterator();
|
|
||||||
if (!iterator.hasNext()) return null; // PLEASE GIVE IT SOMETHING
|
|
||||||
|
|
||||||
SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next());
|
@Override
|
||||||
while (iterator.hasNext()) {
|
public TableCreateBuilder createTable(@NotNull String tableName) {
|
||||||
action.addBatch(iterator.next());
|
return new TableCreateBuilderImpl(this, tableName);
|
||||||
}
|
}
|
||||||
|
|
||||||
return action.execute(null);
|
@Override
|
||||||
}
|
public QueryBuilder createQuery() {
|
||||||
|
return new QueryBuilderImpl(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TableCreateBuilder createTable(@NotNull String tableName) {
|
public InsertBuilder<PreparedSQLUpdateBatchAction> createInsertBatch(@NotNull String tableName) {
|
||||||
return new TableCreateBuilderImpl(this, tableName);
|
return new InsertBuilderImpl<PreparedSQLUpdateBatchAction>(this, tableName) {
|
||||||
}
|
@Override
|
||||||
|
public PreparedSQLUpdateBatchAction setColumnNames(List<String> columnNames) {
|
||||||
|
return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QueryBuilder createQuery() {
|
public InsertBuilder<PreparedSQLUpdateAction> createInsert(@NotNull String tableName) {
|
||||||
return new QueryBuilderImpl(this);
|
return new InsertBuilderImpl<PreparedSQLUpdateAction>(this, tableName) {
|
||||||
}
|
@Override
|
||||||
|
public PreparedSQLUpdateAction setColumnNames(List<String> columnNames) {
|
||||||
|
return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InsertBuilder<PreparedSQLUpdateBatchAction> createInsertBatch(@NotNull String tableName) {
|
public ReplaceBuilder<PreparedSQLUpdateBatchAction> createReplaceBatch(@NotNull String tableName) {
|
||||||
return new InsertBuilderImpl<PreparedSQLUpdateBatchAction>(this, tableName) {
|
return new ReplaceBuilderImpl<PreparedSQLUpdateBatchAction>(this, tableName) {
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateBatchAction setColumnNames(List<String> columnNames) {
|
public PreparedSQLUpdateBatchAction setColumnNames(List<String> columnNames) {
|
||||||
return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InsertBuilder<PreparedSQLUpdateAction> createInsert(@NotNull String tableName) {
|
public ReplaceBuilder<PreparedSQLUpdateAction> createReplace(@NotNull String tableName) {
|
||||||
return new InsertBuilderImpl<PreparedSQLUpdateAction>(this, tableName) {
|
return new ReplaceBuilderImpl<PreparedSQLUpdateAction>(this, tableName) {
|
||||||
@Override
|
@Override
|
||||||
public PreparedSQLUpdateAction setColumnNames(List<String> columnNames) {
|
public PreparedSQLUpdateAction setColumnNames(List<String> columnNames) {
|
||||||
return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ReplaceBuilder<PreparedSQLUpdateBatchAction> createReplaceBatch(@NotNull String tableName) {
|
public UpdateBuilder createUpdate(@NotNull String tableName) {
|
||||||
return new ReplaceBuilderImpl<PreparedSQLUpdateBatchAction>(this, tableName) {
|
return new UpdateBuilderImpl(this, tableName);
|
||||||
@Override
|
}
|
||||||
public PreparedSQLUpdateBatchAction setColumnNames(List<String> columnNames) {
|
|
||||||
return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ReplaceBuilder<PreparedSQLUpdateAction> createReplace(@NotNull String tableName) {
|
public DeleteBuilder createDelete(@NotNull String tableName) {
|
||||||
return new ReplaceBuilderImpl<PreparedSQLUpdateAction>(this, tableName) {
|
return new DeleteBuilderImpl(this, tableName);
|
||||||
@Override
|
}
|
||||||
public PreparedSQLUpdateAction setColumnNames(List<String> columnNames) {
|
|
||||||
return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UpdateBuilder createUpdate(@NotNull String tableName) {
|
|
||||||
return new UpdateBuilderImpl(this, tableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DeleteBuilder createDelete(@NotNull String tableName) {
|
|
||||||
return new DeleteBuilderImpl(this, tableName);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,77 +11,77 @@ import java.sql.Statement;
|
|||||||
|
|
||||||
public class SQLQueryImpl implements SQLQuery {
|
public class SQLQueryImpl implements SQLQuery {
|
||||||
|
|
||||||
protected final long executeTime;
|
protected final long executeTime;
|
||||||
|
|
||||||
protected SQLManagerImpl sqlManager;
|
protected SQLManagerImpl sqlManager;
|
||||||
protected QueryActionImpl queryAction;
|
protected QueryActionImpl queryAction;
|
||||||
|
|
||||||
Connection connection;
|
Connection connection;
|
||||||
Statement statement;
|
Statement statement;
|
||||||
|
|
||||||
ResultSet resultSet;
|
ResultSet resultSet;
|
||||||
|
|
||||||
public SQLQueryImpl(
|
public SQLQueryImpl(
|
||||||
SQLManagerImpl sqlManager, QueryActionImpl queryAction,
|
SQLManagerImpl sqlManager, QueryActionImpl queryAction,
|
||||||
Connection connection, Statement statement, ResultSet resultSet
|
Connection connection, Statement statement, ResultSet resultSet
|
||||||
) {
|
) {
|
||||||
this.executeTime = System.currentTimeMillis();
|
this.executeTime = System.currentTimeMillis();
|
||||||
this.sqlManager = sqlManager;
|
this.sqlManager = sqlManager;
|
||||||
this.queryAction = queryAction;
|
this.queryAction = queryAction;
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
this.statement = statement;
|
this.statement = statement;
|
||||||
this.resultSet = resultSet;
|
this.resultSet = resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getExecuteTime() {
|
public long getExecuteTime() {
|
||||||
return this.executeTime;
|
return this.executeTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SQLManagerImpl getManager() {
|
public SQLManagerImpl getManager() {
|
||||||
return this.sqlManager;
|
return this.sqlManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public QueryActionImpl getAction() {
|
public QueryActionImpl getAction() {
|
||||||
return this.queryAction;
|
return this.queryAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResultSet getResultSet() {
|
public ResultSet getResultSet() {
|
||||||
return this.resultSet;
|
return this.resultSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLContent() {
|
public String getSQLContent() {
|
||||||
return getAction().getSQLContent();
|
return getAction().getSQLContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
try {
|
try {
|
||||||
if (getResultSet() != null) getResultSet().close();
|
if (getResultSet() != null) getResultSet().close();
|
||||||
if (getStatement() != null) getStatement().close();
|
if (getStatement() != null) getStatement().close();
|
||||||
if (getConnection() != null) getConnection().close();
|
if (getConnection() != null) getConnection().close();
|
||||||
|
|
||||||
getManager().debug("#" + getAction().getShortID() +
|
getManager().debug("#" + getAction().getShortID() +
|
||||||
" -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms."
|
" -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms."
|
||||||
);
|
);
|
||||||
getManager().getActiveQuery().remove(getAction().getActionUUID());
|
getManager().getActiveQuery().remove(getAction().getActionUUID());
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
getAction().handleException(e);
|
getAction().handleException(e);
|
||||||
}
|
}
|
||||||
this.queryAction = null;
|
this.queryAction = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Statement getStatement() {
|
public Statement getStatement() {
|
||||||
return this.statement;
|
return this.statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Connection getConnection() {
|
public Connection getConnection() {
|
||||||
return this.connection;
|
return this.connection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,195 +10,195 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class StatementUtil {
|
public class StatementUtil {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个 {@link PreparedStatement} 。
|
* 创建一个 {@link PreparedStatement} 。
|
||||||
*
|
*
|
||||||
* @param connection 数据库连接
|
* @param connection 数据库连接
|
||||||
* @param sql SQL语句,使用"?"做为占位符
|
* @param sql SQL语句,使用"?"做为占位符
|
||||||
* @param params "?"所代表的对应参数列表
|
* @param params "?"所代表的对应参数列表
|
||||||
* @return 完成参数填充的 {@link PreparedStatement}
|
* @return 完成参数填充的 {@link PreparedStatement}
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement createPrepareStatement(
|
public static PreparedStatement createPrepareStatement(
|
||||||
Connection connection, String sql, Object[] params
|
Connection connection, String sql, Object[] params
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
return createPrepareStatement(connection, sql, params, false);
|
return createPrepareStatement(connection, sql, params, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个 {@link PreparedStatement} 。
|
* 创建一个 {@link PreparedStatement} 。
|
||||||
*
|
*
|
||||||
* @param connection 数据库连接
|
* @param connection 数据库连接
|
||||||
* @param sql SQL语句,使用"?"做为占位符
|
* @param sql SQL语句,使用"?"做为占位符
|
||||||
* @param params "?"所代表的对应参数列表
|
* @param params "?"所代表的对应参数列表
|
||||||
* @param returnGeneratedKey 是否会返回自增主键
|
* @param returnGeneratedKey 是否会返回自增主键
|
||||||
* @return 完成参数填充的 {@link PreparedStatement}
|
* @return 完成参数填充的 {@link PreparedStatement}
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement createPrepareStatement(
|
public static PreparedStatement createPrepareStatement(
|
||||||
Connection connection, String sql, Object[] params, boolean returnGeneratedKey
|
Connection connection, String sql, Object[] params, boolean returnGeneratedKey
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
sql = sql.trim();
|
sql = sql.trim();
|
||||||
PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
|
PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
|
||||||
Map<Integer, Integer> nullTypeMap = new HashMap<>();
|
Map<Integer, Integer> nullTypeMap = new HashMap<>();
|
||||||
if (params != null) fillParams(statement, Arrays.asList(params), nullTypeMap);
|
if (params != null) fillParams(statement, Arrays.asList(params), nullTypeMap);
|
||||||
statement.addBatch();
|
statement.addBatch();
|
||||||
return statement;
|
return statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建批量操作的一个 {@link PreparedStatement} 。
|
* 创建批量操作的一个 {@link PreparedStatement} 。
|
||||||
*
|
*
|
||||||
* @param connection 数据库连接
|
* @param connection 数据库连接
|
||||||
* @param sql SQL语句,使用"?"做为占位符
|
* @param sql SQL语句,使用"?"做为占位符
|
||||||
* @param paramsBatch "?"所代表的对应参数列表
|
* @param paramsBatch "?"所代表的对应参数列表
|
||||||
* @return 完成参数填充的 {@link PreparedStatement}
|
* @return 完成参数填充的 {@link PreparedStatement}
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement createPrepareStatementBatch(
|
public static PreparedStatement createPrepareStatementBatch(
|
||||||
Connection connection, String sql, Iterable<Object[]> paramsBatch
|
Connection connection, String sql, Iterable<Object[]> paramsBatch
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
return createPrepareStatementBatch(connection, sql, paramsBatch, false);
|
return createPrepareStatementBatch(connection, sql, paramsBatch, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建批量操作的一个 {@link PreparedStatement} 。
|
* 创建批量操作的一个 {@link PreparedStatement} 。
|
||||||
*
|
*
|
||||||
* @param connection 数据库连接
|
* @param connection 数据库连接
|
||||||
* @param sql SQL语句,使用"?"做为占位符
|
* @param sql SQL语句,使用"?"做为占位符
|
||||||
* @param paramsBatch "?"所代表的对应参数列表
|
* @param paramsBatch "?"所代表的对应参数列表
|
||||||
* @param returnGeneratedKey 是否会返回自增主键
|
* @param returnGeneratedKey 是否会返回自增主键
|
||||||
* @return 完成参数填充的 {@link PreparedStatement}
|
* @return 完成参数填充的 {@link PreparedStatement}
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement createPrepareStatementBatch(
|
public static PreparedStatement createPrepareStatementBatch(
|
||||||
Connection connection, String sql, Iterable<Object[]> paramsBatch, boolean returnGeneratedKey
|
Connection connection, String sql, Iterable<Object[]> paramsBatch, boolean returnGeneratedKey
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
|
|
||||||
sql = sql.trim();
|
sql = sql.trim();
|
||||||
PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
|
PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS);
|
||||||
Map<Integer, Integer> nullTypeMap = new HashMap<>();
|
Map<Integer, Integer> nullTypeMap = new HashMap<>();
|
||||||
for (Object[] params : paramsBatch) {
|
for (Object[] params : paramsBatch) {
|
||||||
fillParams(statement, Arrays.asList(params), nullTypeMap);
|
fillParams(statement, Arrays.asList(params), nullTypeMap);
|
||||||
statement.addBatch();
|
statement.addBatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
return statement;
|
return statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 填充PreparedStatement的参数。
|
* 填充PreparedStatement的参数。
|
||||||
*
|
*
|
||||||
* @param statement PreparedStatement
|
* @param statement PreparedStatement
|
||||||
* @param params SQL参数
|
* @param params SQL参数
|
||||||
* @return {@link PreparedStatement} 填充参数后的PreparedStatement
|
* @return {@link PreparedStatement} 填充参数后的PreparedStatement
|
||||||
* @throws SQLException SQL执行异常
|
* @throws SQLException SQL执行异常
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement fillParams(
|
public static PreparedStatement fillParams(
|
||||||
PreparedStatement statement, Iterable<?> params
|
PreparedStatement statement, Iterable<?> params
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
return fillParams(statement, params, null);
|
return fillParams(statement, params, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 填充PreparedStatement的参数。
|
* 填充PreparedStatement的参数。
|
||||||
*
|
*
|
||||||
* @param statement PreparedStatement
|
* @param statement PreparedStatement
|
||||||
* @param params SQL参数
|
* @param params SQL参数
|
||||||
* @param nullCache null参数的类型缓存,避免循环中重复获取类型
|
* @param nullCache null参数的类型缓存,避免循环中重复获取类型
|
||||||
* @return 完成参数填充的 {@link PreparedStatement}
|
* @return 完成参数填充的 {@link PreparedStatement}
|
||||||
*/
|
*/
|
||||||
public static PreparedStatement fillParams(
|
public static PreparedStatement fillParams(
|
||||||
PreparedStatement statement, Iterable<?> params, Map<Integer, Integer> nullCache
|
PreparedStatement statement, Iterable<?> params, Map<Integer, Integer> nullCache
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
if (null == params) {
|
if (null == params) {
|
||||||
return statement;// 无参数
|
return statement;// 无参数
|
||||||
}
|
}
|
||||||
|
|
||||||
int paramIndex = 1;//第一个参数从1计数
|
int paramIndex = 1;//第一个参数从1计数
|
||||||
for (Object param : params) {
|
for (Object param : params) {
|
||||||
setParam(statement, paramIndex++, param, nullCache);
|
setParam(statement, paramIndex++, param, nullCache);
|
||||||
}
|
}
|
||||||
return statement;
|
return statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取null字段对应位置的数据类型
|
* 获取null字段对应位置的数据类型
|
||||||
* 如果类型获取失败将使用默认的 {@link Types#VARCHAR}
|
* 如果类型获取失败将使用默认的 {@link Types#VARCHAR}
|
||||||
*
|
*
|
||||||
* @param statement {@link PreparedStatement}
|
* @param statement {@link PreparedStatement}
|
||||||
* @param paramIndex 参数序列,第一位从1开始
|
* @param paramIndex 参数序列,第一位从1开始
|
||||||
* @return 数据类型,默认为 {@link Types#VARCHAR}
|
* @return 数据类型,默认为 {@link Types#VARCHAR}
|
||||||
*/
|
*/
|
||||||
public static int getNullType(PreparedStatement statement, int paramIndex) {
|
public static int getNullType(PreparedStatement statement, int paramIndex) {
|
||||||
int sqlType = Types.VARCHAR;
|
int sqlType = Types.VARCHAR;
|
||||||
|
|
||||||
final ParameterMetaData pmd;
|
final ParameterMetaData pmd;
|
||||||
try {
|
try {
|
||||||
pmd = statement.getParameterMetaData();
|
pmd = statement.getParameterMetaData();
|
||||||
sqlType = pmd.getParameterType(paramIndex);
|
sqlType = pmd.getParameterType(paramIndex);
|
||||||
} catch (SQLException ignore) {
|
} catch (SQLException ignore) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return sqlType;
|
return sqlType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 为 {@link PreparedStatement} 设置单个参数
|
* 为 {@link PreparedStatement} 设置单个参数
|
||||||
*
|
*
|
||||||
* @param preparedStatement {@link PreparedStatement}
|
* @param preparedStatement {@link PreparedStatement}
|
||||||
* @param paramIndex 参数序列,从1开始
|
* @param paramIndex 参数序列,从1开始
|
||||||
* @param param 参数,不能为{@code null}
|
* @param param 参数,不能为{@code null}
|
||||||
* @param nullCache 用于缓存参数为null位置的类型,避免重复获取
|
* @param nullCache 用于缓存参数为null位置的类型,避免重复获取
|
||||||
*/
|
*/
|
||||||
private static void setParam(
|
private static void setParam(
|
||||||
PreparedStatement preparedStatement, int paramIndex, Object param,
|
PreparedStatement preparedStatement, int paramIndex, Object param,
|
||||||
Map<Integer, Integer> nullCache
|
Map<Integer, Integer> nullCache
|
||||||
) throws SQLException {
|
) throws SQLException {
|
||||||
|
|
||||||
if (param == null) {
|
if (param == null) {
|
||||||
Integer type = (null == nullCache) ? null : nullCache.get(paramIndex);
|
Integer type = (null == nullCache) ? null : nullCache.get(paramIndex);
|
||||||
if (null == type) {
|
if (null == type) {
|
||||||
type = getNullType(preparedStatement, paramIndex);
|
type = getNullType(preparedStatement, paramIndex);
|
||||||
if (null != nullCache) {
|
if (null != nullCache) {
|
||||||
nullCache.put(paramIndex, type);
|
nullCache.put(paramIndex, type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
preparedStatement.setNull(paramIndex, type);
|
preparedStatement.setNull(paramIndex, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 针对UUID特殊处理,避免元数据直接插入
|
// 针对UUID特殊处理,避免元数据直接插入
|
||||||
if (param instanceof UUID) {
|
if (param instanceof UUID) {
|
||||||
preparedStatement.setString(paramIndex, param.toString());
|
preparedStatement.setString(paramIndex, param.toString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 日期特殊处理,默认按照时间戳传入,避免毫秒丢失
|
// 日期特殊处理,默认按照时间戳传入,避免毫秒丢失
|
||||||
if (param instanceof java.util.Date) {
|
if (param instanceof java.util.Date) {
|
||||||
if (param instanceof Date) {
|
if (param instanceof Date) {
|
||||||
preparedStatement.setDate(paramIndex, (Date) param);
|
preparedStatement.setDate(paramIndex, (Date) param);
|
||||||
} else if (param instanceof Time) {
|
} else if (param instanceof Time) {
|
||||||
preparedStatement.setTime(paramIndex, (Time) param);
|
preparedStatement.setTime(paramIndex, (Time) param);
|
||||||
} else {
|
} else {
|
||||||
preparedStatement.setTimestamp(paramIndex, new Timestamp(((java.util.Date) param).getTime()));
|
preparedStatement.setTimestamp(paramIndex, new Timestamp(((java.util.Date) param).getTime()));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 针对大数字类型的特殊处理
|
// 针对大数字类型的特殊处理
|
||||||
if (param instanceof Number) {
|
if (param instanceof Number) {
|
||||||
if (param instanceof BigDecimal) {
|
if (param instanceof BigDecimal) {
|
||||||
// BigDecimal的转换交给JDBC驱动处理
|
// BigDecimal的转换交给JDBC驱动处理
|
||||||
preparedStatement.setBigDecimal(paramIndex, (BigDecimal) param);
|
preparedStatement.setBigDecimal(paramIndex, (BigDecimal) param);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (param instanceof BigInteger) {
|
if (param instanceof BigInteger) {
|
||||||
// BigInteger转为BigDecimal
|
// BigInteger转为BigDecimal
|
||||||
preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param));
|
preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 忽略其它数字类型,按照默认类型传入
|
// 忽略其它数字类型,按照默认类型传入
|
||||||
}
|
}
|
||||||
|
|
||||||
// 其它参数类型直接插入
|
// 其它参数类型直接插入
|
||||||
preparedStatement.setObject(paramIndex, param);
|
preparedStatement.setObject(paramIndex, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
36
pom.xml
36
pom.xml
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
@ -49,8 +49,8 @@
|
|||||||
|
|
||||||
<licenses>
|
<licenses>
|
||||||
<license>
|
<license>
|
||||||
<name>GNU General Public License v3.0</name>
|
<name>The MIT License</name>
|
||||||
<url>https://opensource.org/licenses/GPL-3.0</url>
|
<url>https://opensource.org/licenses/MIT</url>
|
||||||
</license>
|
</license>
|
||||||
</licenses>
|
</licenses>
|
||||||
|
|
||||||
@ -128,20 +128,20 @@
|
|||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
</plugin>
|
</plugin>
|
||||||
<!-- <plugin>-->
|
<!-- <plugin>-->
|
||||||
<!-- <groupId>org.apache.maven.plugins</groupId>-->
|
<!-- <groupId>org.apache.maven.plugins</groupId>-->
|
||||||
<!-- <artifactId>maven-gpg-plugin</artifactId>-->
|
<!-- <artifactId>maven-gpg-plugin</artifactId>-->
|
||||||
<!-- <version>1.5</version>-->
|
<!-- <version>1.5</version>-->
|
||||||
<!-- <executions>-->
|
<!-- <executions>-->
|
||||||
<!-- <execution>-->
|
<!-- <execution>-->
|
||||||
<!-- <id>sign-artifacts</id>-->
|
<!-- <id>sign-artifacts</id>-->
|
||||||
<!-- <phase>verify</phase>-->
|
<!-- <phase>verify</phase>-->
|
||||||
<!-- <goals>-->
|
<!-- <goals>-->
|
||||||
<!-- <goal>sign</goal>-->
|
<!-- <goal>sign</goal>-->
|
||||||
<!-- </goals>-->
|
<!-- </goals>-->
|
||||||
<!-- </execution>-->
|
<!-- </execution>-->
|
||||||
<!-- </executions>-->
|
<!-- </executions>-->
|
||||||
<!-- </plugin>-->
|
<!-- </plugin>-->
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
||||||
<pluginManagement>
|
<pluginManagement>
|
||||||
|
Loading…
Reference in New Issue
Block a user