• [生态对接] 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 .... } } }
  • [技术干货] 如何通过JDBC连接MySQL数据库
    通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。MySQL新实例默认关闭SSL数据加密,开启SSL请参考设置SSL数据加密。SSL连接实现了数据加密功能,但同时也会增加网络连接响应时间和CPU消耗,不建议开启SSL数据加密。前提条件用户需要具备以下技能:熟悉计算机基础知识。了解java编程语言。了解JDBC基础知识。使用SSL证书连接说明:该方式属于SSL连接模式,需要下载SSL证书,通过证书校验并连接数据库。通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下:jdbc:mysql://<instance_ip>:<instance_port>/<database_name>?sslmode=verify-full&sslrootcert=<ca.pem>参数说明<instance_ip>如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。<instance_port>端口,默认3306,当前端口,参考“基本信息”页面该实例的“数据库端口”。<database_name>数据库名,即需要连接的数据库名(默认的管理数据库是mysql)。sslmodessl连接模式,默认全认证模式。sslrootcertssl连接CA证书路径,该文件需放在执行该命令的路径下连接MySQL数据库的java代码,可参考以下示例:import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.Statement; import java.sql.SQLException;    public class MyConnTest {      final public static void main(String[] args) {          Connection conn = null;           Statement stat = null;        // set sslmode here.         // with ssl certificate and path.         String url = "jdbc:mysql://192.168.0.225:3306/my_db_test?sslmode=verify-full&sslrootcert=/home/Ruby/ca.pem";            try {              Class.forName("com.mysql.jdbc.Driver");              conn = DriverManager.getConnection(url, "root", "password");              System.out.println("Database connected");                Statement stmt = conn.createStatement();                String sql = "SELECT * FROM mytable WHERE columnfoo = 500";             ResultSet rs = stmt.executeQuery sql);              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证书。该方式属于SSL连接模式,但不对服务端进行证书校验,用户无需下载SSL证书。通过JDBC连接MySQL数据库实例,代码中的JDBC链接格式如下:jdbc:mysql://<instance_ip>:<instance_port>/<database_name>?sslmode=require参数说明<instance_ip>如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。<instance_port>端口,默认3306,当前端口,参考“基本信息”页面该实例的“数据库端口”。<database_name>数据库名,即需要连接的数据库名(默认的管理数据库是mysql)。sslmodessl连接模式,require模式表示进行数据加密。连接MySQL数据库的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:mysql://192.168.0.225:3306/my_db_test?sslmode=require"; 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 .... } } }
  • [技术干货] 【转载】JDBC练习--适合于新手或者温习jdbc(一个简易的在后台的学生信息的增删改查)
    一个简易的在后台的学生信息的增删改查(JDBC)1. 功能实现==运行程序控制台提示如下:==1.1 查询所有学生信息1.2 添加学生信息1.3 根据id修改学生信息1.4 根据id删除学生信息2. 代码实现2.1 导入数据库信息-- 1、创建数据库jt_db数据库(如果不存在才创建)create database if not exists jt_db charset utf8;use jt_db; -- 选择jt_db数据库-- 2、在 jt_db 库中创建 stu 表(学生表)drop table if exists stu;create table stu( stuid varchar(50), name varchar(50), gender char(2), addr varchar(50), score double);-- 3、往 stu 表中, 插入记录insert into stu values("1001",'张三','男', '北京', 86);2.2 编写JdbcUtil 工具类package cn.tedu;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** JDBC工具类 */public class JdbcUtil { /**  * 获取数据库连接对象并返回  * @return Connection对象  * @throws Exception   */ public static Connection getConn() throws Exception{ //1.注册驱动 Class.forName( "com.mysql.jdbc.Driver" ); //2.获取连接 Connection conn = DriverManager.getConnection( "jdbc:mysql:///jt_db?characterEncoding=utf-8",  "root",  "root"); return conn; } /**  * 释放JDBC程序中的资源  * @param conn 连接对象  * @param stat 传输器对象  * @param rs 结果集对象  */ public static void close(Connection conn,  Statement stat, ResultSet rs){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ rs = null; } } if(stat != null){ try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ stat = null; } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ conn = null; } } } }==如果你的数据库有密码和用户名请使用自己的==2.3 编写studentManager的类package cn.tedu;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.Scanner;import com.tedu.util.JdbcUtil;/**  * 学生信息管理系统  * 运行程序,根据选项,可以对学生信息进行增删改查操作。  */public class StudentManager { private static Scanner sc = new Scanner(System.in); public static void main(String[] args) { while (true) { //1.提示选择操作选项 System.out.print("a:查询学生信息\t"); System.out.print("b:添加学生信息\t"); System.out.print("c:修改学生信息\t"); System.out.println("d:删除学生信息"); System.out.println("请输入操作,abcd任选一项:"); String opt = sc.nextLine(); //2.根据选项执行不同操作 if( "a".equalsIgnoreCase( opt ) ){ findAll(); //查询学生信息 }else if( "b".equalsIgnoreCase( opt ) ){ addStu(); //添加学生信息 }else if( "c".equalsIgnoreCase( opt ) ){ updateStu(); //修改学生信息 }else if( "d".equalsIgnoreCase( opt ) ){ deleteStu(); //删除学生信息 }else{ System.out.println("输入错误,请重新输入!"); } } } /** a. 查询所有学生信息 */ private static void findAll() { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtil.getConn(); String sql = "select * from stu"; ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ String stuid = rs.getString("stuid"); String name = rs.getString("name"); String gender = rs.getString("gender"); String addr = rs.getString("addr"); double score = rs.getDouble("score"); System.out.println( stuid+","+name+","+gender +","+addr+","+score ); } System.out.println("------------------------------------------------------------------------------"); } catch (Exception e) { e.printStackTrace(); } } /** b. 添加学生信息 */ private static void addStu() { System.out.println("请输入要添加的学生编号:"); String stuid = sc.nextLine(); System.out.println("请输入姓名:"); String name = sc.nextLine(); System.out.println("请输入性别:"); String gender = sc.nextLine(); System.out.println("请输入地址:"); String addr = sc.nextLine(); System.out.println("请输入成绩:"); double score = Double.parseDouble(sc.nextLine()); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtil.getConn(); String sql = "insert into stu values(?,?,?,?,?)"; ps = conn.prepareStatement(sql); ps.setString(1, stuid); ps.setString(2, name); ps.setString(3, gender); ps.setString(4, addr); ps.setDouble(5, score); int rows = ps.executeUpdate(); if (rows > 0) { System.out.println("添加成功!"); } } catch (Exception e) { e.printStackTrace(); } } /** c. 根据id修改学生信息 */ private static void updateStu() { System.out.println("请输入要修改的学生编号:"); String stuid = sc.nextLine(); System.out.println("请输入要修改的姓名:"); String name = sc.nextLine(); System.out.println("请输入要修改的性别:"); String gender = sc.nextLine(); System.out.println("请输入要修改的所在地址:"); String addr = sc.nextLine(); System.out.println("请输入要修改的成绩:"); double score = Double.parseDouble(sc.nextLine()); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtil.getConn(); String sql = "update stu set name=?,gender=?" + ",addr=?,score=? where stuid=?"; ps = conn.prepareStatement(sql); ps.setString(1, name); ps.setString(2, gender); ps.setString(3, addr); ps.setDouble(4, score); ps.setString(5, stuid); int rows = ps.executeUpdate(); if (rows > 0) { System.out.println("修改成功!"); } } catch (Exception e) { e.printStackTrace(); } } /** d. 根据id删除学生信息 */ private static void deleteStu() { System.out.println("请输入要删除的学生编号:"); String stuid = sc.nextLine(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtil.getConn(); String sql = "delete from stu where stuid=?"; ps = conn.prepareStatement(sql); ps.setString(1, stuid); int rows = ps.executeUpdate(); if (rows > 0) { System.out.println("删除成功!"); } } catch (Exception e) { e.printStackTrace(); } } }2.4 加载项目,使它在服务器上运行成功GOOD GOOD STUDYDAY DAY UP结束,谢谢!!!!!!!!!!!!!!!!文章来源: www.oschina.net,作者:其乐m,版权归原作者所有,如需转载,请联系作者。原文链接:https://my.oschina.net/u/4115134/blog/3195361
  • [版主交流] 想用Spark通过JDBC驱动连接ELK查询数据库表,报错失败。。。
    1、Maven pom.xml配置如下:    postgresql     postgresql     9.1-901-1.jdbc42、通过Spark连接JDBC的java代码如下:Properties connectionProperties = Properties(); String url = ; connectionProperties.put(,); connectionProperties.put(,); connectionProperties.put(,); connectionProperties.setProperty(,url); SparkSession sparkSson = SparkSession.().appName().master().getOrCreate(); Dataset<Row> dataset = sparkSson.read().jdbc(connectionProperties.getProperty(),,connectionProperties).persist(); dataset.show(); sparkSson.close(); 3、报错信息如下: Exception in thread "main" org.postgresql.util.PSQLException: 不支援 10 验证类型。请核对您已经组态 pg_hba.conf 文件包含客户端的IP位址或网路区段,以及驱动程序所支援的验证架构模式已被支援。 at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:403) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:108) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66) at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125) at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30) at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22) at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:32) at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24) at org.postgresql.Driver.makeConnection(Driver.java:393) at org.postgresql.Driver.connect(Driver.java:267) 求论坛大神指导,这是个什么错,怎么解决?
  • [应用案例] 实际操作笔记丨JDBC问题定位指南
    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。详情请点击博文链接:https://bbs.huaweicloud.com/blogs/174793
  • [技术干货] Java中JDBC的使用详解(四)
    五、使用数据库连接池  1、原因       1.传统连接方法缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。2.数据库连接池 2、开源连接池         1.DBCP 数据库连接池 工具类如下:JdbcUtils_DBCPimport java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;   import javax.sql.DataSource;   import org.apache.commons.dbcp.BasicDataSourceFactory;     public class JdbcUtils_DBCP { private static DataSource ds = null; static{ try{ InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties prop = new Properties(); prop.load(in); BasicDataSourceFactory factory = new BasicDataSourceFactory(); ds = factory.createDataSource(prop); System.out.println(ds); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null;   } if(st!=null){ try{ st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ conn.close(); }catch (Exception e) { e.printStackTrace(); } } } }    2.C3P0 数据库连接池连接工具类:JdbcUtils_C3p0(自己在这里更改)import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;   import javax.sql.DataSource;   import org.apache.commons.dbcp.BasicDataSourceFactory;   import com.mchange.v2.c3p0.ComboPooledDataSource;     public class JdbcUtils_C3P0 { private static ComboPooledDataSource ds = null; static{ try{ ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/day16"); ds.setUser("root"); ds.setPassword("root"); ds.setInitialPoolSize(10);//最初连接数 ds.setMinPoolSize(5);//最小连接数 ds.setMaxPoolSize(20);//最大连接数 }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void release(Connection conn,Statement st,ResultSet rs){ if(rs!=null){ try{ rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null;   } if(st!=null){ try{ st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ conn.close(); }catch (Exception e) { e.printStackTrace(); } } } }也可以将配置信息放在xml文件中(src下):c3p0-config.xml<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property> <property name="user">root</property> <property name="password">root</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </default-config> <named-config name="mysql"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property> <property name="user">root</property> <property name="password">root</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config> <named-config name="oracle"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/day16</property> <property name="user">root</property> <property name="password">root</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config> </c3p0-config>这样JdbcUtils_C3p0可以改为: /*             ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/day16"); ds.setUser("root"); ds.setPassword("root"); ds.setInitialPoolSize(10);//最初连接数 ds.setMinPoolSize(5);//最小连接数 ds.setMaxPoolSize(20);//最大连接数             */              ds = new ComboPooledDataSource(""mysql"");//如果默认()
  • [技术干货] Java中JDBC的使用详解(二)
    接着上面的说:4、获取结果         Jdbc程序中的ResultSet用于代表Sql语句的执行结果。        Resultset封装执行结果时,采用的类似于表格的方式,        ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,        游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,        进行调用方法获取该行的数据。1、获取行ResultSet提供了对结果集进行滚动的方法:next():移动到下一行Previous():移动到前一行absolute(int row):移动到指定行beforeFirst():移动resultSet的最前面。afterLast() :移动到resultSet的最后面。2、获取值ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:            获取任意类型的数据                        getObject(int index)                        getObject(string columnName)    获取指定类型的数据,例如                            getString(int index)                    getString(String columnName)    常用数据类型转换:            SQL类型Jdbc对应方法返回类型tinyintgetByte()getByte()getByte()getShort()Short()intgetintintbigintbigintLongchar,varchar,longvarchargetStringStringtext(clob) blobgetClob()Clob  bolbdategetDatajava.sql.DatetimegetTimejava.sql.TimetimestampgetTimestampjava.sql.TimestampResultSet rs = null; //4.向数据库发sql,并获取代表结果集的resultset String sql = "select id,name,password,email,birthday from users"; rs = st.executeQuery(sql); //5.取出结果集的数据 rs.afterLast(); rs.previous(); System.out.println("id=" + rs.getObject("id")); System.out.println("name=" + rs.getObject("name")); System.out.println("password=" + rs.getObject("password")); System.out.println("email=" + rs.getObject("email")); System.out.println("birthday=" + rs.getObject("birthday"));或者://循环取出(id) while(rs.next()) { String id=rs.getString(1);//1代表数据库中表的列数,id在第一列也可以("id")!!! System.out.println(id+" "); }5、释放资源     Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,    这些对象通常是ResultSet, Statement和Connection对象。注意:为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。//6.关闭链接,释放资源 if(rs!=null){ try{ rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ conn.close(); }catch (Exception e) { e.printStackTrace(); } }
  • [技术干货] Java中JDBC的使用详解(一)
    一、环境介绍mysql中创建一个库shen,并创建user表和插入表的数据。新建一个Java工程jdbc,并导入数据驱动。二、详细步骤 1、加载数据库驱动//1.加载驱动(开发推荐的方式) Class.forName("com.mysql.jdbc.Driver");注意:如果连接的是SQL server//1.加载驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");2、建立连接  1、数据库URL  URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:  jdbc:mysql:[]//localhost:3306/shen ?参数名:参数值  常用数据库URL地址的写法:       Oracle:jdbc:oracle:thin:@localhost:1521:shen       SqlServer:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=shen       MySql:jdbc:mysql://localhost:3306/shen注意:如果是localhost:3306,mysql可以简写为jdbc:mysql:///sid(尽量不这样)2、Connection  Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,创建方法为:Connection conn = DriverManager.getConnection(url,user,pass); 这个对象的常用方法:String url = "jdbc:mysql://localhost:3306/shen"; String username = "shen"; String password = "Anxin062039"; Connection conn = null; //2.获取与数据库的链接 conn = DriverManager.getConnection(url, username, password);3、执行SQL语句1、Statement        Jdbc程序中的Statement对象用于向数据库发送SQL语句,创建方法为:                                     Statement st = conn.createStatement();Statement对象常用方法:Statement st = null; //3.获取用于向数据库发送sql语句的statement st = conn.createStatement(); //4.向数据库发sql String sql = "select id,name,password,email,birthday from users"; st.executeQuery(sql);2、PreperedStatement         PreperedStatement是Statement的孩子,它的实例对象可以通过调用:                                 PreperedStatement st =  conn.preparedStatement()PreperedStatement st = null; String sql = "select * from users where name=? and password=?";   //3.获取用于向数据库发送sql语句的Preperedstatement st = conn.preparedStatement(sql);//在此次传入,进行预编译 st.setString(1, username); st.setString(2, password); //4.向数据库发sql st.executeQuery();//在这里不需要传入sql比较:相对于Statement对象而言PreperedStatement可以避免SQL注入的问题如:String sql="select * from admin where loginname='"+loginName+"' and loginpwd='"+loginPwd+"'";                  在应用中:                            -》请输入账号:                                 333                            -》请输入密码:                                  wer'or'1'='1    实际上发送:select * from admin where loginname='333' and loginpwd='wer'or'1'='1',登录成功! Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。                 
  • [技术干货] jdbc连接数据库的5个步骤
    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;     public class connectionMysql {     public static void main(String[] args) {          String driver="com.mysql.jdbc.Driver";//驱动路径          String password="123456";//用户密码          try {              //1、加载驱动              Class.forName(driver);              //2、链接数据库              Connection con = DriverManager.getConnection(url, user, password);              if(!con.isClosed()){//判断数据库是否链接成功                 System.out.println("已成功链接数据库!");                 //3、创建Statement对象                 Statement st = con.createStatement();                  //4、执行sql语句                  String sql="select *from user";//查询user表的所有信息                  ResultSet rs = st.executeQuery(sql);//查询之后返回结果集                  //5、打印出结果                  while(rs.next()){                         System.out.println(rs.getString("Id")+"\t"+rs.getString("name")+"\t"+rs.getString("password"));            }             }                  rs.close();//关闭资源                  con.close();//关闭数据库             }             } catch (Exception e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }          }      }
  • [技术干货] 如何通过JDBC连接MySQL数据库
            通过JDBC连接实例的方式有无需下载SSL证书连接和用户下载SSL证书连接两种,其中使用SSL证书连接通过了加密功能,具有更高的安全性。MySQL新实例默认关闭SSL数据加密,开启SSL请参考设置SSL数据加密。SSL连接实现了数据加密功能,但同时也会增加网络连接响应时间和CPU消耗,不建议开启SSL数据加密。前提条件用户需要具备以下技能:熟悉计算机基础知识。了解java编程语言。了解JDBC基础知识。使用SSL证书连接说明: 该方式属于SSL连接模式,需要下载SSL证书,通过证书校验并连接数据库。可以在华为云的“实例管理”页面,单击实例名称进入“基本信息”页面,单击“数据库信息”模块“SSL”处的下载按钮,下载根证书或**包。通过JDBC连接MySQL数据库,代码中的JDBC链接格式如下:jdbc:mysql://<instance_ip>:<instance_port>/<database_name>?sslmode=verify-full&sslrootcert=<ca.pem>参数说明<instance_ip>如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。<instance_port>端口,默认3306,当前端口,参考“基本信息”页面该实例的“数据库端口”。<database_name>数据库名,即需要连接的数据库名(默认的管理数据库是mysql)。sslmodessl连接模式,默认全认证模式。sslrootcertssl连接CA证书路径,该文件需放在执行该命令的路径下。连接MySQL数据库的java代码,可参考以下示例:import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.Statement; import java.sql.SQLException;    public class MyConnTest {      final public static void main(String[] args) {          Connection conn = null;           Statement stat = null;     // set sslmode here.            // with ssl certificate and path.               String url = "jdbc:mysql://192.168.0.225:3306/my_db_test?sslmode=verify-full&sslrootcert=/home/Ruby/ca.pem";            try {              Class.forName("com.mysql.jdbc.Driver");              conn = DriverManager.getConnection(url, "root", "password");              System.out.println("Database connected");                Statement stmt = conn.createStatement();                String sql = "SELECT * FROM mytable WHERE columnfoo = 500";             ResultSet rs = stmt.executeQuery sql);              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连接MySQL数据库实例,代码中的JDBC链接格式如下:jdbc:mysql://<instance_ip>:<instance_port>/<database_name>?sslmode=require参数说明<instance_ip>如果通过弹性云服务器连接,“instance_ip”是主机IP,即“基本信息”页面该实例的“内网地址”。如果通过连接了公网的设备访问,“instance_ip”为该实例已绑定的“弹性公网IP”。<instance_port>端口,默认3306,当前端口,参考“基本信息”页面该实例的“数据库端口”。<database_name>数据库名,即需要连接的数据库名(默认的管理数据库是mysql)。sslmodessl连接模式,require模式表示进行数据加密。连接MySQL数据库的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:mysql://192.168.0.225:3306/my_db_test?sslmode=require"; 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 .... } } }
总条数:82 到第
上滑加载中