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. 《转载》Eclipse项目上传码云

    本文转载自http://blog.csdn.net/izzyliao/article/details/53074452 把Eclipse项目上传到码云的步骤: 1.登录码云:新建项目 2.输入项目名: ...

  2. 【DP-最大子串和】PAT1007. Maximum Subsequence Sum

    1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  3. 日记整理---->2016-11-25

    2017-03-02开始,记录的一些知识点.岁月长,三更漏.漫漫回廊,依稀人空瘦.借酒消愁入断肠,倚剑笑我,我独自寻殇. 一.vx中的v-bind和{{}}的区别 <td class=" ...

  4. 【linux系列】centos安装vsftp

    一.检查vsftpd软件 如果发现上不了网可以修改配置文件中的ONBOOT=no改为yes,然后重启服务试试

  5. C程序设计语言习题(1-12)

    统计行数.单词数,字符数的程序: #include<stdio.h> #define IN 1 /*在单词内*/ #define OUT 0 /*在单词外*/ int main() { i ...

  6. iOS - 引用计数探讨

    <Objective-C 高级编程> 这本书有三个章节,我针对每一章节进行总结并加上适当的扩展分享给大家.可以从下面这张图来看一下这三篇的整体结构: 注意,这个结构并不和书中的结构一致,而 ...

  7. iOS - 开发屏幕及视图层次

    //屏幕视图分层 .UIWindow .UILayoutContainerView .UITransitionView .UIViewControllerWrpaperView .UILayoutCo ...

  8. mysql操作常用技巧

    删除一张表的数据,条件在另一张表 delete a from A a,B b where a.tel=b.tel and a.code=b.code and a.day='201808';

  9. Spark2 生存分析Survival regression

    在spark.ml中,实现了加速失效时间(AFT)模型,这是一个用于检查数据的参数生存回归模型. 它描述了生存时间对数的模型,因此它通常被称为生存分析的对数线性模型. 不同于为相同目的设计的比例风险模 ...

  10. Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...