暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

「更易用的OceanBase」Python3与Java 连接 OceanBase对比

原创 knighthood 2022-11-12
1520

什么是OceanBase

        OceanBase是阿里巴巴和蚂蚁金服完全自主研发的通用的分布式关系型数据库,定位为商用企业级数据库。OceanBase能提供金融级别的可靠性,目前主要应用用于金融行业,同时也适用于非金融行业场景。它融合传统关系数据库和分布式系统的优势,利用普通的PC服务器组成数据库集群,拥有出色的线性扩展性。

        2022年是 OceanBase 发展的第12年,它的成长过程如下图:

python连接OceanBase

        这里我们使用的是python中的一个库:PyMySQL 

        它是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。

这里我们首先需要安装这个库,在cmd中

pip install PyMySQL


这里笔者之前已经安装过了(顺便更新了一下pip)

在使用PyMySQL的时候,需要设置 connect 对象,代码如下

conn = pymysql.connect(
    host="localhost", 
    port=2881,  user="root", 
    passwd="", 
    db="testdb"
)

参数讲解

    host:数据库服务器所在的主机

    port: MySQL使用的端口,默认值通常可以。(默认:3306)

    user:登陆时的用户名

    database:使用数据库,None表示不使用特定的数据库。

    db: **DEPRECATED**数据库别名。

    passwd: **DEPRECATED**密码别名。

当然,还有很多参数可以设置,等以后用到了在讲

    user=None,  # The first four arguments is based on DB-API 2.0 recommendation.
        password="",
        host=None,
        database=None,
        unix_socket=None,
        port=0,
        charset="",
        sql_mode=None,
        read_default_file=None,
        conv=None,
        use_unicode=True,
        client_flag=0,
        cursorclass=Cursor,
        init_command=None,
        connect_timeout=10,
        read_default_group=None,
        autocommit=False,
        local_infile=False,
        max_allowed_packet=16 * 1024 * 1024,
        defer_connect=False,
        auth_plugin_map=None,
        read_timeout=None,
        write_timeout=None,
        bind_address=None,
        binary_prefix=False,
        program_name=None,
        server_public_key=None,
        ssl=None,
        ssl_ca=None,
        ssl_cert=None,
        ssl_disabled=None,
        ssl_key=None,
        ssl_verify_cert=None,
        ssl_verify_identity=None,
        compress=None,  # not supported
        named_pipe=None,  # not supported
        passwd=None,  # deprecated
        db=None,  # deprecated


以下是例子

import pymysql

conn = pymysql.connect(host="localhost", port=2881,
                       user="root", passwd="", db="testdb")
try:
    with conn.cursor() as cur:
        cur.execute('SELECT * FROM cities')
        ans = cur.fetchall()
        print(ans)
finally:
    conn.close()


可能有些小伙伴会出现这个情况,即

(pymysql)连接数据库报错)pymysql.err。操作错误:(2003)无法连接到“本地主机”上的MySQL服务器([WinError 10061]由于计算机积极拒绝,无法连接。)")

可能就需要下面的排错过程

1. 确保本地服务器安装了MySQL数据库(有些小伙伴看到别人的代码直接复制过来用,自己却没有安装MySQL服务器)

2. 使用ping命令,看网络是否联通。

3. 使用

netstat -nltp | grep 3306

查看mysql服务是否正常开启。

4. 再次检测一次Mysql的连接配置是否正确(用户名和密码是否正确,格式端口是否是整型,其他格式是否正确)。

5. 以上都检测好了,但是连接过程中还是出现超时问题,那就过会再试吧。

Java连接OceanBase

Java 环境为 Java JDK 8 及以上版本。

推荐使用 MySQL Connector/J 5.1.47 版本

MySQL Connector/J 8.x 版本可以下载

https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing.html

https://dev.mysql.com/downloads/connector/j/

安装过程可以看下面这篇

https://blog.csdn.net/weixin_43579015/article/details/117228159



参数讲解

connection = DriverManager.getConnection("jdbc:mysql://{hostname}:{port}/{dbname}?user={username}&password={password}")
  • hostname:OceanBase 数据库连接 IP,通常是一个 OBProxy 地址。

  • port:OceanBase 数据库连接端口,也是 OBProxy 的监听端口,默认是 2883,可以自定义。

  • dbname:需要访问的数据库名称。

  • username:租户的连接账户,默认是 root

  • password:账户密码。

例如下面这个例子:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
   public static void main(String[] args) {
       try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            try{
                
                Connection connection = DriverManager.getConnection("jdbc:mysql://172.30.xx.xx:2883/test?user=r***&password=");
                System.out.println(connection.getAutoCommit());
                Statement sm = connection.createStatement();
                //执行删除表、新建表、插入数据等操作。
                String q1="drop table if exists t_meta_form";
                sm.executeUpdate(q1);
                String q2="CREATE TABLE t_meta_form ( name varchar(36) NOT NULL DEFAULT ' ', id int NOT NULL ) DEFAULT CHARSET = utf8mb4";
                String q3="insert into t_meta_form (name,id) values ('an','1')";
                sm.executeUpdate(q2);
                sm.executeUpdate(q3);                  

            }catch(SQLException se){
                System.out.println("error!");
                se.printStackTrace() ;
            }
            }catch (Exception ex) {
                ex.printStackTrace();
            }
    }
}

接下来需要手动添加驱动到环境配置,根据 mysql-connector-java-5.1.47.jar 实际安装路径填写

例如我的路径在/usr/share/java/mysql-connector-java-5.1.47.jar

export CLASSPATH=/usr/share/java/mysql-connector-java-5.1.47.jar:$CLASSPATH

接下来编译

javac Test.java

运行

java Test

即可连接

对比

这里看似python的简单一些,实际上也差不多,主要是MySQL的安装,有需要安装8.x版本的可以看我上面给的链接,学习一下



最后修改时间:2022-11-15 10:53:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论