• [技术干货] 使用JDBC连接数据库
    操作步骤1. 准备连接环境步骤1  修改数据库的pg_hba.conf文件。在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件:<PARAM name="dataNode1" value="/gaussdb/data/db1"/>。cd /gaussdb/data/db1 vi pg_hba.conf输入“:90”找到对应位置,然后输入“i”切换到INSERT模式,将以下内容添加进pg_hba.conf文件,添加后按下“ESC”键,退出INSERT模式,输入“:wq”后回车保存。# IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.0.19/32 trust host all all 0.0.0.0/0 sha256 # IPv6 local connections: host all all ::1/128 trust使用omm用户登陆,使用gs_ctl将策略生效。su - omm gs_ctl reload -D /gaussdb/data/db1/返回结果为:[2020-07-23 15:39:55.398][71828][][gs_ctl]: gs_ctl reload ,datadir is -D "/gaussdb/data/db1" server signaled注:如果之前没有启动过数据库,返回结果如下,继续操作即可:[2021-04-27 17:02:59.640][15354][][gs_ctl]: gs_ctl reload ,datadir is /gaussdb/data/db1 [2021-04-27 17:02:59.640][15354][][gs_ctl]: PID file "/gaussdb/data/db1/postmaster.pid" does not exist [2021-04-27 17:02:59.640][15354][][gs_ctl]: Is server running?步骤2 使用omm用户登陆数据库给dbuser用户授权,并退出数据库。gsql -d postgres -p 26000 -r postgres=# alter role dbuser createrole createdb; ALTER ROLE postgres=# \q步骤3 修改数据库侦听地址。在GS_HOME中,本实验中数据库GS_HOME设置的为/gaussdb/data/db1。cd /gaussdb/data/db1 vi postgresql.conf输入“:60”找到对应位置,然后输入“i”切换到INSERT模式,将listen_addresses的值修改成为*,修改后按下“ESC”键,退出INSERT模式,输入“:wq”后回车保存。#listen_addresses = '192.168.0.19' # what IP address(es) to listen on; listen_addresses = '*'修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)。gs_ctl restart -D /gaussdb/data/db1/步骤4 下载Java连接openGauss的驱动包,并将其导入对应的使用工具。通过以下链接,下载驱动包https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/arm/openGauss-1.1.0-JDBC.tar.gz假设文件存放在d:\Download目录下,并进行解压,解压后文件为“postgresql.jar”。步骤5 创建测试数据库demo。使用gsql工具登陆数据库,并输入dbuser密码(如:Gauss#3demo)。gsql -d postgres -p 26000 -U dbuser -r创建数据库demo。create database demo ENCODING 'UTF8' template = template0;切换到demo数据库,并输入dbuser密码(如:Gauss#3demo)。\connect demo;步骤6 创建名为demo的schema,并设置demo为当前的schema。CREATE SCHEMA demo;将默认搜索路径设为demo。SET search_path TO demo;步骤7 创建测试表websites。CREATE TABLE websites ( id int NOT NULL, name char(20) NOT NULL DEFAULT '', url varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (id) ); COMMENT ON COLUMN websites.name IS '站点名称';步骤8 插入数据。INSERT INTO websites VALUES ('1', 'openGauss', 'https://opengauss.org/zh/'), ('2', '华为云', 'https://www.huaweicloud.com/'), ('3', 'openEuler', 'https://openeuler.org/zh/'), ('4', '华为support中心', 'https://support.huaweicloud.com/');步骤9 退出数据库。\q2. 确定26000端口是否放开步骤1 打开华为云首页,登录后进入“控制台”,点击“弹性云服务器ECS”进入ECS列表。步骤2 在云服务器控制台找到安装数据库主机的ECS,点击查看基本信息,找到安全组。步骤3 点击进入安全组,选择“入方向规则”并“添加规则”,进行26000端口设置。确定后,可以看到入网规则多了“TCP:26000”,如下图:3. 下载并安装JDK 步骤1 下载JDK。https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 步骤2 点击jdk-8u261-windows-x64.exe进行安装。默认设置即可,出现安装进度。如下显示表示安装成功:步骤3 查看安装目录。4. 配置JDK环境变量步骤1 右击“此电脑”选择“属性”,点击“高级系统设置”。步骤2 点击“环境变量”,新建系统变量“JAVA_HOME”,输入JDK安装目录。“C:\Program Files\Java\jdk1.8.0_261”为JDK安装目录。步骤3 编辑系统变量“path”。在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(注意原来Path的变量值末尾有没有;号,如果没有,先输入;号再输入上面的代码)。步骤4 新建系统变量“CLASSPATH”变量,输入“.” 即可。步骤5 系统变量配置完毕,查询检验是否配置成功,运行cmd 输入java -version(java和 -version之间有空格)。C:\Users\xxxxx>java -version如下所示,显示版本信息,则说明安装和配置成功。java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)5. 连接openGauss并执行java代码步骤1 使用Java程序连接数据库并进行查询(注:请用户根据实际情况替换红字内容,修改jdbc:postgresql://弹性公网IP:26000/demo中弹性公网IP信息,USER = "dbuser"连接数据库的用户及密码PASS = "Gauss#3demo")。在d:\Download\中创建openGaussDemo.java文件,文件内容如下,注意红字部分要按照实际情况进行替换:import java.sql.*; public class openGaussDemo { static final String JDBC_DRIVER = "org.postgresql.Driver"; static final String DB_URL = "jdbc:postgresql://弹性公网IP:26000/demo?ApplicationName=app1"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "dbuser"; static final String PASS = "Gauss#3demo"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, url FROM demo.websites"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 System.out.print("ID: " + id); System.out.print(", 站点名称: " + name); System.out.print(", 站点 URL: " + url); System.out.print("\n"); } // 完成后关闭 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){ }// 什么都不做 try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } }步骤2 在安装Java的本机,打开cmd对Java程序编译后执行。在cmd中,进入d:\Download\目录,先对Java程序进行编译(进入Java程序的目录)。D:\Download> javac -encoding utf-8 -cp d:\Download\postgresql.jar openGaussDemo.java再执行以下命令。D:\Download> java -cp .;D:/Download/postgresql.jar openGaussDemo步骤3 执行结果。执行结果如下:连接数据库... 实例化Statement对象... ID: 1, 站点名称: openGauss, 站点 URL: https://opengauss.org/zh/ ID: 2, 站点名称: 华为云, 站点 URL: https://www.huaweicloud.com/ ID: 3, 站点名称: openEuler, 站点 URL: https://openeuler.org/zh/ ID: 4, 站点名称: 华为support中心, 站点 URL: https://support.huaweicloud.com/ Goodbye!
  • [问题求助] 有无JDBC连接数据库的指导文档
    有修改数据库的pg_hba.conf文件和.修改数据库监听地址步骤的。
  • [问题求助] 有无JDBC链接数据库指导文档
    包含修改数据库的pg_hba.conf和修改数据库监听地址步骤的。刚刚学习,找不到什么资料。
  • [开发应用] 【DWS产品】【JDBC驱动数据写入】SparkApp写入数据异常
    【DWS产品】【JDBC驱动数据写入功能】SparkApp写入数据异常【功能模块】GaussDB(DWS)驱动在SparkApp中使用问题【操作步骤&问题现象】1、在同一个DWS库及模式下,现有两张结构相同的表,分别称为表A、表B。其中表A有大约160万行数据2、编写简单的SparkApp,依赖 gsjdbc200.jar(driverClass=com.huawei.gauss200.jdbc.Driver)和 gsjdbc4.jar(driverClass=org.postgresql.Driver)首先使用gsjdbc200.jar作为驱动读取A表数据,得到Dataset实例Dataset ds = sparkSession.read().format("jdbc") .option("url", "jdbc:gaussdb://xx.xxx.xx.xx:8000/dwhm") .option("driver", "com.huawei.gauss200.jdbc.Driver") .option("user", "******") .option("password", "**********") .option("dbtable", "表A") .option("numPartitions", 6) .option("lowerBound", 0) .option("upperBound", 1728454) .option("partitionColumn", "id_column") .option("fetchsize", 1024) .load();然后立即再使用gsjdbc200.jar(driverClass=com.huawei.gauss200.jdbc.Driver)作为驱动,尝试将A表数据写入B表ds.write().format("jdbc") .option("dbtable", "表B") .mode(SaveMode.Overwrite) .option("url", "jdbc:gaussdb://10.2.121.11:8000/dwhm") .option("driver", "com.huawei.gauss200.jdbc.Driver") .option("user", "xxxxxx") .option("password", "**************") .option("truncate", true) .option("batchsize", 500) .save();读取到数据后,在开始执行数据写入task时很快就报出如下异常而失败。java.sql.BatchUpdateException: Batch entry 0 INSERT INTO 表B名称 ("po_process_action_id","tenant_id","po_header_id","po_line_id","po_line_location_id","display_line_num","display_line_location_num","version_num","process_type_code","process_remark","processed_date","process_user_id","process_user_name","object_version_number","creation_date","created_by","last_updated_by","last_update_date","storage_time") VALUES ('1155064','20453','194759',NULL,NULL,NULL,NULL,'1','UPDATE',NULL,'2021-07-11 01:14:21+08','859953','华为接口账号','1','2021-07-11 01:14:21+08','859953','859953','2021-07-11 01:14:21+08','2021-09-27 13:47:06+08') was aborted: ERROR: invalid input syntax for type oid: "" Call getNextException to see other errors in the batch. at com.huawei.gauss200.jdbc.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:152) at com.huawei.gauss200.jdbc.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2584) at com.huawei.gauss200.jdbc.core.v3.QueryExecutorImpl.executeBatch(QueryExecutorImpl.java:575) at com.huawei.gauss200.jdbc.jdbc.PgStatement.executeBatch(PgStatement.java:879) at com.huawei.gauss200.jdbc.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1580) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:654) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:821) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:821) at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:935) at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$29.apply(RDD.scala:935) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2074) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2074) at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) at org.apache.spark.scheduler.Task.run(Task.scala:109) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:345) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: com.huawei.gauss200.jdbc.util.PSQLException: ERROR: invalid input syntax for type oid: "" at com.huawei.gauss200.jdbc.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2852) at com.huawei.gauss200.jdbc.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2583) ... 16 more表B只是普通的行存表,其中 po_process_action_id 为主键。表内没有名为“oid”的用户定义列。如果换用 gsjdbc4.jar(driverClass=org.postgresql.Driver)作为 write 时的驱动,只相应改动 url、driver 两项option,其它代码不做任何改变,则数据写入可以成功,没有任何问题。使用Spark版本为 2.3.2,程序运行于本地笔记本,原意为简单试一下Spark读写DWS再例如下面这个异常也是同样的问题:
  • [其他] GaussDB(DWS) JDBC连接报错和性能问题定位
    1. 建议首先查看定位指南:GaussDB for DWS JDBC问题定位指南2. 检查JDBC的jar包是否正确,查看JDBC包与驱动类有两种JDBC的驱动jar包:gsjdbc4.jar:与PostgreSQL保持兼容的驱动包,其中类名、类结构与PostgreSQL驱动完全一致,曾经运行于PostgreSQL的应用程序可以直接移植到当前系统使用。gsjdbc200.jar:如果同一JVM进程内需要同时访问PostgreSQL及GaussDB(DWS)请使用此驱动包,它的主类名为“com.huawei.gauss200.jdbc.Driver”(即将“org.postgresql”替换为“com.huawei.gauss200.jdbc”),数据库连接的URL前缀为“jdbc:gaussdb”,其余与gsjdbc4.jar相同。注意:如果应用中同时使用开源postgresql-XX.X.X.jar驱动包,请使用gsjdbc200.jar,将主类名修改为“com.huawei.gauss200.jdbc.Driver”,url前缀修改为“jdbc:gaussdb”,避免冲突。3.JDBC的jar包版本判断方法【方法一】在windows上解压,查询META-INF目录下MANIFEST.MF文件内容,其中Version就是对应的版本。若MANIFEST.MF中存在Bundle-Vendor: PostgreSQL Global Development Group则为开源【方法二】步骤1:在linux上解压,其中xxxx是JDBC驱动包文件名jar -xvf xxxx步骤2:查看gs_version版本信息cat META-INF/MANIFEST.MF例如下面是JDBC 8.0.0版本:Manifest-Version: 1.0Ant-Version: Apache Ant 1.10.5Created-By: 1.8.0_232-Huawei_JDK_V100R001C00SPC171B003-b09 (Huawei Tec hnologies Co., Ltd)gs_version: (GaussDB A 8.0.0 build 9edcabca) compiled at 2020-05-06 23 :02:57 commit 7745 last mr 12970如果是开源的postgres的JDBC包,建议更换为DWS的JDBC包防止有性能及未知的问题。3.JDBC的代码示例:常用示例4.JDBC性能问题分析案例【JDBC问题的定位方法】分析JDBC的问题时,我们可以在连接串中打开日志功能,请参考以下URL:jdbc:postgresql://192.168.0.1:8000/test?loggerLevel=TRACE&loggerFile=jdbc.log在日志jdbc.log中可以看到语句执行过程中,JDBC和DWS集群的交互过程。案例一 查询中有大量系统表访问语句集群CPU消耗高在某局点的应用中,业务在执行SQL前,会使用JDBC的接口ResultSetMetaData.getColumnTypeName获取列属性,在jdbc.log日志中可以看到有大量的系统表查询语句。三月 18, 2022 2:28:49 下午 org.postgresql.core.v3.QueryExecutorImpl sendParse非常详细:  FE=> Parse(stmt=null,query="select * from t1 where id = $1",oids={23})……三月 18, 2022 2:28:49 下午 org.postgresql.core.v3.QueryExecutorImpl sendParse非常详细:  FE=> Parse(stmt=null,query="SELECT c.oid, a.attnum, a.attname, c.relname, n.nspname, a.attnotnull OR (t.typtype = 'd' AND t.typnotnull), pg_catalog.pg_get_expr(d.adbin, d.adrelid) LIKE '%nextval(%' FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON (c.relnamespace = n.oid) JOIN pg_catalog.pg_attribute a ON (c.oid = a.attrelid) JOIN pg_catalog.pg_type t ON (a.atttypid = t.oid) LEFT JOIN pg_catalog.pg_attrdef d ON (d.adrelid = a.attrelid AND d.adnum = a.attnum) JOIN (SELECT 16979 AS oid , 1 AS attnum UNION ALL SELECT 16979, 2 UNION ALL SELECT 16979, 3) vals ON (c.oid = vals.oid AND a.attnum = vals.attnum) ",oids={})问题根因:查询为简单语句,走了Light Proxy(CN轻量化),将语句下发给了单个DN去处理,常见的场景过滤条件是分布列的等值查询(Where id = 1),或者向一个DN插入数据的INSERT语句。这种情况,系统表语句中对应的OID都是数据节点的OID,在CN节点上查询没有结果,因此列的元数据信息没有在JDBC的连接中缓存,造成每次访问列信息都去做一次查询。规避方法:关闭enable_light_proxy参数,命令为:gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_light_proxy = off"案例二 调用JDBC的addBatch和executeBatch批量插入数据性能差问题根因:使用的是开源postgresql-XX.X.X.jar驱动包,替换为gsjdbc200.jar后性能恢复案例三 连接报错FATAL: Invalid username/password,login denied.问题根因:使用的是开源postgresql-XX.X.X.jar驱动包,替换为gsjdbc200.jar后连接成功案例四 使用JDBC连接池后,报错Caused by: java.net.SocketException: 打开的文件过多问题根因:连接池的写法存在问题,在Java中反复初始化连接池,建立的物理连接保存在连接池里不断的堆积,最终造成打开文件数过多。解决方案:按照文档正确使用JDBC连接池对象。案例五 使用JBDC的批量模式插入数据,报错字段超长,但报错信息中的Batch entry 0 INSERT INTO不是报错的那条数据。问题根因:没有开启JDBC的批量模式造成报错的数据不是异常的数据。解决方案:在JDBC的连接串中设置batchMode=true后问题解决案例六 使用JDBC执行语句,插入数据量大时报错 Unable to interpret the update count in command completion tag:insert 0 30219884931问题根因:开源PG的JDBC 8.x版本存在该问题,在9.x版本修复。解决方案:升级JDBC驱动版本。案例七 业务报错:Exception in thread "main" org.postgresql.util.PSQLException: ERROR: pooler: Communication failure, failed to send session commands or invalid incoming data, error count: 2.问题根因:JDBC的URL写错,写成currentSchema=db1?useSSL=false,其中db1?useSSL=false解析成schema名字。JDBC将set search_path=jwy_pic?useSSL=false; 语句发送到DN,造成报错退出。解决方案:URL的参数之间的连接使用&,例如currentSchema=db1&useSSL=false。
  • [其他问题] 升级8,.0.0.9补丁后更换jdbc包和gds包,会有一个过程替换,使用以前的8.0.0.1的jdbc包和gds包是否有问题?
    【操作步骤&问题现象】升级8,.0.0.9补丁后更换jdbc包和gds包,整体替换会有一个过程替换,使用以前的8.0.0.1的jdbc包和gds包是否有问题?
  • [其他] 主动预防-DWSJDBC驱动版本判断
    方法一:在windows上解压,查询META-INF目录下MANIFEST.MF文件内容,其中Version就是对应的版本。若MANIFEST.MF中存在Bundle-Vendor: PostgreSQL Global Development Group则为开源方法二:步骤1:在linux上解压,其中xxxx是JDBC驱动包文件名jar -xvf xxxx步骤2:查看gs_version版本信息cat META-INF/MANIFEST.MF例如下面是JDBC 8.0.0版本:Manifest-Version: 1.0Ant-Version: Apache Ant 1.10.5Created-By: 1.8.0_232-Huawei_JDK_V100R001C00SPC171B003-b09 (Huawei Tec hnologies Co., Ltd)gs_version: (GaussDB A 8.0.0 build 9edcabca) compiled at 2020-05-06 23 :02:57 commit 7745 last mr 12970若JDBC驱动版本为开源版本请及时更新dws自带驱动防止造成未知问题!!
  • [技术干货] sqllite-jdbc-3.7.2移植
    sqllite-jbdc移植
  • [对接系列] 【项目实践--对接系列汇总】GaussDB(DWS)项目实践--对接系列汇总贴,欢迎大家交流探讨(持续更新中)
    GaussDB(DWS)项目实践--对接系列文章汇总,请大家阅读鉴赏,欢迎在评论区交流探讨~序号主题分类标题链接1对接系列python3 通过JDBC连接dwshttps://bbs.huaweicloud.com/forum/thread-170870-1-1.html2对接系列DWS使用.net驱动对接powerBIhttps://bbs.huaweicloud.com/forum/thread-133293-1-1.html3对接系列GaussDB(DWS)试用过程https://bbs.huaweicloud.com/forum/thread-130923-1-1.html4对接系列DWS Power BI对接指导https://bbs.huaweicloud.com/forum/thread-120839-1-1.html5对接系列Informatica10.2与GaussDB A对接https://bbs.huaweicloud.com/forum/thread-119448-1-1.html6对接系列AIX服务器安装psql工具连接GaussDB DWShttps://bbs.huaweicloud.com/forum/thread-119444-1-1.html7对接系列GaussDB(DWS)与ADB(MySQL)的差异https://bbs.huaweicloud.com/forum/thread-119443-1-1.html8对接系列Cognos11.0.12 对接GaussDB Ahttps://bbs.huaweicloud.com/forum/thread-119437-1-1.html9对接系列使用DWS访问存算分离的MRS集群的数据https://bbs.huaweicloud.com/forum/thread-117770-1-1.html10对接系列【融合对接】DWS和Hadoop互联互通--读取hdfs数据和将数据写入hdfshttps://bbs.huaweicloud.com/forum/thread-113331-1-1.html11对接系列Gauss DB(DWS)对接系列-BI工具BIP对接https://bbs.huaweicloud.com/forum/thread-109303-1-1.html12对接系列GaussDB(DWS)与Kettle对接指导https://bbs.huaweicloud.com/forum/thread-104549-1-1.html13对接系列GaussDB(DWS)与OGG对接https://bbs.huaweicloud.com/forum/thread-102196-1-1.html14对接系列GAUSSDB(DWS)对接OBIEE指导https://bbs.huaweicloud.com/forum/thread-102193-1-1.html15对接系列JDBC 对接 GaussDB(DWS)的数据库连接问题https://bbs.huaweicloud.com/forum/thread-101725-1-1.html16对接系列DWS的ODBC常用配置https://bbs.huaweicloud.com/forum/thread-85432-1-1.html17对接系列SQL ON HADOOP外表HIVE分区字段没有数据https://bbs.huaweicloud.com/forum/thread-81760-1-1.html18对接系列s环境下配置odbc数据源https://bbs.huaweicloud.com/forum/thread-74411-1-1.html19对接系列GaussDB(DWS)常见问题之session_timeout设置导致JDBC业务报错https://bbs.huaweicloud.com/forum/thread-72614-1-1.html20对接系列GaussDB(DWS)字符串数据类型与oracle对比https://bbs.huaweicloud.com/forum/thread-70762-1-1.html21对接系列GaussDB(DWS) 【如何在JDBC连接DWS时设置(set)guc参数】https://bbs.huaweicloud.com/forum/thread-70729-1-1.html22对接系列使用Navicat连接数据库报错,none of server&apos;s SASL authentication mechainismhttps://bbs.huaweicloud.com/forum/thread-69095-1-1.html23对接系列使用CopyManager实现数据导入导出https://bbs.huaweicloud.com/forum/thread-68767-1-1.html24对接系列DataStage 通过JDBC驱动向GaussDB 200插入数据报错https://bbs.huaweicloud.com/forum/thread-67415-1-1.html25对接系列主流Web中间件与GaussDB(DWS) 对接介绍https://bbs.huaweicloud.com/forum/thread-64750-1-1.html
  • [数据编排] 数据流含JDBC加载时,调测报错
    【功能模块】删除JDBC加载后,调测正常。【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [开发应用] JDBC连接Gaussdb DWS
    jdbc连接报错:Invalid or unsupported by client SCRAM mechanisms。怎么解决?
  • [问题求助] 【openGauss】openGauss的JDBC连接,是只支持drivermanager,不支持datasource?
    openGauss的JDBC连接,是只支持drivermanager,不支持datasource的吗?
  • [问题求助] 【openGauss】java用jdbc连openGauss,出现报错
    java用jdbc连openGauss,出现报错:Unsupported major.minor version 52.0 (无法载入的.类 [org.postgresql.Driver])是什么原因?环境:java jdk是1.7 Tomcat用的8.x版本
  • [技术干货] 使用JDBC进行openGauss的读写分离及负载均衡
    读写分离读写分离是什么读写分离顾名思义,就是将读操作和写操作分离开来,形成一种主备的结构,主机负责写操作,从机负责读操作。openGauss数据库组装成集群并使用JDBC连接时,支持一主多备情况下的读写分离,当URL中配置服务器地址时,可以通过URL中的属性标示来区分JDBC返回的连接是否是区分主机和备机。优越特性自动寻主读写分离一定程度上依赖主机的识别,这里会介绍openGauss数据库的自动寻主机制。openGauss数据库应用场景下,典型配置为一主两备。当主机宕机后,备机会升主,这时和旧主机相连的连接都会失效,所以为了能够让业务以最快的速度恢复使用,我们在驱动层设计一种“自动寻主”的机制,该机制可以找到主备切换后的主机,并且整个寻主过程对于上层应用来说是透明的,上层应用的开发人员不需要自动寻主的具体细节,只需做上一定适配即可实现业务的高可用。性能提升对比PostgreSQL 的读写分离,PostgreSQL 在数据库资源占用超过85%时,查询数据库情况语句会出现失效,针对这一问题我们做了优化。查询语句修改为select local_role, db_state from pg_stat_get_stream_replications();有效的避免了PostgreSQL 在读写分离方面出现的问题。相关参数hostRecheckSeconds参数,Integer类型,因为JDBC尝试连接主机后会保存主机状态:连接成功或连接失败,所以这个参数就是用于设置在主机状态发生更改时再次检查主机状态的时间段,默认的时间是10秒。运作流程读写分离流程第一步,设置参数开启targetServerType=master。第二步,判断输入的主机列表是否已经加入了候选主机列表中,如果不存在hostStatusMap中并且更新时间间隔超过10s同时HostStatus状态也和现在一致,这时直接加入候选主机列表。第三步,对列表进行遍历查找对应的节点信息,如果找到了,通过konwnStatus查看状态是否一致,一致就执行sql查询语句,之后更新全局变量hostStatusMap及局部变量konwnStatus中存储。第四步,当前操作的节点状态如果与用户选择的节点状态一致则返回主机连接,之后用户可以根据连接进行读或者写操作。负载均衡jdbc负载均衡是什么jdbc负载均衡简单来说就是将所有的连接均衡的分摊到多个数据库上面,借此达到减轻单个数据库的数据处理压力从而提高整体的性能的一种方式。但是要注意一点,openGauss的负载均衡是能进行读操作使用,所以在只读时开启时是没有问题的,但如果有写操作的话,因为负载均衡不会考虑主备的区别,所以会让从机进行读操作,这时会报错。独有特性jdbc负载均衡负载均衡是现在很常用的均衡每个服务器性能的处理手段,像我们常见的Nginx的负载均衡,很少会有人在驱动上面直接进行负载均衡。从实际的效果的来看,在开启负载均衡后整体的性能并没有下降,但是因为连接打到了多个不同的数据库上面,整体的处理效率得到了显著的提升。虽然看上去和传统的负载均衡达到的效果差不多,但是对比传统的通过额外的一台机器做负载均衡比起来,我们有着独特的优势。首先我可以通过配置参数开启负载均衡并设置 我们想要的主机列表,这一点上面操作就会比较简单。其次节约了成本,不在需要另外一个机器专门进行负载均衡。并且还具备故障隔离,当某个数据库故障后,负载均衡可以感知到故障,并自动停止向故障数据库节点转发请求。负载均衡的参数设置loadBalanceHosts:在默认模式下(禁用),顺序连接URL中指定的多个数据库。如果启用,则使用洗牌算法从候选主机列表中随机选择一个主机建立连接。洗牌算法(Shuffle)这里使用了collections类中自带的shuffle方法来实现随机的建立连接,名称叫做洗牌算法,所以它就和洗牌一样会把原有的数据库列表顺序打乱,就像洗牌一样。方法的实现大概就是从前往后遍历列表重复的随机选择一个元素交换到当前遍历到的位置。等遍历一遍结束后,我们就会得到一个乱序的数据库列表。优点:调用现有的Java接口,实现简单并且效果显著。运作流程负载均衡流程第一步,设置参数,在url后面拼接loadBalanceHosts参数,其为true时会开启负载均衡,默认是不开启的。第二步,JDBC连接数据库,通过解析url获取可连接的数据库列表第三步,根据洗牌算法获得的数据库列表来,用来调整接下来要连接的数据库。
  • [技术干货] 常见的JDBC组件
    JDBC API是一个Java API可以访问任何类型的表格格式数据,存储在一个关系数据库尤其是数据。JDBC API提供了以下接口和类DriverManager: 这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。Driver: 此接口处理与数据库服务器通信。很少直接与驱动程序对象。相反,使用DriverManager中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。Statement : 可以使用这个接口创建的对象的SQL语句提交到数据库。一些派生的接口接受除执行存储过程的参数。ResultSet: 这些对象保存从数据库后,执行使用Statement对象的SQL查询中检索数据。它作为一个迭代器,让您可以通过移动它的数据。SQLException: 这个类处理发生在一个数据库应用程序的任何错误。