1:创建一个verticle组件

package jdbcConnection;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.asyncsql.MySQLClient;
import io.vertx.ext.sql.SQLClient;
import io.vertx.ext.sql.SQLConnection;
import io.vertx.ext.sql.SQLRowStream; import java.util.ArrayList;
import java.util.List; /**
* Created by sweet on 2017/9/13.
*/
public class MyFirstVerticle extends AbstractVerticle { private String sql = "SELECT id, name FROM t_school WHERE id IN ("; private SQLClient sqlClient; public static void main(String[] args) {
Runner.runExample(MyFirstVerticle.class);
} @Override
public void start(Future<Void> startFuture) throws Exception {
JsonObject c = new JsonObject();
//配置数据库连接
c.put("username", "root").put("password", "1367356")
.put("host","192.168.100.91").put("database", "user"); sqlClient = MySQLClient.createShared(vertx, c); Future<SQLConnection> sqlConnectionFuture = Future.future(); sqlClient.getConnection(sqlConnectionFuture); sqlConnectionFuture.setHandler(connection -> {
if (connection.succeeded()) {
SQLConnection conn = connection.result(); Future<SQLRowStream> streamFuture1 = Future.future();
Future<List<User>> streamFuture2 = Future.future();
Future<List<JsonArray>> future = Future.future(); //public interface Future<T> extends AsyncResult<T>, Handler<AsyncResult<T>>
conn.queryStream("SELECT id, name, t_school_id FROM t_user", streamFuture1);
//前面sql语句执行的结果,交到streamFuture1容器里,或者由handler处理,Future<T>是继承了Handler<AsyncResult<T>>的。
//T是SQLRowStream,streamFuture1是Future<SQLRowStream>。
streamFuture1.compose(sqlRowStream -> { //处理sqlRowStream
// System.out.println(sqlRowStream.column("id")); //0
// System.out.println(sqlRowStream.column("name")); //
List<User> users = new ArrayList<>(); sqlRowStream.handler(jsonArray -> { //sqlRowStream,转换为了jsonArray。["23","lisi","yuhuange"]
System.out.println(jsonArray);
users.add(new User(jsonArray));
}); System.out.println("user size: " + users.size()); //
streamFuture2.complete(users); }, streamFuture2)//处理完成,有一个结果Future,继续处理。
.compose(users -> { //处理users
List<JsonArray> list = new ArrayList<>(); JsonArray collect = users.parallelStream()
.map(User::getSchoolId)
.collect(JsonArray::new, JsonArray::add, JsonArray::addAll); String sql2 = sql += Utils.placeholder("?", collect.size(), ", ") + ")"; conn.queryStreamWithParams(sql2, collect, schoolResult -> {
if (schoolResult.failed()){
schoolResult.cause().printStackTrace();
return;
}
schoolResult.result().handler(jsonArray1 -> { //将schoolResult转化为json数据进行处理
if (jsonArray1 != null && jsonArray1.size() > 0)
list.add(jsonArray1);
}); future.complete(list);
});
}, future); future.setHandler(list -> { //异步结果list
conn.close(); // 关闭流
if (list.failed()) {
list.cause().printStackTrace();
return;
}
System.out.println("-----");
list.result().forEach(System.out::println);
}); } else {
connection.cause().printStackTrace();
System.err.println(connection.cause().getMessage());
}
});
startFuture.complete();
}
}

2:user类

package jdbcConnection;
import io.vertx.core.json.JsonArray; public class User { private String id;
private String name;
private String schoolId; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSchoolId() {
return schoolId;
} public void setSchoolId(String schoolId) {
this.schoolId = schoolId;
} public User() {
} public User(String id, String name) {
this.id = id;
this.name = name;
} public User(JsonArray jsonArray) {
this.id = jsonArray.getString(0);
this.name = jsonArray.getString(1);
this.schoolId = jsonArray.getString(2);
} @Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", schoolId='" + schoolId + '\'' +
'}';
}
// ....
}

3:utils类

package jdbcConnection;

