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

Java驱动之JDBC远程连接到MogDB

原创 言笑 2024-10-18
272

引言

MogDB是一款商业版关系型数据库管理系统,它提供了强大的功能和性能,可以满足各种企业级应用的需求。与此同时,JDBC(Java Database Connectivity)是Java语言中用于连接和操作关系型数据库的标准API。它提供了一组接口和类,使得Java程序可以通过标准的SQL语句来访问和操作关系型数据库。本文将介绍如何在银河麒麟桌面操作系统进行MogDB的JDBC数据源配置。

环境准备

虚拟机:VMware 17 pro
架构:x86_64
源端系统:OpenKylin 1.0.1 (https://www.openkylin.top/downloads/index-cn.html)
JDK:JDK8 (https://www.oracle.com/java/technologies/downloads/#java8)
驱动:openGauss-3.0.3-JDBC (https://opengauss.org/zh/download/archive/)
目标端数据库版本:MogDB 3.0.3

配置实践

1.安装JDK

上传JDK8软件包到服务器并解压到/home/lukai/jdk8
mkdir ~/jdk8
tar -zxvf jdk-8u361-linux-x64.tar.gz -C ~/jdk8/

#配置环境变量
echo 'export JAVA_HOME=/home/lukai/jdk8/jdk1.8.0_361
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH'>>~/.bashrc

source ~/.bashrc

#验证
java -version

image.png

2.配置opengauss的JDBC相关驱动

image.png
上传到openkylin服务器后解压到家目录下的openGauss_JDBC_LIB文件夹下

cd ~
mkdir openGauss_JDBC_LIB
tar -zxvf openGauss-3.0.3-JDBC.tar.gz -C openGauss_JDBC_LIB
lukai@OpenKylin:~/jdk8/jdk1.8.0_361/lib$ cd ~/openGauss_JDBC_LIB/
lukai@OpenKylin:~/openGauss_JDBC_LIB$ ll
总用量 1688
drwxrwxr-x  2 lukai lukai   4096 10月 23 17:43 ./
drwxr-xr-x 38 lukai lukai   4096 10月 23 17:39 ../
-rw-------  1 lukai lukai 844852 1月  10  2023 opengauss-jdbc-3.0.0.jar
-rw-------  1 lukai lukai 845892 1月  10  2023 postgresql.jar
-rw-------  1 lukai lukai   6925 1月  10  2023 README_cn.md
-rw-------  1 lukai lukai   8998 1月  10  2023 README_en.md

3.编写java文件

vi a.java
import java.sql.*;
import org.postgresql.Driver;
public class a {

    static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String DB_URL = "jdbc:postgresql://192.168.57.130:15400/postgres";
    static final String USER = "lukai";//数据库用户名
    static final String PASS = "Enmotech@123";//数据库密码
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try{
            // 注册 JDBC 驱动
            Class.forName(JDBC_DRIVER);

            // 打开链接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // DDL-CREATE
            stmt = conn.createStatement();
            String sql;
            sql = "CREATE TABLE lk_jdbc_test(id int primary key, col1 varchar(8))";
            boolean i = stmt.execute(sql);
            if (i ) System.out.println(sql + "表已经创建成功!");

            // DML-INSERT
            stmt = conn.createStatement();
            sql = "INSERT INTO lk_jdbc_test VALUES (1,'lu'),(2,'kai')";
            stmt.executeUpdate(sql);
            System.out.println(sql + "已经创建成功!");

            // DML-DELETE
            stmt = conn.createStatement();
            sql = "DELETE FROM lk_jdbc_test WHERE ID=2";
            stmt.executeUpdate(sql);
            System.out.println(sql + "已经创建成功!");

            // DML-UPDATE
            stmt = conn.createStatement();
            sql = "UPDATE lk_jdbc_test SET ID=3 WHERE ID=1";
            stmt.executeUpdate(sql);
            System.out.println(sql + "已经创建成功!");

                        
            // DQL
            stmt = conn.createStatement();
            sql = "SELECT * from lk_jdbc_test";
            ResultSet rs = stmt.executeQuery(sql);
      
            // 展开结果集数据库
	    System.out.printf("%-10s%-10s","id","col1");
	    System.out.println();
            while(rs.next()){
                // 通过字段检索
                int id = rs.getInt("id");
                String col1 = rs.getString("col1");

                // 输出数据
                System.out.printf("%-10d",id);
                System.out.printf("%-10s",col1);
                System.out.println();
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();
        }catch(SQLException se){
            // 处理 JDBC 错误
            se.printStackTrace();
        }catch(Exception e){
            // 处理 Class.forName 错误
            e.printStackTrace();
        }finally{
            // 关闭资源
            try{
                if(stmt!=null) stmt.close();
            }catch(SQLException se2){
                se2.printStackTrace();
            }
            try{
                if(conn!=null) conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
    }
}

4.编译java文件

lukai@OpenKylin:~/openGauss_JDBC_LIB$ pwd
/home/lukai/openGauss_JDBC_LIB

#-cp 后接参数指定依赖库搜索路径,多路径用冒号分割(windos用分号分割)
lukai@OpenKylin:~/openGauss_JDBC_LIB$ javac -cp ./postgresql.jar: a.java

5.数据库服务端配置

gs_om -t start

#添加openkylin所在主机ip
gs_guc reload -N all -I all -h "host all all xx.xx.xx.xx/32 md5"

gs_guc reload -N all -I all -c "listen_addresses='*'"

#创建lukai用户
gsql>create user lukai with password 'Enmotech@123';
gsql>grant all privileges to lukai;

6.运行java文件

lukai@OpenKylin:~/openGauss_JDBC_LIB$ java -cp ./postgresql.jar: a 
十月 23, 2023 10:12:25 上午 org.postgresql.core.v3.ConnectionFactoryImpl openConnectionImpl
信息: [68eb4bba-a730-43a2-b47b-fee067abeec1] Try to connect. IP: 192.168.57.130:15400
十月 23, 2023 10:12:25 上午 org.postgresql.core.v3.ConnectionFactoryImpl openConnectionImpl
信息: [192.168.57.118:58082/192.168.57.130:15400] Connection is established. ID: 68eb4bba-a730-43a2-b47b-fee067abeec1
十月 23, 2023 10:12:25 上午 org.postgresql.core.v3.ConnectionFactoryImpl openConnectionImpl
信息: Connect complete. ID: 68eb4bba-a730-43a2-b47b-fee067abeec1
INSERT INTO lk_jdbc_test VALUES (1,'lu'),(2,'kai')已经创建成功!
DELETE FROM lk_jdbc_test WHERE ID=2已经创建成功!
UPDATE lk_jdbc_test SET ID=3 WHERE ID=1已经创建成功!
id        col1      
3         lu        

-cp 后接参数指定依赖库搜索路径,多路径用冒号分割(windos用分号分割),且在运行文件时即使只有一个搜素路径也需要加上分隔符

实验总结

JDBC连接成功后可以使用JDBC提供的一组标准的接口函数来执行SQL查询和操作。
通过使用JDBC接口,可以在MogDB中实现高效的数据访问和跨平台连接。这种灵活性和可扩展性使得MogDB与ODBC的结合成为了开发企业级应用和在多平台上连接数据库的理想选择。

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

评论