MySQL Connector/J 连接 seekdb 示例程序
seekdb 支持通过 MySQL 官方 JDBC 驱动连 接。本文介绍了如何通过 MySQL Connector/J 连接并使用 seekdb。
前提条件
- 您已下载并安装 IntelliJ IDEA。
- 您已下载 JDK 1.8.0。
- 您已下载并在 IntelliJ IDEA 中配置 Maven。
- 您已下载本文所使用的工程示例代码。
版本兼容性
| MySQL Connector/J 版本 | 推荐版本 | 说明 |
|---|---|---|
| 5.x | 5.1.40 ~ 5.1.49 | 稳定版本 |
| 8.x | 8.0.7 ~ 8.0.25, 8.2.0 ~ 8.4.0 | 新特性支持 |
功能特性
- 支持标准的 JDBC API
- 提供连接池管理
- 支持 SSL 连接
- 支持批量操作
- 支持预处理语句
安装后检查
-
检查 JDK 是否安装成功:
java -version -
检查 Maven 是否安装成功:
mvn -version -
(可选)检查 IntelliJ IDEA 中配置 Maven 是否正确:
本文仅提供简单的示例工程供您参考。如果您需要尝试开发更为复杂的示例,可以下载适合您开发环境版本的 Maven,并通过如下路径,在 IntelliJ IDEA 中完成配置。
-
检查 Maven 是否安装成功:
mvn -version -
打开 IntelliJ IDEA,点击 IntelliJ IDEA > Settings > Build,Execution,Development > Build Tools > Maven,在 Maven home path 配置 Maven 安装包所在路径。