public class Utils {

  public static void main(String[] args) {
System.out.println(placeholder("?", 5, ","));
} private Utils(){} /**
* 生成占位符
* (?, 5, ",")
* ?,?,?,?,?
* @param symbol ?
* @param count 出现个数
* @param delimiter 分割符
* @return
*/
public static String placeholder(String symbol, Integer count, String delimiter) {
String[] s = new String[count];
for (int i = 0; i < count; i++) {
s[i] = symbol;
}
return String.join(delimiter, s);
}
}

4:runner是vertx官方提供的启动加载类:参考
     https://juejin.im/post/5a309478518825592c081748

vertx连接mysql数据库的更多相关文章

  1. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  2. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  3. Windows操作系统下远程连接MySQL数据库

    用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...

  4. java 通过jdbc连接MySQL数据库

    先了解下JDBC的常用接口 1.驱动程序接口Driver 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类.通常情况下,通过java.lang.Clas ...

  5. JDBC连接MySQL数据库代码模板

    下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...

  6. PHP如何连接MySQL数据库

    * PHP连接MySQL数据库 * 准备工作 * 在XAMPP软件的安装目录/php/ext目录中 * php_mysql.dll和php_mysqli.dll文件必须存在 * 在XAMPP软件的安装 ...

  7. JSP连接MySQL数据库问题

    之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...

  8. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  9. Java连接MySQL数据库——含步骤和代码

    工具:eclipse MySQL5.6 MySQL连接驱动:mysql-connector-java-5.1.27.jar 加载驱动: 1. 在工程目录中创建lib文件夹,将下载好的JDBC放到该文件 ...

随机推荐

  1. (原)android修改文件所属的用户组

    首先得安装了busybox: 命令如下: busybox fileName 其中的0表示root,改成1000则表示system,改成2000则表示shell.

  2. Centos6下Python3的编译安装

    本文转载自 Centos6下Python3的编译安装 系统环境:CentOS 6.8-Minimal 安装Python依赖包: 1 [root@Python src]# yum install zli ...

  3. VC利用调试寄存器实现硬件断点源码

    [文章标题]:VC利用调试寄存器实现硬件断点源码 [文章作者]:yhswwr(SilenceRet) [作者QQ]:3412259 [编写语言]:C++ [使用工具]:VS2008.VC++9 [本文 ...

  4. strcat的几种实现及性能比较

    一  原型说明 strcat()为C语言标准库函数,用于字符串拼接.函数原型声明在string.h头文件中: char *strcat(char *dest, const char *src); 该函 ...

  5. 【基础知识】列一下一个.Net WEB程序员需要掌握的知识

    基础部分 C# 基础语法 OOP的概念,面向对象的理解 继承 封装 多态 ASP.NET MVC (Web Form 用的越来越少,如果你不熟悉,可以不看) JavaScript 基础语法 如何在HT ...

  6. javascript解析器原理

    浏览器在读取HTML文件的时候,只有当遇到<script>标签的时候,才会唤醒所谓的“JavaScript解析器”开始工作. JavaScript解析器工作步骤 1. “找一些东西”: v ...

  7. 题目1161:Repeater(规律输出图形)

    题目1161:Repeater 题目链接:http://ac.jobdu.com/problem.php?pid=1161 具体分析:https://github.com/zpfbuaa/JobduI ...

  8. time_t到.NET DateTime的转换

    time函数返回的time_t是一个utc时间且相对于1970年1月1日的total seconds,转换到DateTime只需以相同的方式转换回去即可. C/C++ auto t = time(); ...

  9. IOS 6 和 IOS7 UITableViewCell上添加控件的获取

    假设每个cell上面都有UIButton,怎么判断哪个Cell上的按钮被按下了呢? IOS6上 -(IBAction)btnClick:(id)sender { UIButton *btn = (UI ...

  10. python中的null值

    在一个没有接口文档的自动化测试中,只能通过抓包及查日志查看发送的信息,其中有一个接口发送的信息如下: enable_snapshot": true, "new_size" ...