An open API service indexing awesome lists of open source software.

https://github.com/zjzmisaka/datas_maker

数据批量上传至数据库工具
https://github.com/zjzmisaka/datas_maker

Last synced: 2 months ago
JSON representation

数据批量上传至数据库工具

Awesome Lists containing this project

README

          

# DatasMaker
这是一个基于Java的向数据库批量上传数据的工具. 用户可以仅凭两行代码与一个制造数据的方法批量将数据上传至数据库. 目前支持有MySQL和Oracal数据库. 工程内含有示例, 含有注释.

----
## 本工具的特点:
* 支持向指定数据库的指定表分批上传指定数量的数据.

* 支持通过ssh连接数据库.

* 可自行指定每批上传条数, 也可自动查询当前数据库可接受的数据包最大大小并判断每批次的上传条数, 将效率最大化.

* 在上传过程中如果有某批次的数据出现错误, 将会发出提示通知用户进行应对并重新上传这一批次的数据.

* 如果自填单批上传条数, 上传条数不是单批条数的倍数也没关系.

* 当用户的代码报未知错误后自动停止程序.

## 待增加的特性:
* 增加对更多异常的捕获解释输出.

* 支持断线重连.

## 使用:
用户需要指定制造数据的方法与其所属的类, 工具会通过反射调用此方法, 方法的参数代表上一个批次的数据是否合法成功上传.

### 构造方法:
目前有四种

**以下两种: 直接连接数据库**
```Java
public DatasMaker(DBType dbType, String ip, int port, String dataBaseName, String dbUserName, String dbPassword)
```
*参数依次为: 数据库类型, 数据库地址, 数据库接口, 数据库名, 数据库账号, 数据库密码*

```Java
public DatasMaker(DBType dbType, String ip, int port, String dataBaseName, String dbUserName, String dbPassword, String tableName)
```
*参数依次为: 数据库类型, 数据库地址, 数据库接口, 数据库名, 数据库账号, 数据库密码, 数据库表名*

**以下两种: 通过ssh连接数据库**
```Java
public DatasMaker(DBType dbType, String ip, int sshPort, int localPort, int dbPort, String sshUserName, String sshPassword, String dataBaseName, String dbUserName, String dbPassword)
```
*参数依次为: 数据库类型, 地址, ssh端口, 本地端口, 数据库端口, ssh用户名, ssh密码, 数据库用户名, 数据库密码*

```Java
public DatasMaker(DBType dbType, String ip, int sshPort, int localPort, int dbPort, String sshUserName, String sshPassword, String dataBaseName, String dbUserName, String dbPassword, String tableName)
```
*参数依次为: 数据库类型, 地址, ssh端口, 本地端口, 数据库端口, ssh用户名, ssh密码, 数据库用户名, 数据库密码, 表名*

#### 构造方法简单示例:
```Java
DataMaker dataMaker = new DataMaker(DBType.MySQL, "192.111.11.11", 3306, "database_name", "root", "root", "table_name");
```
#### 设置useSSL参数:
* 当数据库为MySQL时, 可以设置useSSL参数, 参数代表是否使用SSL与服务器通信. 如果不设置, 默认为false.
```Java
DatasMaker dataMaker = new DatasMaker(/*...*/);
dataMaker.setIsUseSSL(true);
```
### 批量上传方法:
**自动判断单批条数**
```Java
public void makeDatas(int allDataTotalCount, String fields, String callerClassName, String methodName)
```
*参数依次为: 需要的数据条数, 需要传递的字段名列表, 用作制造数据的方法所属的类名, 用作制造数据的方法的名字.*

**手动输入单批条数**
```Java
public void makeDatas(int allDataTotalCount, int oneTurnDataTotalCount, String fields, String callerClassName, String methodName)
```
*参数依次为: 需要的数据条数, 一轮批次添加的数据条数, 需要传递的字段名列表, 用作制造数据的方法所属的类名, 用作制造数据的方法的名字.*

#### 批量上传方法简单示例:
**总共上传7654321条数据, 每批12345条, 三个字段.**
```Java
dataMaker.makeDatas(7654321, 12345, "aint, astring, adate", "com.makedatas.sample.DataMakerTest", "makeData");
```
**总共上传7654321条数据, 每批条数自动判断, 全部字段.**
```Java
dataMaker.makeDatas(7654321, "", "com.makedatas.sample.DataMakerTest", "makeData");
```
### 制造数据方法:
* 方法名任意.

* 方法参数为两个布尔值和一个整型, 第一个boolean参数代表上次调用是否是上一批次数据的最后一次调用, 也即上一个批次的数据是否上传完成; 第二个boolean参数代表这一批次的数据是否合法成功上传; int参数代表上一批次上传数据的条数.

* 当第一个布尔值为true, 代表上次调用方法为上一批次数据的最后一次调用. 也即, 除第一批次外的每一批第一次调用时, 该参数会为true.

* 当第二个布尔值参数值为false, 代表上一批次中有数据不合法, 需要重新上传, 用户一般需要在第一个布尔值参数为true时作出应对.

* 每次调用制造一条数据, 以字符串形式作为返回值传递. 例如: "1024, 'String', '2012-03-15 10:13:56'"

*例如: 每批次上传一万条数据至某表, 该表中有列字段为数字型, 按条递增. 这时候需要把这个变量减去一万, 以便保证表中这个字段的数值能连贯顺延不中断.*

* 该方法和它的所属类的访问修饰符必须为public.

#### 制造数据方法简单示例:
```Java
/*static int dataInt = 0;*/
/*DO SOMETHING*/
public String makeData(boolean hasFinishedTurnLastInvoke, boolean hasSucceedLastTurn, int lastTurnDataTotalCount){
if(hasFinishedTurnLastInvoke && !hasSucceedLastTurn){
dataInt -= lastTurnDataTotalCount;
}
++dataInt;
String dataStr = "'Hello World!'";
String dataTime = "'" + selectUtil.selectTimestamp("CREATE_TIME", "TABLE_NAME", "CUSTOMER_ID = " + dataInt) + "'";
return dataInt + ", " + dataStr + ", " + dataTime;
}
```
### 查询方法:
有时候用户添加的数据需要基于其他表的查询结果, 因此封装了查询的方法. [SelectUtil.java](https://github.com/ZjzMisaka/datas_maker/blob/master/src/com/datasmaker/utils/SelectUtil.java)

#### 连接数据库:
**直接连接数据库**
```Java
public SelectUtil(DBType dbType, String ip, int port, String dataBaseName, String dbUserName, String dbPassword)
```
**通过ssh连接数据库**
```Java
public SelectUtil(DBType dbType, String ip, int sshPort, int localPort, int dbPort, String sshUserName, String sshPassword, String dataBaseName, String dbUserName, String dbPassword)
```
#### 进行查询
```Java
public String selectString(String resColumnName, String tableName)
public String selectString(String resColumnName, String tableName, String extra)
```
* 查询的方法以返回值类型区分为selectString, selectInt等. 第一个参数为需要得到的字段名, 第二个参数为需要查询的表名, 第三个为where后的判断条件.

完整的示例程序请看项目中[DatasMakerTest.java](https://github.com/ZjzMisaka/datas_maker/blob/master/src/com/datasmaker/sample/DatasMakerTest.java)

----
## 需要的jar包:
* jsch-0.1.55.jar

* mysql-connector-java-5.1.47.jar

* ojdbc6.jar