您好,欢迎访问沃航(武汉)科技有限公司官方网站
一点一点学vart.x(五)
2019-06-20 00:26:49

上一节我们学习了如何获取vert.x的值,现在我们要学习下vert.x如何操作数据库。

vert.x提供了两种调用数据库的方式,一种是jdbc,老式的java调用数据库方式,这种方式的好处是通用,无论是哪种数据库,都可以使用这个调用。

另一种是针对mysql与pgsql的方式,这种方式比jdbc更轻,但是性能更好些。

这一节我们使用vert.x的jdbc库调用mysql数据库为例,vert.x操作io全是异步操作。控制mysql也是。

首先,我们需要先引入依赖,一个是vert.x的jdbc支持库,另一个是mysql的支持库build.gradle文件如下:

repositories {
    mavenCentral()
}

dependencies {
    compile "io.vertx:vertx-core:3.7.1"
    compile "io.vertx:vertx-jdbc-client:3.7.1"
    compile "mysql:mysql-connector-java:8.0.16"
}

其中版本版本可以根据项目实际情况调整。

然后新建一个jdbc的连接池文件,以后所有的数据库请求全部通过这个文件执行。vert.x的jdbc连接池默认使用的C3P0,是一个老牌的java数据库连接池。

源码方式如下:

package JDBC;

import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.jdbc.JDBCClient;
import io.vertx.ext.sql.ResultSet;
import io.vertx.ext.sql.SQLClient;
import io.vertx.ext.sql.SQLConnection;

import java.util.List;

public class Jdbc {

    private static SQLClient client = null;

    public static void Init (Vertx vertx) { // 这里需要在主函数中调用,以初始化连接池
        client = JDBCClient.createShared(vertx, new JsonObject()
                .put("driver_class", "com.mysql.cj.jdbc.Driver")
                .put("url", "jdbc:mysql://localhost:3306/homepage?serverTimezone=Asia/Shanghai")
                .put("user", "root")
                .put("password", "root"));
    }

    public static void QuerySql (String sql) { // 这里是调用执行数据库语句的位置
        client.getConnection(res -> {
            if (res.succeeded()) {
                SQLConnection connection = res.result();
                connection.query(sql, res2 -> {
                    if (res2.succeeded()) {
                        ResultSet rs = res2.result();
                        System.out.println("Run sql success");
                        List<JsonObject> rows = rs.getRows();
                        for(int i = 0 ; i < rows.size() ; i++) {
                            System.out.println(rows.get(i));
                        }
                    } else {
                        System.out.println("Run sql fail");
                    }
                });
            } else {
                System.out.println("Failed to get connection");
            }
        });
    }
}

主函数对应修改为:

import JDBC.Jdbc;
import io.vertx.core.Vertx;

public class Main {
    public static void main (String args[]) {
        System.out.println("Hello world");
        // Create an HTTP server which simply returns "Hello World!" to each request.
        Vertx vertx = Vertx.vertx();
        Jdbc.Init(vertx); // 初始化数据库连接池
        vertx.createHttpServer()
            .requestHandler(req -> {
                req.bodyHandler(body -> {
                    Jdbc.QuerySql("SELECT * FROM `config`"); // 执行数据库查询语句
                    req.response()
                            .putHeader("content-type", "text/plain")
                            .putHeader("Access-Control-Allow-Origin", "*")
                            .end("mothod:" + req.method() + "    path:" + req.path() + "    body:" + body);
                });
            })
            .listen(8080, handler -> { 
                if (handler.succeeded()) {
                    System.out.println("create httpserver success");
                } else {
                    System.err.println("create httpserver fail");
                }
            });
    }
}

大家需要注意的是,数据库连接的url中,需要serverTimezone这个参数,这是mysql-connector-java这个包所决定的。如果数据库配置正确,应该就可以在终端中看见数据库的内容了。


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn