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. Androd Toolbar 的简单使用(转)

    14年Android开发者大会提出了Android5.0 系统以及 材料设置 Material Design.在 材料设计中推出了大量的UI效果,其中某些功能 已添加进 兼容包,所以可以在低版本中来实 ...

  2. Android设计和开发系列第一篇:Notifications通知(Develop—API Guides)

    Notifications IN THIS DOCUMENT Design Considerations Creating a Notification Required notification c ...

  3. MFC 消息映射表和虚函数实现消息映射到底谁的效率高

    深入浅出MFC对于虚函数实现方式的缺点,它指出:虚函数耗费大量内存,系统最终将被这些额外负担拖垮. 但是现在对于容量巨大的白菜价格的内存来说,这种额外负担是否已经过时了呢~?    书中提到,虚函数表 ...

  4. Android调试技巧

    转自:http://gityuan.com/2017/07/11/android_debug/ 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Tr ...

  5. Archive of all Android Studio releases / Eclipse 版本大全 / OpenJDK 各版本

    一 Android Studio 版本大全 https://developer.android.com/studio/archive.html Download Archives This is an ...

  6. 如何搭建Packetbeat性能监控

    安装与配置JDK 1.  将jdk-8u111-linux-x64.tar.gz上传至Linux的/opt目录下,并执行解压命令: tar -zxvf jdk-8u111-linux-x64.tar. ...

  7. 【CF908E】New Year and Entity Enumeration 位运算+DP

    [CF908E]New Year and Entity Enumeration 题意:给定$M=2^m-1$,我们称一个集合S是好的,当且仅当它满足:1.$\forall a\in S,a\  \ma ...

  8. iOS中self.xxx 和 _xxx 下划线的区别

    property (nonatomic,copy) NSString *propertyName; self.propertyName 是对属性的拜访: _propertyName 是对部分变量的拜访 ...

  9. Java 8新增的Lambda表达式

    一. 表达式入门 Lambda表达式支持将代码块作为方法参数,lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例,相当于一个匿名的方法. 1.1 La ...

  10. easyui---基础组件:panel

    加载easyui有两种方式:1种是html方式加载,1种是js加载. 要加载内容非常多时,用js,如果加载的东西比较少,用html就可以了. panel组件:面板 就是头 身展示 ,一个滚动条,几个关 ...