• Jmeter系列(30)- 详解 JDBC Request
     JDBC Request JDBC Request 界面介绍 字段含义字段含义Variable Name Bound to Pool数据库连接池配置的名称Query Typesql 语句的类型SQL Querysql 语句语句结尾不需要添加 ; 变量用 ? 占位Parameter values需要传递的变量值,多个变量用 , 分隔Parameter types变量类型Variable Names保存sql语句返回的数据和返回数据的总行数用 , 分隔跳过列用空Result Variable Name一个 Object 变量存储所有返回值Query timeout(s)超时时间;默认0,代表无限时间Limit ResultSet和 limit 类似作用,限制 sql 语句返回结果集的行数Handle ResultSet如何定义 callable statements 返回的结果集;默认是存储为字符串后续通过各种栗子来深入理解常用字段的含义 举栗子的前提需要自己找一个有数据库的数据来练手哦!这里拿的表数据如下哈 只有 sql 语句的栗子JDBC Request没啥特别的,平时 sql 怎么写,这里就怎么写 运行结果 参数化的栗子JDBC Request 运行结果 知识点 参数化+变量的栗子JDBC Request 运行结果 知识点 使用 Variable Names 的栗子结构树 JDBC Request添加一个 Debug Sampler 就知道这个字段有什么作用了 JDBC Request 运行结果 调试取样器运行结果 知识点 使用 Result variable name 的栗子JDBC Request Debug Sampler  运行结果 知识点该变量是个数组,每一个元素代表一条记录 重点关于通过 Variable names、Result variable name 获取到的值如何提取,我们将在下一篇文章中详细讲解 使用 Limit ResultSet 的栗子JDBC Request  运行结果
  • Jmeter系列(29)- 详解 JDBC Connection Configuration
    前言发起 jdbc 请求前,需要有 JDBC 连接配置,即先连上数据库,才能查询数据库 JDBC Connection Configuration JDBC Connection Configuration 界面介绍 Variable Name for created poolJDBC Connection Configuration 算是一个数据库连接池配置Variable Name :数据库连接池的名称一个测试计划可以有多个 JDBC Connection,只要名称不重复就行 Connection pool Configuration连接池参数配置,基本保持默认就行了,可根据需要进行修改 字段含义Max Number of Connections最大连接数;做性能测试时,建议填 0如果填了10,则最大连接10个线程Max Wait(ms)在连接池中取回连接最大等待时间,单位毫秒Time Between Eviction Runs(ms)线程可空闲时间,单位毫秒如果当前连接池中某个连接在空闲了 time Between Eviction Runs Millis 时间后任然没有使用,则被物理性的关闭掉Auto Commit自动提交sql语句,如:修改数据库时,自动 commitTransaction isolation事务隔离级别Preinit Pool立即初始化连接池如果为 False,则第一个 JDBC 请求的响应时间会较长,因为包含了连接池建立的时间 Connection Validation by Pool验证连接池是否可响应字段含义Test While Idle当连接空闲时是否断开Soft Min Evictable Idle Time(ms)连接在池中处于空闲状态的最短时间Validation Query一个简单的查询,用于确定数据库是否仍在响应默认为jdbc驱动程序的 isValid() 方法,适用于许多数据库 Database Connection Configuration数据库连接配置字段含义Database URL数据库连接 URLJDBC Driver class数据库驱动Username数据库登录用户名Password数据库登录密码Connection Properties建立连接时要设置的连接属性 Database URL 举例jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&allowMultiQueries=true(允许执行多条 sql) 常见数据库的连接 URL和驱动数据库驱动URLMySQLcom.mysql.jdbc.Driverjdbc:mysql://host:port/{dbname}PostgreSQLorg.postgresql.Driverjdbc:postgresql:{dbname}Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:user/pass@//host:port/servicesqlServercom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:port;databaseName=databaseName  
  • 注意JDBC数据库连接中资源关闭的顺序
    在JDBC连接数据库时首先要获得connection,再通过它获得相应的statement,最后获得结果集resultset.这些过程都会占用内存资源,所以我们常常会在方法调用结束后关闭相应的资源节约内存空间。这时如果关闭的顺序不对,像下面这样,有时就会出现异常。 public static void closeAllResource(Connection conn,Statement st,ResultSet rs) { if (conn!=null) { try { conn.close(); } catch (Exception e) { e.printStackTrace(); } } if (st!=null) { try { st.close(); } catch (Exception e) { e.printStackTrace(); } } if (rs!=null) { try { rs.close(); } catch (Exception e) { e.printStackTrace(); } } }org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (Connection is closed) at org.sqlite.core.DB.newSQLException(DB.java:909) at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:115) at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35) at org.sqlite.jdbc4.JDBC4Statement.close(JDBC4Statement.java:27) at com.tools.JdbcUtils.close(JdbcUtils.java:94) at com.tools.BaseDao2.update(BaseDao2.java:38) at com.test.testjdbc.main(testjdbc.java:30)如果connection关闭了,后面Statement和ResultSet相关的操作就会受到影响。所以平时一定要注意关闭资源的先后顺序,先关闭ResultSet,然后是Statement,最后是Connetion,刚好与创建相应对象时的顺序相反。
  • 10个问题让你快速避开java中的jdbc常见坑
    Connection.setAutoCommit(boolean)用于事务提交。setAutoCommit(true), 则执行的所有sql执行都会作为单个事务直接提交并运行setAutoCommit(false), 则必须等调用conn.commit()才会提交运行Q: setAutoCommit默认是true还是falseA: 默认是true。Q: setAutoCommit(true)的缺点是什么?A: 如果一次性执行多个sql语句, 中间sql出错时,就会造成脏数据。Q: setAutoCommit(false)后,如果出了错却没有在catch中进行Connection的rollBack操作,会发生什么?A; 操作的表就会被锁住,造成数据库死锁fetchSizefetchSize 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数fetchSize越 大, 客户端内存占用越 大,读取数据库次数越 少,速度越 快。Q: Oracle和Mysql中的fetchSize有什么区别?A: Oracle会每次网络传输fetchSize条数据到客户端, MYSQL则会一次性全部传送到客户端,因此Mysql中的fetchSize是一种模拟游标。PreparedStatementQ:相比Statement的好处?A:PreparedStatement是预编译的,比Statement速度快,执行效率高,因此即使sql中不带参数也最好使用PreparedStatement代码的可读性和可维护性更好(相比于sql拼接)PreparedStatement可以防止SQL注入攻击,而Statement却不能Q:prepareStatement是statement接口的实现吗?A:prepareStatement不是实现,而是继承的接口CallableStatementCallableStatement继承自PreparedStatementCallableStatement接口添加了 调用存储过程 核函数以及处理输出参数(INOUT)的方法。即存储过程就用CallableStatementConnection Pool连接池优点:减少连接创建次数更快的系统整体响应速度统一连接管理,减少失误性的连接未关闭。ResultSet作用: 缓存数据结果集Statement st = conn. createStatement (int resultSetType, int resultSetConcurrency) ResultSet rs = st.executeQuery(sqlStr)滚动,就是指调用.next()或者.previous()或者移动到对应行resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下(见单词知意):ResultSet.TYPE_FORWARD_ONLY 只能向前滚动ResultSet.TYPE_SCROLL_INSENSITIVE, 支持前后滚动,对修改不敏感ResultSet.TYPE_SCROLL_SENSITIVE 支持前后滚动,对修改敏感resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下:ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。Q:Connection、statement、ResultSet的关闭顺序是?A:先ResultSet、再Statement、最后再connection。因为这种操作很麻烦,最好使用jdbc连接池,或者try-with-resource数据库知识Q:事务的ACID属性是什么?A:A是 atomicity原子性, 事务内的行为一次性执行完,要么就回退C是consistency一致性 有a+b=c的限制条件,然后a变化的同时,b也必须跟着变化I是isolation隔离性 事务隔离,即事务的中间执行过程,对另外一个事务不可见。D是durability持久性 提交i成功后,修改不会改变,也会被记录。Q: 脏读、不可重复读和幻读是什么?A:脏读:数据被更新了,但是还没提交, 然后另一个事务读到了更新后的数据,结果事务回滚了,导致读的数据其实是脏数据,不可重复读: 1个事务要读2次数据(注意是单条数据),结果第一次读和第二次读数据不一致了。幻读: 1个事务读了2次 数据,发现2次的记录数不一致(注意事项记录数)————————————————
  • 注意JDBC数据库连接中资源关闭的顺序
    在JDBC连接数据库时首先要获得connection,再通过它获得相应的statement,最后获得结果集resultset.这些过程都会占用内存资源,所以我们常常会在方法调用结束后关闭相应的资源节约内存空间。这时如果关闭的顺序不对,像下面这样,有时就会出现异常。    public static void closeAllResource(Connection conn,Statement st,ResultSet rs) {        if (conn!=null) {            try {                conn.close();            } catch (Exception e) {                e.printStackTrace();            }        }                if (st!=null) {            try {                st.close();            } catch (Exception e) {                e.printStackTrace();            }        }                if (rs!=null) {            try {                rs.close();            } catch (Exception e) {                e.printStackTrace();            }        }    }org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (Connection is closed) at org.sqlite.core.DB.newSQLException(DB.java:909) at org.sqlite.core.CoreStatement.internalClose(CoreStatement.java:115) at org.sqlite.jdbc3.JDBC3Statement.close(JDBC3Statement.java:35) at org.sqlite.jdbc4.JDBC4Statement.close(JDBC4Statement.java:27) at com.tools.JdbcUtils.close(JdbcUtils.java:94) at com.tools.BaseDao2.update(BaseDao2.java:38) at com.test.testjdbc.main(testjdbc.java:30)如果connection关闭了,后面Statement和ResultSet相关的操作就会受到影响。所以平时一定要注意关闭资源的先后顺序,先关闭ResultSet,然后是Statement,最后是Connetion,刚好与创建相应对象时的顺序相反。
  • 10个问题让你快速避开java中的jdbc常见坑
    Connection.setAutoCommit(boolean)用于事务提交。setAutoCommit(true), 则执行的所有sql执行都会作为单个事务直接提交并运行setAutoCommit(false), 则必须等调用conn.commit()才会提交运行Q: setAutoCommit默认是true还是falseA: 默认是true。Q: setAutoCommit(true)的缺点是什么?A: 如果一次性执行多个sql语句, 中间sql出错时,就会造成脏数据。Q: setAutoCommit(false)后,如果出了错却没有在catch中进行Connection的rollBack操作,会发生什么?A; 操作的表就会被锁住,造成数据库死锁fetchSizefetchSize 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数fetchSize越 大, 客户端内存占用越 大,读取数据库次数越 少,速度越 快。Q: Oracle和Mysql中的fetchSize有什么区别?A: Oracle会每次网络传输fetchSize条数据到客户端, MYSQL则会一次性全部传送到客户端,因此Mysql中的fetchSize是一种模拟游标。PreparedStatementQ:相比Statement的好处?A:PreparedStatement是预编译的,比Statement速度快,执行效率高,因此即使sql中不带参数也最好使用PreparedStatement代码的可读性和可维护性更好(相比于sql拼接)PreparedStatement可以防止SQL注入攻击,而Statement却不能Q:prepareStatement是statement接口的实现吗?A:prepareStatement不是实现,而是继承的接口CallableStatementCallableStatement继承自PreparedStatementCallableStatement接口添加了 调用存储过程 核函数以及处理输出参数(INOUT)的方法。即存储过程就用CallableStatementConnection Pool连接池优点:减少连接创建次数更快的系统整体响应速度统一连接管理,减少失误性的连接未关闭。ResultSet作用: 缓存数据结果集Statement st = conn. createStatement (int resultSetType, int resultSetConcurrency) ResultSet rs = st.executeQuery(sqlStr)滚动,就是指调用.next()或者.previous()或者移动到对应行resultSetType 是设置 ResultSet 对象的类型可滚动,或者是不可滚动。取值如下(见单词知意):ResultSet.TYPE_FORWARD_ONLY 只能向前滚动ResultSet.TYPE_SCROLL_INSENSITIVE, 支持前后滚动,对修改不敏感ResultSet.TYPE_SCROLL_SENSITIVE 支持前后滚动,对修改敏感resultSetConcurency 是设置 ResultSet 对象能够修改的,取值如下:ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。Q:Connection、statement、ResultSet的关闭顺序是?A:先ResultSet、再Statement、最后再connection。因为这种操作很麻烦,最好使用jdbc连接池,或者try-with-resource数据库知识Q:事务的ACID属性是什么?A:A是 atomicity原子性, 事务内的行为一次性执行完,要么就回退C是consistency一致性 有a+b=c的限制条件,然后a变化的同时,b也必须跟着变化I是isolation隔离性 事务隔离,即事务的中间执行过程,对另外一个事务不可见。D是durability持久性 提交i成功后,修改不会改变,也会被记录。Q: 脏读、不可重复读和幻读是什么?A:脏读:数据被更新了,但是还没提交, 然后另一个事务读到了更新后的数据,结果事务回滚了,导致读的数据其实是脏数据,不可重复读: 1个事务要读2次数据(注意是单条数据),结果第一次读和第二次读数据不一致了。幻读: 1个事务读了2次 数据,发现2次的记录数不一致(注意事项记录数)部分参考资料https://blog.csdn.net/u011543448/article/details/79441066
  • [其他] 【故障】客户使用JDBC执行sql报错:ERROR: insufficient data left in message
    问题描述:客户使用JDBC执行sql报错:ERROR:  insufficient data left in message排查方法:排查客户执行的sql中是否包含'\0'(在notepad++中查看时NUL的特殊字符),如图:原因:服务端无法处理字符串中的'\0'字符解决方式:去掉特殊字符,可以用空格代替参考链接:https://www.postgresql.org/message-id/alpine.BSO.2.00.0906031639270.2432@leary.csoft.net
  • [BI报表] PowerBI使用用户名密码方式对接FusionInsight HetuEngine
    前提条件:FusionInsight HD 集群安装完毕,集群状态健康已安装最新版本HetuEngine服务已在FusionInsight Hetu集群中创建“人机”用户Windows环境已安装PowerBI   说明:该方法仅适用于2021.3.30版本之后,3.30之前的版本不适用一、获取JDBC jar包  下载HetuEngine客户端。登录FusionInsight  Manager。选择“集群 > 待操作的集群名称 > 服务 > HetuEngine > 概览”。在页面右上角,选择“更多 > 下载客户端”,根据界面提示下载“完整客户端”文件到本地。解压HetuEngine客户端压缩包文件“FusionInsight_Cluster_集群ID_Services_Client.tar”获取jdbc文件,并存放在本地,例如D:\test   说明:jdbc文件在压缩包中的路径:FusionInsight_Cluster_集群ID_Services_Client \FusionInsight_Cluster_1_Services_ClientConfig\FusionInsight_Cluster_集群ID_Services_ClientConfig\HetuEngine\ presto-jdbc-316-hw-ei-*-SNAPSHOT二、PowerBI配置步骤1:采用ODBC登录方式访问HetuEngine,首先需要安装ODBC驱动程序。使用默认配置安装“hetu-odbc-win64.msi”驱动程序。下载地址:https://openlookeng.io/download.html。步骤2:配置数据源驱动执行以下命令停止自动启动的odbc服务。    cd C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\bin    mycat.bat stop        2.替换jdbc驱动。    拷贝第一节中获取的jdbc jar包到“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\lib”目录下,并删除该目录下原始的“hetu-jdbc-1.0.1.jar”包。            3.编辑odbc的“server.xml”文件的协议前缀    将“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\conf”目录中的“server.xml”文件的属性值“<property name="jdbcUrlPrefix">jdbc:lk://</property>”修改为“<property name="jdbcUrlPrefix">jdbc:presto://</property>”    4.配置用户名/密码方式连接。    在自定义路径,如“C:\hetu”中新建“jdbc_param.properties”文件,添加如下内容:user=admintestpassword=admintest@123456    说明:    user:已创建的“人机”用户的用户名,如:admintest。    password:已创建的“人机”用户的用户密码,如:admintest@123456。    5.执行以下命令重启odbc服务    cd C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\bin    mycat.bat restart    备注:每次修改配置时都需要停止odbc服务,修改完毕后再重启服务。步骤3:在window系统的控制面板中输入“odbc”搜索odbc的管理程序。步骤4:在应用程序中选择“添加 > openLookeng ODBC 1.1 Driver > 完成”步骤5:参考下图创建数据源名称和描述,单击“Next”步骤6:参考下图完成参数配置。 Connection URL:<HSBrokerIP1:port1>,<HSBrokerIP2:port2>,<HSBrokerIP3:port3>/hive/default?serviceDiscoveryMode=hsbroker;获取HSBroker节点及端口号:a.  登录FusionInsight Managerb.  选择“集群 -> 待操作的集群名称 –> 服务 -> HetuEngine –> 角色 -> HSBroker”获取HSBroker所有实例的业务IP选择“集群 -> 待操作的集群名称 –> 服务 -> HetuEngine -> 配置 -> 全部配置”,右侧搜索“server.port”,获取HSBroker的端口号样例:192.168.8.37:29860,192.168.8.38:29860, 192.168.8.39:29860/hive/default?serviceDiscoveryMode=hsbrokerConnection Config:选择步骤2准备好的“jdbc_param.properties”文件;User Name”是下载凭据的用户名称。步骤7:单击“Test DSN ”测试连接, 显示连接成功且“Catalog”和“Schema”中均有内容表示连接成功,单击“Next”。步骤8:单击“Finish”完成连接。步骤9:使用PowerBI对接,选择“获取数据 > 更多 > ODBC > 连接”。步骤10:选择步骤5中添加的数据源,单击“确定”完成数据源添加。步骤11:(可选)输入下载凭据用户的“用户名”及“密码”,单击“连接”。步骤12:连接成功后,显示所有表信息
  • [BI报表] 永洪BI使用用户名密码方式对接FusionInsight HetuEngine
    前提条件:FusionInsight HD 集群安装完毕,集群状态健康已安装最新版本HetuEngine服务已在FusionInsight Hetu集群中创建“人机”用户Windows环境已安装永洪BI   说明:该方法仅适用于2021.3.30版本之后,3.30之前的版本不适用一、获取JDBC jar包  下载HetuEngine客户端。登录FusionInsight  Manager。选择“集群 > 待操作的集群名称 > 服务 > HetuEngine > 概览”。在页面右上角,选择“更多 > 下载客户端”,根据界面提示下载“完整客户端”文件到本地。解压HetuEngine客户端压缩包文件“FusionInsight_Cluster_集群ID_Services_Client.tar”获取jdbc文件,并存放在本地,例如D:\test   说明:jdbc文件在压缩包中的路径:FusionInsight_Cluster_集群ID_Services_Client \FusionInsight_Cluster_1_Services_ClientConfig\FusionInsight_Cluster_集群ID_Services_ClientConfig\HetuEngine\ presto-jdbc-316-hw-ei-*-SNAPSHOT二、永洪BI配置步骤1:打开Yonghong Desktop,选择“添加数据源”->“presto”步骤2:在数据源配置页面参考下图完成参数配置,“用户名”和“密码”为已创建的“人机”用户的用户名和用户密码。配置完成后可以单击“测试连接”测试。驱动:选择“自定义 > 选择自定义驱动”,单击,编辑驱动名称,单击“上传文件”上传已获取的JDBC jar包,单击“确定”。URL格式:jdbc:presto://<HSBrokerIP1:port1>:<HSBrokerIP2:port2>:<HSBrokerIP3:port3>/hive/default?serviceDiscoveryMode=hsbroker获取HSBroker节点及端口号:a.  登录FusionInsight Managerb.  选择“集群 -> 待操作的集群名称 –> 服务 -> HetuEngine –> 角色 -> HSBroker”获取HSBroker所有实例的业务IPc.  选择“集群 -> 待操作的集群名称 –> 服务 -> HetuEngine -> 配置 -> 全部配置”,右侧搜索“server.port”,获取HSBroker的端口号样例:jdbc:presto:// 192.168.8.37:29860,192.168.8.38:29860, 192.168.8.39:29860/hive/default?serviceDiscoveryMode=hsbroker服务器登录:选择“用户名和密码”,并填写“人机”用户的用户名和密码。步骤3:单击“新建数据集”,在弹出的页面参考下图修改保存路径,单击“确定”保存路径,最后“测试连接”。步骤4:在数据源选择“hetu > hive > default > 视图”,在右侧“新建数据集”选择“SQL数据集”。步骤5:在“数据源”处选择步骤3新建的数据集,显示所有表信息,选中其中一个表,如“test”表,单击“刷新数据”,可在右侧“数据详情”中显示表的所有信息。
  • [生态对接] DBeaver使用用户名密码方式对接FusionInsight HetuEngine
    前提条件:FusionInsight HD 集群安装完毕,集群状态健康已安装最新版本HetuEngine服务已在FusionInsight Hetu集群中创建“人机”用户Windows环境已安装DBeaver   说明:该方法仅适用于2021.3.30版本之后,3.30之前的版本不适用一、获取JDBC jar包  下载HetuEngine客户端。登录FusionInsight  Manager。选择“集群 > 待操作的集群名称 > 服务 > HetuEngine > 概览”。在页面右上角,选择“更多 > 下载客户端”,根据界面提示下载“完整客户端”文件到本地。解压HetuEngine客户端压缩包文件“FusionInsight_Cluster_集群ID_Services_Client.tar”获取jdbc文件,并存放在本地,例如D:\test   说明:jdbc文件在压缩包中的路径:FusionInsight_Cluster_集群ID_Services_Client \FusionInsight_Cluster_1_Services_ClientConfig\FusionInsight_Cluster_集群ID_Services_ClientConfig\HetuEngine\ presto-jdbc-316-hw-ei-*-SNAPSHOT二、DBeaver配置步骤1:打开DBeaver,点击“数据库 -> 新建连接”,搜索“PrestoSQL”并打开步骤2:单击“编辑驱动设置”步骤3:在“类名”中设置“io.prestosql.jdbc.PrestoDriver”步骤4:在“URL模板”中输入HetuEngine的URLURL格式:jdbc:presto://<HSBrokerIP1:port1>:<HSBrokerIP2:port2>:<HSBrokerIP3:port3>/hive/default?serviceDiscoveryMode=hsbroker步骤5:单击“添加文件”,选择第一节中获取的JDBC驱动包步骤6:单击“找到类”,自动获取驱动类,单击“确定”步骤7:输入用户名/密码,单击“测试连接”,连接成功后,单击“确定”->“完成”连接成功展示:
  • [二次开发] 【HD6.5.1】【hive连接失败】jdbc获取hive连接失败
    【功能模块】jdbc获取hive连接失败【操作步骤&问题现象】1、jdbc获取hive连接失败,一直报hadoop相关的错误,麻烦看看是什么原因【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [其他] 【jdbc】DWS通过jdbc达到负载均衡的效果
    如果使用自带的jdbc驱动,如下配置:jdbc:postgresql://host1:port1,host2:port2/database如果使用开源jdbc驱动,需要设置loadBalanceHosts=true,否则是failover的负载管理方式:jdbc:postgresql://host1:port1,host2:port2/database?loadBalanceHosts=true
  • [技术干货] JDBC 数据库常用连接 链接字符串
    1、Oracle8/8i/9i数据库(thin模式)Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password);2、DB2数据库Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password);3、Sql Server7.0/2000数据库Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password);4、Sybase数据库Class.forName("com.sybase.jdbc.SybDriver").newInstance(); String url =" jdbc:sybase:Tds:localhost:5007/myDB"; //myDB为你的数据库名 Properties sysProps = System.getProperties(); SysProps.put("user","userid"); SysProps.put("password","user_password"); Connection conn= DriverManager.getConnection(url, SysProps);5、Informix数据库Class.forName("com.informix.jdbc.IfxDriver").newInstance(); String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword"; //myDB为数据库名 Connection conn= DriverManager.getConnection(url);6、MySQL数据库Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" //myDB为数据库名 Connection conn= DriverManager.getConnection(url);7、PostgreSQL数据库Class.forName("org.postgresql.Driver").newInstance(); String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库名 String user="myuser"; String password="mypassword"; Connection conn= DriverManager.getConnection(url,user,password);
  • [赋能学习] Tableau对接HetuEngine指导(更新)
    说明:windows环境安装Tableau,通过ODBC接口对接HetuEngine前置条件:FusionInsight HD 集群安装完毕,集群状态健康已安装HetuEngine服务windows环境已安装Tableau一.目前支持的对接方法Keytab方式用户名/密码ODBC转JDBC方式对接Hetu支持支持JDBC方式对接Hetu待支持待支持二.  安装河图ODBC驱动ODBC驱动下载地址:https://openlookeng.io/download.html ,下载后获取文件 hetu-odbc-win64.msi下载完成后,双击安装,选默认配置即可,一直next,直到finish。三.配置数据源驱动3.1 停止自动启动的odbc服务a.         通过cmd命令行进入“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\bin ”目录cd C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\binb.         执行启动停止自动启动命令mycat.bat stop3.2 获取HetuEngine的JDBC驱动包 获取jdbc驱动包有多种方式,可从如下方式中任意选一个,获取到的jdbc驱动包为 presto-jdbc-*.jar,其中*因版本信息不同可能有所不同方式一:Manager页面获取a.       登录FusionInsight Managerb.       选择“集群 -> 服务 -> HetuEngine > 概览”c.       在页面右上角,选择“更多 > 下载客户端”,根据界面提示下载“完整客户端”文件到本地d.       解压HetuEngine客户端压缩包文件“FusionInsight_Cluster_1_HetuEngine_Client.tar”获取jdbc文件, jdbc文件路径:FusionInsight_Cluster_集群ID_HetuEngine_Client.tar/FusionInsight_Cluster_集群ID_HetuEngine_ClientConfig.tar/FusionInsight_Cluster_集群ID_HetuEngine_ClientConfig/HetuEngine/presto-jdbc-316-hw-ei-*.jar方式二:maven仓库获取获取链接: https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/io/prestosql/presto-jdbc/316-hw-ei-302002/方式三:在HetuEngine客户端获取假设客户端安装在/opt/client目录,那么获取驱动路径为 /opt/client/HetuEngine/hetuserver/bin3.3 将JDBC驱动包拷贝到ODBC中 拷贝上一步获取的jdbc文件到C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\lib目录下,并删除该目录下的hetu-jdbc-1.0.1.jar包四. 其他安全配置4.1 获取相关文件步骤1 下载HetuEngine用户的Kerberos认证文件。1.       登录FusionInsight Manager。2.       选择“系统 > 权限 > 用户”。选择对应的HetuEngine用户,在“操作”列中选择“更多 > 下载认证凭据”。3.       从下载的文件中解压后获取“user.keytab”和“krb5.conf”文件。    步骤2 使用WinSCP工具以omm用户登录FusionInsight Hetu集群中部署了HSBroker角色的节点,进入“${BIGDATA_HOME}/FusionInsight_Hetu_8.0.2.1/xxx_HSBroker/etc/”目录,下载“jaas-zk.conf”和“hetuserver.jks”文件到本地。步骤 3 参考如下修改“jaas-zk.conf”文件,“keyTab”为访问HetuEngine用户的keytab文件路径。Client   {com.sun.security.auth.module.Krb5LoginModule   requireduseKeyTab=truekeyTab="C:/hetu/user.keytab"principal="admintest@HADOOP.COM"useTicketCache=falsestoreKey=truedebug=true;};4.2 在本地etc/hosts文件添加主机与主机名映射添加内容格式为:主机IP  主机名  例如:192.162.23.221 192-162-23-2214.3 编辑ODBC的server.xml进入“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\conf”目录下,编辑server.xml中的协议前缀。将server.xml文件中属性值<property name="jdbcUrlPrefix">jdbc:lk://</property>修改为<property name="jdbcUrlPrefix">jdbc:presto://</property>4.4 keytab方式连接    1、编辑ODBC的wrapper.conf文件              a.         进入“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\conf”目录下,编辑wrapper.conf文件    增加JVM参数:wrapper.java.additional.13=-Djava.security.auth.login.config=C:\\hetu\\jaas-zk.confwrapper.java.additional.14=-Djava.security.krb5.conf=C:\\hetu\\krb5.confwrapper.java.additional.15=-Dzookeeper.auth.type=kerberoswrapper.java.additional.16=-Dzookeeper.server.principal=zookeeper/hadoop.hadoop.comwrapper.java.additional.17=-Dzookeeper.sasl.clientconfig=Client    其中java.security.auth.login.config 和 java.security.krb5.conf 需要根据自己的jaas和krb5 配置文件的存放路径而改变。  2、准备jdbc连接配置文件jdbc_param.propertiesa.       新建jdbc_param.properties文件,并添加如下内容进行配置user=admintest#password=123456SSL=trueSSLTrustStorePath=C:\\hetu\\hetuserver.jksKerberosRemoteServiceName=HTTPKerberosPrincipal=admintestKerberosServicePrincipalPattern=${SERVICE}@${HOST}KerberosConfigPath=C:\\hetu\\krb5.confKerberosKeytabPath=C:\\hetu\\user.keytabtenant=defaultdeploymentMode=on_yarnKerberosServicePrincipalPattern=${SERVICE}@${HOST}    4.5 用户名/密码方式连接   1、编辑ODBC的wrapper.conf文件a.         进入“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\conf”目录下,编辑wrapper.conf文件增加JVM参数:wrapper.java.additional.13=-Djava.security.krb5.conf=C:\\hetu\\krb5.conf        2、准备jdbc连接配置文件jdbc_param.propertiesa.       新建jdbc_param.properties文件,并添加如下内容进行配置user=admintestpassword=123456SSL=trueSSLTrustStorePath=C:\\hetu\\hetuserver.jksKerberosRemoteServiceName=HTTP#KerberosPrincipal=admintestKerberosServicePrincipalPattern=${SERVICE}@${HOST}KerberosConfigPath=C:\\hetu\\krb5.conf#KerberosKeytabPath=C:\\hetu\\user.keytabtenant=defaultdeploymentMode=on_yarn#KerberosServicePrincipalPattern=${SERVICE}@${HOST} 4.6 重启odbc服务:a.       进入“C:\Program Files\openLooKeng\openLooKeng ODBC Driver 64-bit\odbc_gateway\mycat\bin”目录b.       执行启动命令mycat.bat restart备注:每次修改配置时都需要停止odbc服务,修改完毕后再重启服务。五. 配置ODBC数据源连接5.1 在window 系统的控制面板中输入odbc搜索odbc的管理程序,如图: 5.2 应用程序中点击 “添加” ->  “openLooKeng ODBC 1.1 Driver”-> ”完成”5.3 填写名称和描述 5.4  点击Next后,填写URL, 选择JDBC配置文件,填写User Name 参数说明:参数样例说明Connection URL192.168.8.37:24002,192.168.8.38:24002,192.168.8.39:24002?serviceDiscoveryMode=zooKeeper&zooKeeperNamespace=hsbroker可通过HetuEngine的客户端hetu-cli启动时,记录连接的url,注意这里不需要输入前缀jdbc:presto://Connection ConfigC:\hetu\jdbc_param.properties4.4章节中创建的jdbc连接配置文件User Nameadmintest认证使用的用户名Password留空,实际值在配置文件中修改Catalog留空Schema留空5.5 测试连接点击Test DSN , 如下提示则为正常连接成功: 点击next, Finish 即可六. tableua对接6.1 选择“其他数据库(ODBC)”6.2  选择DSN, 选择第五章新建的数据源Hive1 6.3 点击 “连接” -> “登陆” 6.4 选择数据库,对数据进行操作即可:
  • [技术干货] 通过JDBC连接PostgreSQL数据库
    通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。前提条件用户需要具备以下技能:熟悉计算机基础知识。了解java编程语言。了解JDBC基础知识。驱动获取及使用JDBC驱动下载地址:https://jdbc.postgresql.org/download.htmlJDBC接口使用指南请参考:https://jdbc.postgresql.org/documentation/head/index.html使用SSL证书连接说明:该方式属于SSL连接模式,需要下载SSL证书,通过证书校验并连接数据库。你可以在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“数据库信息”模块“SSL”处的下载图标,下载根证书或**包。通过JDBC连接PostgreSQL数据库,代码中的JDBC链接格式如下:jdbc:postgresql://<instance_ip>:<instance_port>/<database_name>?sslmode=verify-full&sslrootcert=<ca.pem>参数说明:参数说明<instance_ip>如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。<instance_port>端口,默认5432,当前端口,参考“基本信息”页面该实例的“数据库端口”。<database_name>数据库名,即需要连接的数据库名(默认的管理数据库是postgres)。sslmodessl连接模式,默认全认证模式。sslrootcertssl连接CA证书路径,该文件需放在执行该命令的路径下。连接PostgreSQL数据库的java代码,可参考以下示例import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MyConnTest { final public static void main(String[] args) { Connection conn = null; // set sslmode here. // with ssl certificate and path. String url = "jdbc:postgresql://192.168.0.225:5432/my_db_test?sslmode=verify-full&sslrootcert=/home/Ruby/ca.pem"; try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, "root", "password"); System.out.println("Database connected"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("Test failed"); } finally { // release resource .... } } }无证书连接说明:该方式属于SSL连接模式,但不对服务端进行证书校验,用户无需下载SSL证书。通过JDBC连接RDS PostgreSQL数据库实例,代码中的JDBC链接格式如下:jdbc:postgresql://<instance_ip>:<instance_port>/<database_name>?sslmode=disable连接PostgreSQL数据库的java代码,可参考以下示例:import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class MyConnTest { final public static void main(String[] args) { Connection conn = null; // set sslmode here. // no ssl certificate, so do not specify path. String url = "jdbc:postgresql://192.168.0.225:5432/my_db_test?sslmode=disable"; try { Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection(url, "root", "password"); System.out.println("Database connected"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500"); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); System.out.println("Test failed"); } finally { // release resource .... } } }