-
操作步骤
- 获取 seekdb 连接信息。
- 修改您已下载的工程示例代码。
- 运行工程示例代码。
创建 Java 应用程序
步骤一:获取数据库连接串
联系 seekdb 部署人员或者管理员获取相应的数据库连接串,例如:
mysql -h$host -P$port -u$user_name -p$password -D$database_name
参数说明:
host:提供 seekdb 的连接 IP。使用实际的 IP 替换,也可以使用本地 IP 及 127.0.0.1。port:提供 seekdb 接端口。使用实际的端口替换,默认是 2881,在部署 seekdb 时可自定义。$database_name:需要访问的数据库名称。$user_name:提供连接账户。格式:用户名。$password:提供账户密码。
更多连接串的信息,请参见 通过 MySQL 客户端连接 seekdb。
示例如下:
mysql -hxxx.xxx.xxx.xxx -P2881 -uroot -p****** -Dtest -A
步骤二:修改工程示例代码
-
解压已下载好的工程示例。
-
打开 IntelliJ IDEA,点击 File > Open,添加工程示例文件。
-
根据步骤一中获取的连接串信息,修改工程代码 JDBCDemo > src > main > java > JDBCTest 文件中如下数据库连接参数。
修改代码中的数据库连接参数。参考如下字段及拼接方法,对应的值,则取自步骤一获取的数据库连接串。
connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}")
//示例
jdbc:mysql://100.88.xx.xx:2881/test?user=r***&password=******`-
host:取自
-h参数,seekdb 连接地址。 -
port:取自
-P参数,seekdb 连接端口。 -
dbname:取自
-D参数,需要访问的数据库名称。 -
username:取自
-u参数,连接用户名,默认是 'root'。 -
password:取自
-p参数,用户密码。
修改后代码段示例如下:
//示例
Connection connection = DriverManager.getConnection("jdbc:mysql://100.88.xx.xx:2881/test?user=r***&password=******");提示若使用 MySQL Connector/J 8.x,账号密码中需避免包含
#,否则会导致示例工程运行报错。 -
在正确安装 MySQL Connector/J 5.1.47 驱动并配置环境之后,可以通过以下 Test.java 文件的示例代码进行数据库连接及使用。
如果是 MySQL Connector/J 8.x 版本,Class.forName("com.mysql.jdbc.Driver") 中的 com.mysql.jdbc.Driver 需要替换成 com.mysql.cj.jdbc.Driver。
完整代码示例如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) {
try {
//load driver
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
// Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
//create connection
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:2881/test?user=r***&password=");
System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
Statement stmt = connection.createStatement();
//create table
stmt.execute("drop table if exists test");
stmt.execute("create table test (id int, name varchar(25))");
System.out.println("create table successfully");
//insert data
stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
System.out.println("insert data successfully");
//query data
System.out.println("query data : ");
ResultSet rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//update data
stmt.execute("update test set name = 'bbb' where id = 1");
System.out.println("update data successfully");
//query data after update
System.out.println("query data after update : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//delete data
stmt.execute("delete from test where id = 1");
System.out.println("delete data successfully");
//query data after delete
System.out.println("query data after delete : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//drop table
stmt.execute("drop table test");
//close
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
}
}
步骤三:运行应用程序
在 IntelliJ IDEA 中运行示例工程。若返回如下结果,说明数据库连接成功,示例工程执行正确。
项目代码介绍
点击 mysql-connector/j 下载项目代码,是一个名称为 JDBCDemo.zip 的压缩包。
解压后,得到一个名为 JDBCDemo 的文件夹。目录结构如下所示:
JDBCDemo
├── src
│ └── main
│ └── java
│ └── JDBCTest.java
└── pom.xml
文件说明:
src:源代码根目录。main:主代码目录,包含应用程序的主要逻辑。java:Java 源代码目录。JDBCTest.java:主类,包含创建表和插入数据等逻辑。pom.xml:Maven 项目的配置文件,用于管理项目的依赖和构建设置。
pom.xml 代码介绍
pom.xml 文件是 Maven 项目的配置文件,定义了项目的依赖项、插件和构建规则等信息。Maven 是一个 Java 项目管理工具,可以自动下载依赖项、编译和打包项目等操作。
本文 pom.xml 文件的代码主要包括以下几个部分:
-
文件声明语句。
声明本文件是一个 XML 文件,使用的 XML 版本是
1.0,字符编码方式是UTF-8。代码如下:
<?xml version="1.0" encoding="UTF-8"?> -
配置 POM 的命名空间和 POM 模型版本。
- 通过
xmlns指定 POM 的命名空间为http://maven.apache.org/POM/4.0.0。 - 通过
xmlns:xsi指定 XML 命名空间http://www.w3.org/2001/XMLSchema-instance。 - 通过
xsi:schemaLocation指定 POM 的命名空间为http://maven.apache.org/POM/4.0.0和 POM 的 XSD 文件的位置为http://maven.apache.org/xsd/maven-4.0.0.xsd。 - 通过
<modelVersion>元素指定了该 POM 文件使用的 POM 模型版本为4.0.0。
代码如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 其他配置 -->
</project> - 通过
-
配置基本信息。
- 通过
<groupId>指定项目所属组织为com.example。 - 通过
<artifactId>指定项目的名称为JDBCDemo。 - 通过
<version>项目的版本号为1.0-SNAPSHOT。
代码如下:
<groupId>org.example</groupId>
<artifactId>JDBCDemo</artifactId>
<version>1.0-SNAPSHOT</version> - 通过
-
配置项目所依赖组件。
-
添加
mysql-connector-java依赖库,用于与数据库进行交互:信息本部分代码定义项目所依赖组件是 MySQL Connector/J 的 V5.1.40 版本,如果需要了解其他版本的信息,请参见 MySQL Connector/J。
- 通过
<groupId>指定依赖项所属的组织为mysql。 - 通过
<artifactId>指定依赖项的名称为mysql-connector-java。 - 通过
<version>指定依赖项的版本号为5.1.40。
代码如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency> - 通过
-
JDBCTest.java 代码介绍
JDBCTest.java 文件是示例程序的一部分,代码演示了如何使用 MySQL Connector/J执行数据库操作。它首先配置了数据库连接信息,然后创建了一个 JDBCTest 对象来执行数据库操作。代码中还包括了创建表、插入数据和查询数据的示例。
本文 JDBCTest.java 文件的代码主要包括以下几个部分:
-
导入 Java 程序中使用 JDBC API 需要的 Java 类。
- Connection 用于建立与数据库之间的连接。
- DriverManager 负责管理一组 JDBC 驱动程序。
- ResultSet 用于处理 SQL 查询返回的数据。
- Statement 用于执行静态 SQL 语句并返回结果。
代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; -
创建一个
JDBCTest类,并定义了main方法。- 定义一个名为
JDBCTest的公共类,作为程序的入口点。类名需要与文件名保持一致。 - 定义一个公共静态方法
main,作为程序的起始执行点。 - 其他数据库操作。
代码如下:
public class Main {
public static void main(String[] args) {
// 数据库连接信息
// 创建数据源
// 创建表
// 插入数据
// 更新数据
// 删除数据
}
} - 定义一个名为
-
定义数据库连接信息。
Class.forName()来加载并注册 MySQL JDBC 驱动程序。DriverManager.getConnection()方法定义用于连接数据库的 URL、用户名和密码。您需要将$host、$port、$database_name、$user_name和$password替换为实际的数据库连接信息。
代码如下:
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
//Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
Connection connection = DriverManager.getConnection("jdbc:mysql://xx.xxx.xxx.xxx:2881/test?user=test@tt1&password=test");参数解释:
$host:提供 seekdb 的连接 IP。使用实际的 IP 替换,也可以使用本地 IP 及 127.0.0.1。$port:提供 seekdb 接端口。使用实际的端口替换,默认是 2881,在部署 seekdb 时可自定义。$database_name:需要访问的数据库名称。$user_name:提供连接账户。格式:用户名。$password:提供账户密码。
-
创建和执行 SQL 声明。
Statement stmt = connection.createStatement();
stmt.execute("..."); -
创建表。
代码如下:
// 用 SQL 语句删除如果存在名为 "test" 的表
stmt.execute("drop table if exists test");
// 创建一个新的名为 "test" 的表,包含两个字段:整型的 "id" 和字符型的 "name"
stmt.execute("create table test (id int, name varchar(25))");
// 打印创建表成功的消息
System.out.println("create table successfully"); -
插入数据。
代码如下:
// 在 "test" 表中插入两行数据
stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
// 打印插入数据成功的消息
System.out.println("insert data successfully"); -
查询数据。
代码如下:
// 打印查询数据的消息
System.out.println("query data : ");
// 执行查询 SQL 语句,获取 "test" 表中的所有数据
ResultSet rs = stmt.executeQuery("select * from test");
// 遍历结果集
while (rs.next()) {
// 打印每条数据的 "id" 和 "name" 字段
System.out.println(rs.getString("id") + "\t" + rs.getString("name")); -
更新数据。
代码如下:
// 更新 "test" 表中 id 为 1 的记录的 "name" 字段为 'bbb'
stmt.execute("update test set name = 'bbb' where id = 1");
// 打印更新数据成功的消息
System.out.println("update data successfully"); -
删除数据。
代码如下:
// 删除 "test" 表
stmt.execute("drop table test");
// 关闭结果集、语句和数据库连接
rs.close();
stmt.close();
connection.close(); -
异常处理。
执行以上数据库操作的过程中发生任何异常,这些异常将被捕捉,并打印错误信息以及堆栈跟踪详情。
代码如下:
} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
完整的代码展示
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>JDBCDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.mysql</groupId>-->
<!-- <artifactId>mysql-connector-j</artifactId>-->
<!-- <version>8.0.33</version>-->
<!-- </dependency>-->
</dependencies>
</project>
Main.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JDBCTest {
public static void main(String[] args) {
try {
//load driver
Class.forName("com.mysql.jdbc.Driver"); //mysql-jdbc 5
// Class.forName("com.mysql.cj.jdbc.Driver"); //mysql-jdbc 8
//create connection
Connection connection = DriverManager.getConnection("jdbc:mysql://{host}:{port}/{dbname}?user={username}&password={******}");
System.out.println("jdbc version : " + connection.getMetaData().getDriverVersion());
Statement stmt = connection.createStatement();
//create table
stmt.execute("drop table if exists test");
stmt.execute("create table test (id int, name varchar(25))");
System.out.println("create table successfully");
//insert data
stmt.execute("insert into test values (1, 'aaa'),(2, 'bbb')");
System.out.println("insert data successfully");
//query data
System.out.println("query data : ");
ResultSet rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//update data
stmt.execute("update test set name = 'bbb' where id = 1");
System.out.println("update data successfully");
//query data after update
System.out.println("query data after update : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//delete data
stmt.execute("delete from test where id = 1");
System.out.println("delete data successfully");
//query data after delete
System.out.println("query data after delete : ");
rs = stmt.executeQuery("select * from test");
while (rs.next()) {
System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
}
//drop table
stmt.execute("drop table test");
//close
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println("error!");
e.printStackTrace();
}
}
}
最佳实践
批量操作
使用批处理提高性能:
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO test VALUES (?, ?)");
for (int i = 0; i < 1000; i++) {
pstmt.setInt(1, i);
pstmt.setString(2, "name" + i);
pstmt.addBatch();
}
pstmt.executeBatch();
预处理语句
使用预处理语句防止 SQL 注入:
PreparedStatement pstmt = connection.prepareStatement("SELECT * FROM test WHERE id = ?");
pstmt.setInt(1, 1);
ResultSet rs = pstmt.executeQuery();
常见问题
1. 连接超时
配置连接超时参数:
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000
2. 字符集问题
设置正确的字符集:
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true
3. SSL 连接
启用 SSL 连接:
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true
4. 账号密码中的特殊字符
如果账号密码中包含特殊字符(如 #),需要进行 URL 编码:
String encodedPassword = URLEncoder.encode(password, "UTF-8");
使用 MySQL Connector/J 8.x 版本时,账号密码中需避免包含 # 字符,否则可能导致连接失败。
更多信息
创建 Java 示例应用程序的完整示例,参见 Java 示例应用程序。