马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
毗连数据库
在创建数据库毗连之后,才能利用它来执行SQL语句操纵数据。
函数原型
JDBC提供了三个方法,用于创建数据库毗连。
- DriverManager.getConnection(String url)
- DriverManager.getConnection(String url, Properties info)
- DriverManager.getConnection(String url, String user, String password)
参数
表1 数据库毗连参数 参数
形貌
url
gaussdbjdbc.jar数据库毗连形貌符。
host为服务器名称或IPv4时,格式如下:
- jdbc:gaussdb
数据库名称缺省则与用户名一致)
- jdbc:gaussdb:database
- jdbc:gaussdb://host/database
- jdbc:gaussdb://host:port/database
- jdbc:gaussdb://host:port/database?param1=value1¶m2=value2
- jdbc:gaussdb://host1:port1,host2:port2/database?param1=value1¶m2=value2
host为IPv6时,格式如下:
- jdbc:gaussdb
数据库名称缺省则与用户名一致)
- jdbc:gaussdb:database
- jdbc:gaussdb://host/database 或 jdbc:gaussdb://[host]/database
- jdbc:gaussdb://[host]:port/database
- jdbc:gaussdb://[host]:port/database?param1=value1¶m2=value2
- jdbc:gaussdb://[host1]:port1,[host2]:port2/database?param1=value1¶m2=value2
阐明:
- database为要毗连的数据库名称。
- host为数据库服务器名称或IP地点,同时支持IPv4和IPv6。 由于安全缘故原由,数据库CN禁止集群内部其他节点无认证接入。如果要在集群内部访问CN,请将JDBC步伐摆设在CN所在机器,host利用"127.0.0.1"。否则大概会出现“FATAL: Forbid remote connection with trust method!”错误。
发起业务系统单独摆设在集群外部,否则大概会影响数据库运行性能。
缺省情况下,毗连服务器为localhost。
- port为数据库服务器端口。 缺省情况下,会尝试毗连到5432端口的database。
- 当host为IPv6且在url中指定port时,必要通过“[]”分隔IP,如:[IP]:port。
- param为参数名称,即数据库毗连属性。 参数可以配置在URL中,以“?”开始配置,以“=”给参数赋值,以“&”作为不同参数的隔断。也可以采用info对象的属性方式举行配置,详情见示例。
- value为参数值,即数据库毗连属性值。
- 毗连时需配置connectTimeout,socketTimeout,如果未配置,默以为0,即不会超时。在DN与客户端出现网络故障时,客户端不停未收到DN侧ACK确认报文,会启动超时重传机制,不断的举行重传。当超时时间达到系统默认的600s后才会报超时错误,这会导致RTO时间较高。
- 发起利用JDBC标准接口创建毗连时,确保url格式的合法性,不合法的url会导致异常,且异常中包罗原始url字符串,大概造成敏感信息泄漏。
info
数据库毗连属性(全部属性巨细写敏感)。常用的属性如下:
- PGDBNAME:String范例。表示数据库名称(URL中无需配置该参数,自动从URL中分析)。
- PGHOST:String范例。主机IP地点,同时支持IPv4和IPv6。若配置多个CN,它们的IP和端口用“:”分隔,并作为团体以逗号分隔其他CN(URL中无需配置该参数,自动从URL中分析)。详情见示例。
- PGPORT:Integer范例。主机端口号。若配置多个CN,它们的端口号和IP用":"分割,并作为团体以逗号分隔其他CN(URL中无需配置该参数,自动从URL中分析)。详情见示例。
- user:String范例。表示创建毗连的数据库用户。
- password:String范例。表示数据库用户的暗码。
- enable_ce:String范例。其中enable_ce=1表示JDBC支持密态等值查询基本本事,enable_ce=3仅支持密态等值查询本事。
- key_info:String范例。与enable_ce一起利用,在密态数据库中,用于设置访问外部密钥管理者的参数。
- refreshClientEncryption:String范例。缺省值为NULL。其中refreshClientEncryption=1表示密态数据库支持客户端缓存刷新(默认值为1)。
- loggerLevel:String范例。缺省值为NULL,不启用。现在支持4种级别:OFF、INFO、DEBUG、TRACE。设置为OFF关闭日志。设置为INFO、DEBUG和TRACE记录的日志信息详细程度不同。
- loggerFile:String范例。用于指定日志输出路径(目录和文件名)。必要明确指定日志目录和文件名,若未指定目录则会在客户端运行步伐目录下生成日志文件。若不配置或配置的路径不存在,则日志会默认通过流输出。此参数已废弃,不再生效,仅在开启毗连监控功能时用于指定输出监控日志路径,如需将JDBC日志输出到指定路径,可通过 java.util.logging 属性文件或系统属性举行配置。
- logger:String范例。表示JDBC Driver要利用的日志输出框架。JDBC Driver支持对接用户应用步伐利用的日志输出框架。现在支持的第三方日志输出框架只有基于Slf4j-API的日志框架。具体利用方式,请拜见6.2.9日志管理。
- 如果缺省或设置为JDK LOGGER,则JDBC Driver利用JDK LOGGER。
- 否则必须设置采用基于slf4j-API 第三方日志框架。
- allowEncodingChanges:Boolean范例,缺省值为false。设置该参数值为true举行字符集范例更改,共同characterEncoding设置字符集,二者利用“&”分隔;characterEncoding取值范围为UTF8、GBK、LATIN1、GB18030、GB18030_2022、ZHS16GBK。例:allowEncodingChanges=true&characterEncoding=UTF8。阐明: ZHS16GBK字符集支持欧元符号。如果要显示欧元符号,请将字符集设置为ZHS16GBK。
- currentSchema:String范例。在search-path中指定要设置的schema。如果schema名包罗除字母、数字、下划线之外的特殊字符,发起在schema名上加引号,注意加引号后schema名巨细写敏感。如需配置多个schema,要用“,”举行分隔,包罗特殊字符的schema也必要加引号处置惩罚。 例如:currentSchema=schema_a、"schema-b"、"schema/c"。
- loadBalanceHosts:Boolean范例。在默认模式下(禁用),次序毗连URL中指定的多个主机。如果启用,则利用洗牌算法从候选主机中随机选择一个主机创建毗连。
- autoBalance:String范例。
- 设置为true、balance或roundrobin表示开启JDBC负载均衡功能,将应用步伐的多个毗连均衡到数据库集群中的各个可用CN。 例如:jdbc:gaussdb://host1:port1,host2:port2/database?autoBalance=true
JDBC将定期获取(周期刷新可利用参数refreshCNIpListTime配置,默以为10秒)整个集群可用CN列表(CN列表中获取的host是数据IP),比如获取到的列表为:host1:port1,host2:port2,host3:port3,host4:port4。
host1和host2在autoBalance启用时,仅在首次毗连做高可用用途,后续Driver将从host1、host2、host3和host4中依次选择可用的CN刷新可用CN列表,后续用户新建的connection将利用RoundRobin算法从host1、host2、host3和host4选取CN主机举行毗连。
- 设置为priorityn表示开启JDBC优先级负载均衡功能,将应用步伐的多个毗连起首均衡到url上配置的前n个中可用的CN数据库节点。当url上配置前n个节点全部不可用时,毗连会随机分配到数据库集群中其他可用CN数据库节点。n为数字,不小于0,且小于url上配置的CN数量。当parseCandidatesByDomain设置为true时,priorityn的优先级配置不生效,这种场景下的优先级利用priorityDomains参数配置。利用priorityn做负载均衡时,host不能利用IPv6。 例如:jdbc:gaussdb://host1:port1,host2:port2,host3:port3,host4:port4/database?autoBalance=priority2
JDBC将定期获取(周期按refreshCNIpListTime界说)整个集群可用CN列表,比如获取到的列表为:host1:port1,host2:port2,host3:port3,host4:port4,host5:port5,host6:port6,其中host1和host2处于AZ1,host3和host4处于AZ2。
Driver将优先从host1、host2中做负载均衡,host1和host2全部不可用才从host3、host4、host5和host6中随机选择CN主机毗连。
- 设置为shuffle表示开启JDBC随机负载均衡功能,将应用步伐的多个毗连随机均衡到数据库集群中的各个可用CN。 例如:jdbc:gaussdb://host1:port1,host2:port2,host3:port3/database?autoBalance=shuffle
JDBC将定期获取(周期刷新可利用参数refreshCNIpListTime配置,默以为10秒)整个集群的可用CN列表,比如获取到的列表为:host1:port1,host2:port2,host3:port3,host4:port4。
host1:port1,host2:port2,host3:port3,仅在首次毗连做高可用,后续毗连将在刷新后的CN列表中,利用shuffle算法随机选用一个CN节点举行毗连。
- 设置为specified表示开启JDBC负载均衡功能,并且只在用户url中指定的节点上创建毗连。 例如:jdbc:postgresql://host1:port1,host2:port2,host3:port3,host4:port4/database?autoBalance=specified&priorityServers=2
JDBC将辨认用户指定host1、host2为用户指定主集群中创建毗连的节点,host3、host4为备集群指定创建毗连的节点。创建毗连时,起首在host1、host2上均匀创建毗连,全部故障时不会在集群剩余节点上创建毗连。备节点升主后,在host3、host4上均匀创建毗连,全部故障时不会在集群剩余节点上创建毗连。
- 设置为false,不开启JDBC负载均衡功能和优先级负载均衡功能。默以为false。注意:
- 负载均衡是基于毗连级别,不是基于事务级别。如果毗连是长毗连,并且毗连上的负载不均衡,无法保证CN主机上的负载均衡。
- 负载均衡仅能在分布式场景下利用,集中式环境中不可利用。
- 如果在毗连容灾集群时开启了负载均衡功能,那么查询哀求会发送到主集群上,导致查询性能会受到影响。
- 在开启负载均衡时,URL中可以配置浮动IP或数据IP,如果配置为浮动IP,系统会根据浮动IP获取对应的数据IP,通过获取的数据IP做负载均衡。因此URL中配置浮动IP或数据IP时,都必要确保数据IP网络毗连正常,否则负载均衡功能异常。
- refreshCNIpListTime:Integer范例。JDBC定期检测数据库集群中CN状态,获取可用CN的IP列表的时间隔断,默以为10秒。
- hostRecheckSeconds:Integer范例。JDBC尝试毗连主机后会生存主机状态:毗连乐成或毗连失败。在hostRecheckSeconds时间内保持可信,超过则状态失效。缺省值是10秒。
- ssl:Boolean范例。以SSL方式毗连。 ssl=true可支持NonValidatingFactory通道和利用证书的方式:
1、NonValidatingFactory通道必要配置用户名和暗码,同时将SSL设置为true。
2、配置客户端证书、密钥、根证书,将SSL设置为true。
- sslmode:String范例。SSL认证方式。取值范围为:disable、allow、prefer、require、verify-ca、verify-full。
- disable:不利用SSL安全毗连。
- allow:如果数据库服务器要求利用,则可以利用SSL安全加密毗连,但不验证数据库服务器的真实性。
- prefer:如果数据库支持,那么首选利用SSL毗连,但不验证数据库服务器的真实性。
- require只尝试SSL毗连,不会检查服务器证书是否由受信托的CA签发,且不会检查服务器主机名与证书中的主机名是否一致。
- verify-ca只尝试SSL毗连,并且验证服务器是否具有由可信托的证书机构签发的证书。
- verify-full只尝试SSL毗连,并且验证服务器是否具有由可信托的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。
- sslcert:String范例。提供证书文件的完整路径。客户端和服务端证书的范例为End Entity。
- sslkey:String范例。提供密钥文件的完整路径。如果客户端证书不是DER格式,利用时将客户端证书转换为DER格式,生成方式请拜见毗连数据库(以SSL方式)章节。
- sslrootcert:String范例。SSL根证书的文件名。根证书的范例为CA。
- sslpassword:String范例。提供给ConsoleCallbackHandler利用。
- sslpasswordcallback:String范例。SSL暗码提供者的类名。缺省值:com.huawei.gaussdb.jdbc.ssl.jdbc4.LibPQFactory.ConsoleCallbackHandler。
- sslfactory:String范例。提供的值是SSLSocketFactory在创建SSL毗连时用的类名。
- sslprivatekeyfactory: String范例。提供的值是实现私钥解密方法的接口com.huawei.gaussdb.jdbc.ssl.PrivateKeyFactory的实现类的完整限定类名。如果不提供,起首尝试默认的jdk私钥解密算法,如果无法解密,则利用com.huawei.gaussdb.jdbc.ssl.BouncyCastlePrivateKeyFactory,用户必要提供bcpkix-jdk15on.jar包,版本发起:1.65以上。
- sslfactoryarg:String范例。此值是sslfactory类的构造函数的可选参数(不推荐利用该参数)。
- sslhostnameverifier:String范例。主机名验证步伐的类名。接口实现javax.net.ssl.HostnameVerifier,默认利用com.huawei.gaussdb.jdbc.ssl.PGjdbcHostnameVerifier。
- loginTimeout:Integer范例。指创建数据库毗连的等待时间。超时时间单位为秒。当url配置多IP时,若获取毗连花费的时间超过此值,则毗连失败,不再尝试后续IP。缺省值为0,表示禁用。
- connectTimeout:Integer范例。用于毗连服务器操纵的超时值。如果毗连到服务器花费的时间超过此值,则毗连断开。超时时间单位为秒,值为0时表示已禁用,timeout不生效。当url配置多IP时,表示毗连单个IP的超时时间,缺省值为0。
- socketTimeout:Integer范例。用于socket读取操纵的超时值。如果从服务器读取所花费的时间超过此值,则毗连关闭。超时时间单位为秒,值为0时表示已禁用,timeout不生效。缺省值为0。 当JDBC侧触发超时且毗连关闭时,其下发给数据库侧正在运行的业务会被强制终止。该本事受GUC参数check_disconnect_query控制,设置为on表示支持该本事,设置为off表示不支持该本事。
- socketTimeoutInConnecting:Integer范例。用于控制建连阶段socket读取操纵的超时值。如果建连时从服务器读取所花费的时间超过此值,则查找下一个节点建连。超时时间单位为秒,默以为5s。
- statementTimeout:Integer范例。用于控制connection中statement执行时间的超时值。如果statement执行时间超过此值,则取消该statement执行。超时时间单位为毫秒,值为0表示已禁用,timeout不生效,缺省值为0。
- cancelSignalTimeout:Integer范例。发送取消消息自己大概会阻塞,此属性用于控制取消命令的“connect超时”和“socket超时”。如果取消命令超过指定时间未相应,会中断该毗连,淘汰占用客户端资源。超时时间单位为秒,默认值为10秒。
- tcpKeepAlive:Boolean范例。启用或禁用TCP保活探测功能。默以为false。
- logUnclosedConnections:Boolean范例,缺省值为false。客户端大概由于未调用Connection对象的close()方法而泄漏Connection对象。最终这些对象将被垃圾采取,并且调用finalize()方法。设置为true之后,如果调用者忽略了此操纵,该方法将关闭Connection。
- assumeMinServerVersion(废弃):String范例。该参数设置要毗连的服务器版本。
- ApplicationName:String范例。设置正在利用毗连的应用步伐名称。通过在CN上查询pgxc_stat_activity表可以看到正在毗连的客户端信息,显示在application_name列。缺省值为GaussDB JDBC Driver。
- connectionExtraInfo:Boolean范例。表示驱动是否上报当前驱动的摆设路径、历程属主用户、url毗连配置信息到数据库。 取值范围:true或false,默认值为false。设置connectionExtraInfo为true,JDBC驱动会将当前驱动的摆设路径、历程属主用户、url毗连配置信息上报到数据库中,记录在connection_info参数里,同时可以在PG_STAT_ACTIVITY和PGXC_STAT_ACTIVITY中查询到。
- autosave:String范例。共有3种:"always"、 "never"、"conservative"。如果查询失败,指定驱动步伐应该执行的操纵。在autosave=always模式下,JDBC驱动步伐在每次查询之前设置一个生存点,并在失败时回滚到该生存点。在autosave=never模式(默认)下,无生存点。在autosave=conservative模式下,每次查询都会设置生存点,但是只会在“statement XXX无效”等情况下回滚并重试,缺省值为never。
- protocolVersion:Integer范例。毗连协议版本号,现在仅支持1和3。设置1时仅代表毗连的是V1服务端。设置3时将采用MD5加密方式,必要同步修改数据库的加密方式,将GUC参数password_encryption_type设置为1,重启集群生效后必要创建用MD5方式加密口令的用户。同时修改gs_hba.conf,将客户端毗连方式修改为MD5。用新建用户举行登录(因为设置该值后,只能利用低品级的加密方式(MD5),低沉安全性,以是不推荐设置)。阐明: MD5加密算法安全性低,存在安全风险,发起利用更安全的加密算法。
- prepareThreshold:Integer范例。该值决定着PreparedStatement对象在执行多少次以后利用服务端已经准备好的statement。默认值是5,意味着在执行同一个PreparedStatement对象时,在第五次以及以上执行时不再向服务端发送parse消息对statement举行分析,而利用之前在服务端已经分析好的statement。
- preparedStatementCacheQueries:Integer范例。该参数确定了每个毗连的cache缓存Statement对象生成query的最大个数。默认值为256,若Statement对象生成query个大于256则会将最近最少利用的query从缓存中抛弃。“0”表示禁用缓存。
- preparedStatementCacheSizeMiB:Integer范例,该参数确定了每个毗连的cache缓存Statement对象所生成query的最大值(以兆字节为单位),默认情况下是5。若缓存了超过5MB的query,则最近最少利用的查询缓存将被抛弃。“0”表示禁用缓存。
- databaseMetadataCacheFields:Integer范例。默认值是65536。指定每个毗连可缓存的最大字段的个数。“0”表示禁用缓存。
- databaseMetadataCacheFieldsMiB:Integer范例。默认值是5。指定每个毗连可缓存的字段的最大值,单位是MB。“0”表示禁用缓存。
- stringtype:String范例。可选字段为:"unspecified"、"varchar"。设置通过setString()方法利用的PreparedStatement参数的范例,如果stringtype设置为VARCHAR(默认值),则这些参数将作为varchar参数发送给服务器。若stringtype设置为unspecified,则参数将作为untyped值发送到服务器,服务器将尝试推断适当的范例。
- batchMode:String范例。用于确定是否利用batch模式毗连。默认值为on,表示开启batch模式。设置batchMode=on执行乐成的返回效果为[count, 0, 0...0],数组第一个元素为批量影响的总条数,设置batchMode=off执行乐成的返回效果为[1, 1, 1...1],数组各元素对应单次修改的影响条数。
- fetchsize:Integer范例。用于设置数据库毗连所创建statement的默认fetchsize。默认值为0,表示一次获取全部效果。与defaultRowFetchSize功能等价,如果同时设置,以fetchsize为准。
- reWriteBatchedInserts:Boolean范例。缺省值为false。批量导入时,该参数设置为true,可将N条插入语句合并为一条:insert into TABLE_NAME values(values1, ..., valuesN), ..., (values1, ..., valuesN)。利用该参数时,需设置batchMode=off。
- unknownLength:Integer范例。默以为Integer.MAX_VALUE。某些GaussDB范例(例如TEXT)没有明确界说的长度,当通过ResultSetMetaData.getColumnDisplaySize和ResultSetMetaData.getPrecision等函数返回关于这些范例的数据时,此参数指定未知长度范例的长度。
- defaultRowFetchSize:Integer范例。确定一次fetch在ResultSet中读取的行数。限制每次访问数据库时读取的行数可以制止不必要的内存消耗,从而制止OutOfMemoryException。缺省值是0,意味着ResultSet中将一次获取全部行。本参数不答应设置为负值。
- binaryTransfer:Boolean范例。利用二进制格式发送和接收数据,默认值为false。
- binaryTransferEnable:String范例。启用二进制传输的范例列表,以逗号分隔。OID编号和名称二选一,例如binaryTransferEnable=INT4_ARRAY,INT8_ARRAY。比如:OID名称为BLOB,编号为88,可以举行如下配置:binaryTransferEnable=BLOB 或 binaryTransferEnable=88。
- binaryTransferDisable:String范例。禁用二进制传输的范例列表,以逗号分隔。OID编号和名称二选一。覆盖binaryTransferEnable的设置。
- blobMode:String范例。用于设置setBinaryStream方法绑定参数的数据范例,当该值为on时表示setBinaryStream绑定的数据范例为blob范例,为off时表示绑定的数据范例为bytea范例,默以为on。发起从ORA、MYSQL迁移的系统将该值设定为on,从PG迁移的系统设定为off。
- socketFactory:String范例。用于创建与服务器socket毗连的类的名称。该类必须实现接口“javax.net.SocketFactory”,并界说无参或单String参数的构造函数。
- socketFactoryArg:String范例。此值是上面提供的socketFactory类的构造函数的可选参数,不推荐利用。
- receiveBufferSize:Integer范例。该值用于设置毗连流上的SO_RCVBUF。
- sendBufferSize:Integer范例。该值用于设置毗连流上的SO_SNDBUF。
- preferQueryMode:String范例。共有4种:"extended"、"extendedForPrepared"、"extendedCacheEverything"和"simple"。用于指定执行查询的模式,默认值为extended。simple模式只发送Q消息,仅支持文本模式,不支持parse与bind;extended模式会利用parse、bind和execute消息;extendedForPrepared模式下只有Prepared Statement对象利用扩展查询,Statement对象只利用简单查询;extendedCacheEverything模式会缓存每个Statement对象所生成的query。
- ApplicationType:String范例。共有2种:"not_perfect_sharding_type"、"perfect_sharding_type"。用于设置是否开启分布式写入和查询,默认值为"not_perfect_sharding_type"。not_perfect_sharding_type模式下开启分布式写入和查询,perfect_sharding_type模式下默认禁止分布式写入和查询,只有在sql文中加入/* multinode */ 才能执行分布式写入和查询。该项设置只有数据库处于gtm free场景的情况下才会有效。
- priorityServers:Integer范例。此值用于指定url上配置的前n个节点作为主集群被优先毗连。默认值为NULL。该值为数字,大于0且小于url上配置的CN数量。用于OBS容灾和流式容灾场景。 例如:jdbc:gaussdb://host1:port1,host2:port2,host3:port3,host4:port4,/database?priorityServers=2,即表示host1与host2为主集群节点,host3与host4为容灾集群节点。
- usingEip:Boolean范例。此值用于控制是否利用弹性公网IP做负载均衡。默认值为true,表示利用弹性公网IP做负载均衡,false表示利用数据IP做负载均衡。当useringEip=true或者不配置时,url中的host需利用弹性公网IP,usingEip=false时,url中的host需利用数据IP,否则会导致priorityn负载均衡策略失效。
- traceInterfaceClass:String范例。默认值为NULL,用于获取traceId的实现类。值是实现获取traceId方法的接口com.huawei.gaussdb.jdbc.log.Tracer的实现类的完整限定类名。
- use_boolean:Boolean范例。用于设置extended模式下setBoolean方法绑定的oid范例,默以为false,绑定int2范例。设置为true则绑定bool范例。
- allowReadOnly:Boolean范例。用于设置是否答应毗连开启只读模式,默以为true,答应设置只读模式。设置为false则禁用只读模式,此时调用connection.setReadOnly(true)不生效,仍可以修改数据。
- TLSCiphersSupperted:String范例。用于设置支持的TLS加密套件,默以为TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384。
- stripTrailingZeros:Boolean范例。默认值为false,设置为true则去除numeric范例后的0,仅对ResultSet.getObject(int columnIndex)生效。
- enableTimeZone:Boolean范例。默认值为true,用于指定是否启用服务端时区设置,true表示获取JVM时区指定命据库时区,false表示利用数据库时区。
- enableStandbyRead:Boolean范例。默认值为false,用于指定是否开启备机读模式,true表示启用,false表示禁用。
- compatibilityTags:String范例。默以为NULL,用于将驱动的部分特性恢复到早期版本,以确保前向兼容。可配置一个或多个tag,每个tag代表开启对应的前向兼容性特性,不同tag之间用“,”隔开。一般不发起利用该参数,除非有明确的前向兼容问题。现在支持的tag如下: typeMapInitNull:利用该tag后,兼容驱动早期版本的行为,java.sql.Connection中typeMap的初始值为NULL,如果不利用该tag,初始值为空Map。
- parseCandidatesByDomain:Boolean范例。默认值false,用于指定是否根据域名获得备节点。true表示启用,false表示禁用。开启后必要将url中的host信息配置成域名+端口的形式,驱动会基于域名获得IP,生成备节点聚集,并可以共同autoBalance参数做负载均衡。
- primaryDomains:Integer范例。用于指定url上配置的前n个域名作为主集群被优先毗连。默以为0,表示关闭。必要将parseCandidatesByDomain参数设置为true时才能生效,大于0表示开启,且取值要小于url上配置的域名数量。将url中的域名拆分成两个分组,前一个分组为主集群,后一个分组为备集群。发生主备切换后,两个分组互换位置,前一个分组为主集群,后一个分组为备集群。实用于流式容灾和Dorado双集群场景。 例如:jdbc:gaussdb://domain1:port1,domain2:port2,domain3:port3,domain4:port4/database?parseCandidatesByDomain=true&primaryDomains=2,即表示domain1和domain2对应主集群,优先连domain1和domain2对应的IP。如果发生主备切换,将domain3和domain4标记为主集群,优先对domain3和domain4建连。
- priorityDomains:Integer范例。用于指定url上配置的前n个域名作为优先毗连的域名。默以为0,表示关闭,必要将parseCandidatesByDomain参数设置为true时才能生效,大于0表示开启,且取值要小于url上配置的域名数量,如果配置了primaryDomains,则必要小于primaryDomains配置的数值。 例如:jdbc:gaussdb://domain1:port1,domain2:port2,domain3:port3,domain4:port4/database?parseCandidatesByDomain=true&primaryDomains=2&priorityDomains=1,即表示domain1和domain2对应主集群,但是优先连domain1对应的IP,domain2是备用域名,只有domain1不可连后才尝试连domain2。如果发生主备切换,将domain3和domain4标记成主集群,但是优先连domain3对应的IP,domain3不可以连后才尝试连domain4对应的IP。
- refreshDomainResolveTime:Integer范例。默以为10,单位是秒,最小值为1,最大值为2147483647。代表域名分析效果的刷新周期,必要将parseCandidatesByDomain参数设置为true时才能生效,生效后会将url中涉及的域名分析刷新时间设置为指定的数值,并在异步线程中定时更新域名分析效果。驱动仅通过应用所在环境的DNS服务获取域名分析效果,为保障域名绑定的变动被驱动实时感知,必要应用所在环境的DNS服务保障域名绑定关系变动后能够实时生效。
- oracleCompatible:String范例。默以为false。用户控制驱动接口的ORA兼容特性。有以下几种取值:
- 设置为true或on:表示开启驱动侧全部的ORA兼容特性。
- 设置为false或off:表示关闭驱动侧全部的ORA兼容特性。
- 设置为"tag1,tag2,tag3":配置一个或多个tag,tag之间用“,”隔开,表示开启驱动侧部分的ORA兼容特性,每个tag对应一个ORA兼容特性。 当前支持的tag有:
- getProcedureColumns:DatabaseMetaData#getProcedureColumns接口的行为兼容ORA行为。
- getCallableStatementResults:开启后,调用CallableStatement的getLong、getInt、getShort、getByte四个接口时与ORA模式数据库保持一致。在注册出参范例为java.sql.Types#NUMERIC时,调用CallableStatement的getLong、getInt、getShort、getByte接口,能够正常接收out的值,只有out数值超过java数值数据范例取值范围会提示SQLException异常。
- batchInsertAffectedRows:reWriteBatchedInserts开启后,执行批量插入接口Statement#executeBatch的返回效果兼容ORA行为。
- printSqlInLog:Boolean范例。默认值为true,用于指定异常信息中或日志中是否输出sql语句,true表示启用,false表示禁用。
- useGsClobBlobClass:Boolean范例。默以为false,表示关闭。
- 设置为true开启后,利用java.sql.ResultSet#getObject接口获取clob字段时,会返回PGClob范例的对象。获取blob字段时会返回PGBlob范例的对象。通过元数据接口java.sql.ResultSetMetaData#getColumnClassName获取clob字段的范例名称会返回java.sql.Clob,获取blob字段的范例名称时会返回java.sql.Blob。
- 设置为false关闭后,利用java.sql.ResultSet#getObject接口获取clob字段时,会返回PGClob范例的对象。获取blob字段时会返回byte[]范例的对象。通过元数据接口java.sql.ResultSetMetaData#getColumnClassName获取clob字段的范例名称会返回java.sql.CLOB,获取blob字段的范例名称时会返回java.sql.BLOB。
- sessionType:String范例。指定当前会话的范例,根据用户实际取值生成执行筹划。默认值为normal,取值为范围:singleNode、globalReadOnly、normal。
- normal:默认值,表示普通会话,根据数据库原有逻辑执行筹划。
- singleNode:表示会话为单节点会话,会话的读写操纵支持下推。单节点会话模式是通过CN向指定的目的DN举行1对1的会话模式。需与参数execTargetNode同时利用,设置参数execTargetNode为目的DN节点名称,JDBC会优先毗连目的DN节点对应的本地CN节点。
- globalReadOnly:表示会话为跨节点只读会话模式。该模式下,会正常生成分布式筹划,但禁止分布式写操纵。
- execTargetNode:String范例。需与参数sessionType同时利用,参数sessionType设置为singleNode模式时生效。表示单节点会话模式下对应的DN节点,取值为当前集群内的全部DN节点名称。若参数sessionType设置为singleNode模式,未指定execTargetNode时(默认值为NULL),效果与sessionType设置为normal一致。
- executeUpdateQueryable:Boolean范例。默认值为false,用于指定executeUpdate方法是否开启执行DQL语句,true表示启用,false表示禁用。开启后,executeUpdate方法执行DQL语句的返回值为-1,能够得到效果集。不推荐开启此参数。
- dbMonitor:Boolean范例。默认值为false,用于指定JDBC是否开启毗连监控功能。true表示启用,false表示禁用。
- 毗连监控功能支持监控JDBC端以下指标:应用开启毗连的次数、关闭毗连的次数、毗连异常断开的次数,数据库访问量,客户端机器CPU的利用率、内存的利用率、上下行传输速率,应用端到数据库链路之间的网络时延、抖动、丢包率。
- 将dbMonitor设置为true、loggerLevel设置为debug、loggerFile设置为filePath,可将客户端的毗连监控输出到日志文件filePath中,具体示例见示例4 数据库毗连监控功能利用示例。
- enableStreamingQuery:Boolean范例。默认值为false,用于控制是否开启流式读功能。true表示开启,false表示关闭。将该参数值设置为true,同时利用statement.setFetchSize(Integer.MIN_VALUE)或者statement.enableStreamingResults(),表示开启流式读功能。 流式读:读取数据时,一次获取全部,发送到客户端socket缓冲区中,缓冲区占满则暂停,有空余则继续向缓冲区中发送数据,同时JVM逐行从缓冲区中读取数据。流式读的优势是处置惩罚效果快,不会造成JVM内存溢出,劣势是只能向后遍历,数据处置惩罚完毕之前或者statement关闭之前,当前毗连不能执行其他操纵,具体示例见示例部分的示例2。
- yearIsDateType:Boolean范例。默认值为true,表示开启。
- 设置为true开启后,利用java.sql.ResultSet#getObject接口获取YEAR数据范例字段时会返回DATE范例的对象,利用java.sql.ResultSet#getString接口获取数据时会返回yyyy-mm-dd格式的日期字符串,利用java.sql.ResultSet#getInt/getLong/getShort接口获取数据会返回年份数值。
- 设置为false关闭后,利用java.sql.ResultSet#getObject接口获取YEAR数据范例字段时会返回INTEGER范例的对象,利用java.sql.ResultSet#getString接口获取数据时返回年份的字符串,利用java.sql.ResultSet#getInt/getLong/getShort接口获取数据会返回年份数值。
- setFloat:Boolean范例,表示调用setFloat或者setObject指定范例为float时,通报给内核的Oid是否为float4的Oid。true表示开启,通报给内核的Oid为float8,false表示关闭,通报给内核的Oid为float4,默以为false。
- disasterToleranceCluster:Boolean范例,默以为false,表示在开启负载均衡功能的场景下且JDBC毗连数据库的url中只配置容灾集群节点时,判定负载均衡毗连到主集群或毗连到容灾集群。true表示开启,会在容灾集群节点举行负载均衡;false表示关闭,会在主集群节点间举行负载均衡。
user
数据库用户。
password
数据库用户的暗码。
uppercaseAttributeName参数开启后,如果数据库中有小写、大写和巨细写肴杂的元数据,则只能查询出小写部分的元数据,并以大写的形式输出。利用前请务必确认元数据的存储是否全为小写以制止数据堕落。
示例
示例1:毗连数据库
- // 以下用例以gaussdbjdbc.jar为例。
- // 以下代码将获取数据库连接操作封装为一个接口,可通过给定用户名和密码来连接数据库。
- public static Connection getConnect(String username, String passwd)
- {
- // 驱动类。
- String driver = "com.huawei.gaussdb.jdbc.Driver";
- // 数据库连接描述符。
- String sourceURL = "jdbc:gaussdb://$ip:$port/database";
- 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;
- }
复制代码
| 示例2:利用Properties对象作为参数创建毗连
- // 以下代码将使用Properties对象作为参数建立连接。
- public static Connection getConnectUseProp(String username, String passwd)
- {
- // 驱动类。
- String driver = "com.huawei.gaussdb.jdbc.Driver";
- // 数据库连接描述符。
- String sourceURL = "jdbc:gaussdb://$ip:$port/database?autoBalance=true";
- Connection conn = null;
- Properties info = new Properties();
-
- try
- {
- // 加载驱动。
- Class.forName(driver);
- }
- catch( Exception e )
- {
- e.printStackTrace();
- return null;
- }
-
- try
- {
- info.setProperty("user", username);
- info.setProperty("password", passwd);
- // 创建连接。
- conn = DriverManager.getConnection(sourceURL, info);
- System.out.println("Connection succeed!");
- }
- catch(Exception e)
- {
- e.printStackTrace();
- return null;
- }
-
- return conn;
- }
复制代码
| 常用参数详细请拜见JDBC常用参数参考。
示例3:利用流式读功能
NOTICE:
利用流式读功能时,效果集利用完之后,必要执行resultSet.close()或者statement.close()操纵,否则当前毗连将不可用。
更多详情请参考GaussDB 文档中央:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |