vertx连接mysql数据库
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数据库的更多相关文章
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- Windows操作系统下远程连接MySQL数据库
用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...
- java 通过jdbc连接MySQL数据库
先了解下JDBC的常用接口 1.驱动程序接口Driver 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类.通常情况下,通过java.lang.Clas ...
- JDBC连接MySQL数据库代码模板
下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...
- PHP如何连接MySQL数据库
* PHP连接MySQL数据库 * 准备工作 * 在XAMPP软件的安装目录/php/ext目录中 * php_mysql.dll和php_mysqli.dll文件必须存在 * 在XAMPP软件的安装 ...
- JSP连接MySQL数据库问题
之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- Java连接MySQL数据库——含步骤和代码
工具:eclipse MySQL5.6 MySQL连接驱动:mysql-connector-java-5.1.27.jar 加载驱动: 1. 在工程目录中创建lib文件夹,将下载好的JDBC放到该文件 ...
随机推荐
- 《转载》为什么我要在2018年学习Python?
本文转载自36kr 从网页编程到时髦的人工智能,机器学习,这个享有"瑞士军刀(万能工具)"盛誉的Python语言, 你学会了吗? 编者注: 根据维基百科的解释,"Pyth ...
- PHP一致性哈希实现。。
<?php /** *@author:xiaojiang 20140222 * 一致性哈希php 实现 */ class MyHash{ //虚拟节点数 private $_virtualCou ...
- Failure to transfer org.springframework.boot:spring-boot-starter-parent:pom:2.0.1.RELEASE from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempt
第一次用 Spring Starter Project 创建一个Spring应用时,POM 文件报错: Project build error: Non-resolvable parent POM f ...
- .NET 正则表达式使用高级技巧之替换类介绍
因为.net的基本正则语法和Perl5基本相同,所以基本语法你可以去下载一下M$的JS帮助文档,上面有详细的说明 \d表示什么,{,}表示什么,\[表示什么……,这里我只想提醒大家一点,为了避免和反向 ...
- 【Spring Boot&&Spring Cloud系列】Spring Boot中使用数据库之MySql
对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库提供持久化的标准规范,即将Java的普通对象通过对象关系映射(ORM)持久化到数据库中. 项 ...
- C#访问MySQL数据库帮助类
MySQL数据库访问帮助类 1.项目添加引用官方MySQL动态库MySql.Data.dll 下载地址:MySql.Data.dll(也可以到官网下载动态库)项目添加引用 这里有一个Mysql帮助类的 ...
- Android adb录制视频和截屏的dos脚本
以下是本人写的脚本,用于录制android手机视频.截屏 dos脚本文件名:screenrecord.bat @ECHO OFF CLS color 0a set SCREEN_RECORD_SAVE ...
- Promise {<pending>
场景:在create-react-app whatwg-fetch的项目中,想获取请求返回的数据, componentWillMount() { console.log(this.props) con ...
- vue Element动态设置el-menu导航当前选中项
1,npm install vuex --save 2,在src下新建vuex文件夹,新建store.js文件: store.js import Vue from 'vue' import Vuex ...
- CF 1073C Vasya and Robot(二分答案)
C. Vasya and Robot time limit per test 1 second memory limit per test 256 megabytes input standard i ...