目录

数据库实验九-OpenGauss使用JDBC连接数据库

数据库实验九–OpenGauss(使用JDBC连接数据库)

实验要求

了解如何使用JDBC连接数据库。JDBC(Java Database Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问接口,应用程序可基于它操作数据。openGauss库提供了对JDBC 4.0特性的支持,需要使用JDK1.8版本编译程序代码。

完成以下内容:

  1. 在openGauss中创建数据库、表;
  2. 使用jdbc连接到新创建的数据库;
  3. 在java程序中改变数据库中的值或者输出数据库中的值;
  4. 请参考华为提供的实验手册:openGauss场景化综合应用实验。

使用JDBC连接数据库

在OpenGauss中创建数据库、表请参考之前的实验。

本实验选用JDBC为1.1.0版本

解压后,把 postgresql.jar 导入到我们要编写的java项目里。( ctrl+alt+shift+s 导入jar包)

https://i-blog.csdnimg.cn/blog_migrate/2fc81987f5e3569556905f69a346233b.png https://i-blog.csdnimg.cn/blog_migrate/87f7322032063600e42bf3058fc56102.png lib为在实验九项目下新建的目录,导入后完整项目结构如上图。

注意:远程登录不允许使用omm用户

我们需要重新新建一个用户。同时需要授予新用户权限:

https://i-blog.csdnimg.cn/blog_migrate/ab18d615e66a3f84bda1eb0cda5e083a.png

https://i-blog.csdnimg.cn/blog_migrate/0e395d0dd8751186374f4a70e032a60f.png

接着我们要配置客户端接入认证,运行远程连接(这步要退出openGauss,在命令行执行)

例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。

    gs_guc set -N all -I all -h "host all shiyanjiu 10.10.0.30/32 sha256"

本机ip是指物理机ip,在自己的windows上打开cmd输入 ipconfig 查看ipv4地址。这一步是为了让自己的物理机能够连接到虚拟机中的数据库。

https://i-blog.csdnimg.cn/blog_migrate/5c1f9ffb5b948c474b3f124215e428a0.png

另外,我们还需修改 postgresql.confpg_hba.conf 文件。

此文件位于 postgresql 数据文件目录中,默认为 /var/lib/pgsql/data/ 。将 postgresql.conf 修改如下: listen_addresses = '*'

pg_hba.conf 中增加需要连接该数据库主机的ip地址。如下所示,增加对主机 0.0.0.0 的信任。

host    all             all             0.0.0.0/0         sha256

先使用find命令查找文件地址(不连接数据库,登陆root账户,并且用 cd / 返回根目录)

find -name postgresql.conf

https://i-blog.csdnimg.cn/blog_migrate/ca06c6440df8b31570cb4fa51f6fab20.png https://i-blog.csdnimg.cn/blog_migrate/4e8c814f94f62acbd94a985514c1d4b0.png

用vi修改:

vi postgresql.conf

进入vi后先按i进入插入模式,找到 listen_addresses ,修改

https://i-blog.csdnimg.cn/blog_migrate/4c13efb3373d60f5926610018f0e1154.png

esc ,之后按 :wq 保存退出

这样第一个文件就修改完了。

同样的方法修改第二个文件 pg_hba.conf

https://i-blog.csdnimg.cn/blog_migrate/530472dd0f44fdca357426c3469722bb.png

https://i-blog.csdnimg.cn/blog_migrate/6b1a4e9a85ebd62c0209166a96285adc.png

运行java代码:

package opengauss;

import java.sql.*;

public class connectsql {

    //以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。
    public  static Connection getConnect(String username, String passwd)
    {
        //驱动类。
        String driver = "org.postgresql.Driver";
        //数据库连接描述符。
        String sourceURL = "jdbc:postgresql://192.168.56.124:26000/postgres";
        Connection conn = null;

        try
        {
            //加载驱动。
            Class.forName(driver);
        }
        catch( Exception e )
        {
            e.printStackTrace();
            return null;
        }

        try
        {
            //创建连接。
            conn = DriverManager.getConnection(sourceURL, username, passwd);
            System.out.println("Connection succeed!");
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }

        return conn;
    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        new connectsql();
        connectsql.getConnect("shiyanjiu","openGauss@123");

    }

}

连接成功

https://i-blog.csdnimg.cn/blog_migrate/7d936f3cc9f6953ad23ed120aa5a6254.png

执行查询

我们现在来查询sc表,首先要把sc表的权限给 shiyanjiu 用户

https://i-blog.csdnimg.cn/blog_migrate/c983315dc97e987f0420a5ac49bfec7a.png

GRANT ALL PRIVILEGES ON sc TO shiyanjiu;

之后修改java代码

package opengauss;

import java.sql.*;

public class connectsql {

    //以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。
    public  static Connection getConnect(String username, String passwd)
    {
        //驱动类。
        String driver = "org.postgresql.Driver";
        //数据库连接描述符。
        String sourceURL = "jdbc:postgresql://192.168.56.124:26000/db_cc";
        Connection conn = null;

        try
        {
            //加载驱动。
            Class.forName(driver);
        }
        catch( Exception e )
        {
            e.printStackTrace();
            return null;
        }

        try
        {
            //创建连接。
            conn = DriverManager.getConnection(sourceURL, username, passwd);

            Statement stmt = null;
            // 执行查询
            stmt = conn.createStatement();
            String sql;
            sql = "select * from SC;";
            ResultSet rs = stmt.executeQuery(sql);

            // 展开结果集数据库
            while(rs.next()){
                // 通过字段检索
                String sno = rs.getString("sno");
                String cno = rs.getString("cno");
                int grade = rs.getInt("grade");

                // 输出数据
                System.out.print("sno: " + sno);
                System.out.print("cno: " + cno);
                System.out.print("grade: " + grade);
                System.out.print("\n");
            }
            // 完成后关闭
            rs.close();
            stmt.close();
            conn.close();


            System.out.println("Connection succeed!");
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }

        return conn;
    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        new connectsql();
        connectsql.getConnect("shiyanjiu","openGauss@123");

    }

}

运行:

https://i-blog.csdnimg.cn/blog_migrate/345b36b5b8e15c3b935f16b3dab987f1.png