包含vertx連接mysql數據庫的詞條

本文目錄一覽:

通過代理在java連接mysql問題,怎麼解決

首先,準備開發工具套件,我們並不會引入過多工具包,僅僅需要: Java8 Vert.x 3 如果你是用Maven做為項目管理工具,請將Vert.x 3引入: io.vertx vertx-core3.3.2 代碼實現: package com.maxleap.mysqlproxy; import io.vertx.core.AbstractVe…

如何用java 5分鐘實現一個最簡單的mysql代理服務器

public class MysqlProxyServer {

private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String[] args) {

Vertx.vertx().deployVerticle(new MysqlProxyServerVerticle());

}

public static class MysqlProxyServerVerticle extends AbstractVerticle {

private final int port = 3306;

private final String mysqlHost = “10.10.0.6”;

@Override

public void start() throws Exception {

NetServer netServer = vertx.createNetServer();//創建代理服務器

NetClient netClient = vertx.createNetClient();//創建連接mysql客戶端

netServer.connectHandler(socket – netClient.connect(port, mysqlHost, result – {

//響應來自客戶端的連接請求,成功之後,在建立一個與目標mysql服務器的連接

if (result.succeeded()) {

//與目標mysql服務器成功連接連接之後,創造一個MysqlProxyConnection對象,並執行代理方法

new MysqlProxyConnection(socket, result.result()).proxy();

} else {

logger.error(result.cause().getMessage(), result.cause());

socket.close();

}

})).listen(port, listenResult – {//代理服務器的監聽端口

if (listenResult.succeeded()) {

//成功啟動代理服務器

logger.info(“Mysql proxy server start up.”);

} else {

//啟動代理服務器失敗

logger.error(“Mysql proxy exit. because: ” + listenResult.cause().getMessage(), listenResult.cause());

System.exit(1);

}

});

}

}

public static class MysqlProxyConnection {

private final NetSocket clientSocket;

private final NetSocket serverSocket;

public MysqlProxyConnection(NetSocket clientSocket, NetSocket serverSocket) {

this.clientSocket = clientSocket;

this.serverSocket = serverSocket;

}

private void proxy() {

//當代理與mysql服務器連接關閉時,關閉client與代理的連接

serverSocket.closeHandler(v – clientSocket.close());

//反之亦然

clientSocket.closeHandler(v – serverSocket.close());

//不管那端的連接出現異常時,關閉兩端的連接

serverSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

clientSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

//當收到來自客戶端的數據包時,轉發給mysql目標服務器

clientSocket.handler(buffer – serverSocket.write(buffer));

//當收到來自mysql目標服務器的數據包時,轉發給客戶端

serverSocket.handler(buffer – clientSocket.write(buffer));

}

private void close() {

clientSocket.close();

serverSocket.close();

}

}

}

測試一下

try {

Class.forName(name);//指定連接類型

Connection conn = DriverManager.getConnection(url, user, password);//url為代理服務器的地址

PreparedStatement pst = conn.prepareStatement(“select * from test;”);//準備執行語句

ResultSet resultSet = pst.executeQuery();

while (resultSet.next()) {

System.out.println(resultSet.getLong(1) + “: ” + resultSet.getString(2));

}

} catch (Exception e) {

e.printStackTrace();

}

vertx怎麼上傳圖片到MySQL

兩種辦法:1、以char或varchar類型保存圖片的上傳路徑;2、以blob格式把圖片以二進制保存在數據庫里。建議用第一種至於用不用PDO,全憑喜好,以MySQL完全可以辦到。

如何用Java快速實現一個最簡單的MySQL代理呢?

首先,準備開發工具套件,我們並不會引入過多工具包,僅僅需要:

Java8

Vert.x 3

如果你是用Maven做為項目管理工具,請將Vert.x 3引入:

dependency

groupIdio.vertx/groupId

artifactIdvertx-core/artifactIdversion3.3.2/version

/dependency

代碼實現:

package com.maxleap.mysqlproxy;

import io.vertx.core.AbstractVerticle;

import io.vertx.core.Vertx;

import io.vertx.core.logging.Logger;

import io.vertx.core.logging.LoggerFactory;

import io.vertx.core.net.NetClient;

import io.vertx.core.net.NetServer;

import io.vertx.core.net.NetSocket;

/**

* @author sneaky

* @since 1.0.0

*/

public class MysqlProxyServer {

private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String[] args) {

Vertx.vertx().deployVerticle(new MysqlProxyServerVerticle());

}

public static class MysqlProxyServerVerticle extends AbstractVerticle {

private final int port = 3306;

private final String mysqlHost = “10.10.0.6”;

@Override

public void start() throws Exception {

NetServer netServer = vertx.createNetServer();//創建代理服務器

NetClient netClient = vertx.createNetClient();//創建連接mysql客戶端

netServer.connectHandler(socket – netClient.connect(port, mysqlHost, result – {

//響應來自客戶端的連接請求,成功之後,在建立一個與目標mysql服務器的連接

if (result.succeeded()) {

//與目標mysql服務器成功連接連接之後,創造一個MysqlProxyConnection對象,並執行代理方法

new MysqlProxyConnection(socket, result.result()).proxy();

} else {

logger.error(result.cause().getMessage(), result.cause());

socket.close();

}

})).listen(port, listenResult – {//代理服務器的監聽端口

if (listenResult.succeeded()) {

//成功啟動代理服務器

logger.info(“Mysql proxy server start up.”);

} else {

//啟動代理服務器失敗

logger.error(“Mysql proxy exit. because: ” + listenResult.cause().getMessage(), listenResult.cause());

System.exit(1);

}

});

}

}

public static class MysqlProxyConnection {

private final NetSocket clientSocket;

private final NetSocket serverSocket;

public MysqlProxyConnection(NetSocket clientSocket, NetSocket serverSocket) {

this.clientSocket = clientSocket;

this.serverSocket = serverSocket;

}

private void proxy() {

//當代理與mysql服務器連接關閉時,關閉client與代理的連接

serverSocket.closeHandler(v – clientSocket.close());

//反之亦然

clientSocket.closeHandler(v – serverSocket.close());

//不管那端的連接出現異常時,關閉兩端的連接

serverSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

clientSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

//當收到來自客戶端的數據包時,轉發給mysql目標服務器

clientSocket.handler(buffer – serverSocket.write(buffer));

//當收到來自mysql目標服務器的數據包時,轉發給客戶端

serverSocket.handler(buffer – clientSocket.write(buffer));

}

private void close() {

clientSocket.close();

serverSocket.close();

}

}

}

測試一下

try {

Class.forName(name);//指定連接類型

Connection conn = DriverManager.getConnection(url, user, password);//url為代理服務器的地址

PreparedStatement pst = conn.prepareStatement(“select * from test;”);//準備執行語句

ResultSet resultSet = pst.executeQuery();

while (resultSet.next()) {

System.out.println(resultSet.getLong(1) + “: ” + resultSet.getString(2));

}

} catch (Exception e) {

e.printStackTrace();

}

vertx為什麼不火

國內沒有普及。Vertx發佈於2011年,除了多語言支持,也已經支持了Postgres、MySQL、MongoDB、Redis等常用組件,只在華為的開源框架servicecomb上有用到過,基本上只能看官網和英文網站才有比較深入的介紹,國內還沒有普及,要將vertx用到生產,必定繞不開它的集群部署模式,而它依賴的組件(如hazelcast)的中文介紹更是少得可憐。

原創文章,作者:YJYSE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/317241.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YJYSE的頭像YJYSE
上一篇 2025-01-11 16:27
下一篇 2025-01-11 16:27

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論