什么是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版本的可以看我上面给的链接,学习一下