友情链接:
JDBC( Java 数据库连接)是一种用于执行 SQL 语句的 Java API,提供查询、更新数据库中数据的方法,工作流程如下:
JDBC 工作流程
接下来将为您提供详尽的教程,帮助您快速开发 Java 程序来连接和读写Inceptor/ArgoDB 数据库。
如果您是首次尝试开发,您可以阅读下方开发流程了解基本开发步骤,然后基于示例代码简单修改即可。
如果您已经熟悉开发流程:您可以阅读下一篇文章 JDBC 接口参考,快速查找相关接口的使用说明。
JDBC 或 ODBC 驱动程序用于连接 Transwarp Inceptor/ ArgoDB 数据库,在开发应用程序前,您需要登录 Transwarp Manager 平台下载相关驱动程序。
4. 在弹出的面板中,单击下载(推荐下载 All-in-one 包)。
或者也可以点击社区驱动下载页面下载对应驱动:驱动下载页面
JDBC API 提供来自 Java 编程语言的通用数据访问,主要位于 java.sql 包中,定义了访问数据库的接口和类,常用的 API 如下:
Inceptor/ArgoDB 支持完整的 SQL 标准语法,可兼容 Oracle、IBM DB2、Teradata 方言,本章节中,我们将介绍如何开发 Java 应用程序对 Inceptor/ArgoDB 数据进行操作,通用开发流程如下:
在开发 Java 应用程序前,请确保 JDK 版本为 1.8 及以上。
JDBC 开发流程
接下来,我们将介绍各步骤的详细操作及示例代码供您参考:
1. 在项目中加载您下载的驱动包,以 IntelliJ IDEA 开发工具为例,流程如下:
2. 开始编写项目中的 Java 代码,首先我们在代码中加载 jar 包 和 JDBC 驱动。
// 导入 jar 包
import java.sql.*;
// 加载 JDBC 驱动
Class.forName("org.apache.hive.jdbc.HiveDriver");
3. 在 DriverManager 中,使用 DriverManager.getConnection() 方法获取数据库连接(Connection)。
下述示例代码以连接免认证的 Inceptor/ArgoDB 数据库为例,如数据库开启了认证,请参考示例代码章节。
String jdbcURL = "jdbc:transwarp2://<host_ip>:<port>/<database_name>;<JDBC_Conf>?<Inceptor/ArgoDB_Conf>";
Connection conn = DriverManager.getConnection(jdbcURL);
a) <host_ip>:数据库的连接地址,即 Quark 组件的服务地址,您可以登录 Transwarp Manager 平台,找到 Quark 组件并获取其服务地址。
b) <port>:数据库服务端口,默认为 10000。
c) <database_name>:要连接的数据库名。
d) <JDBC_Conf>:JDBC 连接参数,多个参数间通过英文分号(;)分隔,常见参数如下:
e) <Inceptor/ArgoDB_Conf>:Inceptor/ArgoDB 连接参数,多个参数间通过英文分号(;)分隔,常用参数为 ngmr.execute.mode,即设置 Inceptor/ArgoDB 的执行模式。
4. 提交 SQL 语句至数据库执行,可使用 Statement 或 PreparedStatement 构建。
Statement stmt = conn.createStatement();
stmt.executeUpdate( "insert into table_test values(a,a)" );
stmt.executeUpdate( "delete from table_test where col1=a" );
stmt.executeQuery( "select * from table_test" );
stmt.execute( "begin transaction" );
ps = conn.prepareStatement( "SELECT i.*, j.* FROM Omega i, Zappa j WHERE i = ? AND j = ?" );
ps.setString(1, "Poor Yorick");
ps.setInt(2, 8008);
rs = ps.executeQuery();
5. (可选)通过 JDBC 执行事务。
默认情况下,处于自动提交模式,即每执行一条 SQL 都是作为事务自动执行的,您也可以使用 begin transaction,可以在一个事务中执行多条语句,事务以 commit 结束。
stmt.execute("begin transaction");
stmt.executeUpdate(SQL 1);
stmt.executeUpdate(SQL 2);
stmt.executeUpdate(SQL 3);
stmt.execute("commit");
6. 使用 ResultSet.getXXX() 方法获取数据结果。
int numColumns = rs.getMetaData().getColumnCount();
while ( rs.next() ) {
for ( int i = 1 ; i <= numColumns ; i++ ) {
System.out.println( "COLUMN " + i + " = " + rs.getObject(i) );
}
}
7. 关闭所有的数据库资源。
rs.close();
stmt.close();
conn.close();
异常处理允许我们以受控的方式处理异常情况,而不是直接退出程序。例如数据库操作失败,JDBC 将抛出一个 SQLException,此类异常很少能够恢复,此时需要尽可能详细地打印异常日志,将 SQLException 翻译成应用程序领域相关的异常(非强制处理异常),然后回滚数据库并通知用户。
为帮助您更好地上手 Inceptor 相关应用程序的开发,下文提供了不同验证模式下,与 Inceptor 进行交互的相关代码功能参考。
当 Inceptor 未开启认证时,您可以参考下述代码连接并操作 Inceptor,相关说明请参考代码中的注释。
package demo;
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
// 加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 本示例连接至 default 数据库,您也可以指定要连接的数据库
String jdbcURL = "jdbc:transwarp2://172.18.130.13:10000/default";
Connection conn = DriverManager.getConnection(jdbcURL);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from table_jdbc");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
当 Inceptor 启用了 Kerberos 认证时,您可以参考下述代码连接并操作 Inceptor。
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 建立连接
String jdbcURL = "jdbc:transwarp2://localhost:10000/default;principal=hive/node@TDH;"+
"authentication=kerberos;"+
"kuser=user_principal;"+
"keytab=keytab_path;"+
"krb5conf=krb5.conf_path";
Connection conn = DriverManager.getConnection(jdbcURL);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select c1, c2 from table1");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
① 连接至开启 Kerberos 认证的 Inceptor 的 JDBC 连接串,格式为 jdbc:transwarp2://<host_ip>:10000/<database_name>;principal=<username>/node@TDH;
② kuser:将值设置为 Inceptor server的用户的 principal。
③ keytab_path:将值设置为 user_principal 对应 keytab 文件的绝对路径 。
目前尚不支持在应用程序中使用 principal + 密码的认证方式。
④ krb5.conf_path:将值设置为 Kerberos 配置文件 krb5.conf 的绝对路径 。
当 Inceptor 启用了 LDAP 认证时,您可以参考下述代码连接并操作 Inceptor。
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 连接数据库,本示例连接至 default 数据库,您也可以指定要连接的数据库
String jdbcURL = "jdbc:transwarp2://localhost:10000/default";
// 访问 Inceptor 的用户名。
String user = "user";
// 用户名对应的密码。
String password = "password";
Connection conn = DriverManager.getConnection(jdbcURL, user, password);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select c1, c2 from table1");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
由于篇幅原因,有关 JDBC 4 支持的接口及返回类型功能参考,可参考下一篇:JDBC 接口参考
如果上述内容对您有提供帮助,欢迎多多点赞支持~😎
友情链接:
JDBC( Java 数据库连接)是一种用于执行 SQL 语句的 Java API,提供查询、更新数据库中数据的方法,工作流程如下:
JDBC 工作流程
接下来将为您提供详尽的教程,帮助您快速开发 Java 程序来连接和读写Inceptor/ArgoDB 数据库。
如果您是首次尝试开发,您可以阅读下方开发流程了解基本开发步骤,然后基于示例代码简单修改即可。
如果您已经熟悉开发流程:您可以阅读下一篇文章 JDBC 接口参考,快速查找相关接口的使用说明。
JDBC 或 ODBC 驱动程序用于连接 Transwarp Inceptor/ ArgoDB 数据库,在开发应用程序前,您需要登录 Transwarp Manager 平台下载相关驱动程序。
4. 在弹出的面板中,单击下载(推荐下载 All-in-one 包)。
或者也可以点击社区驱动下载页面下载对应驱动:驱动下载页面
JDBC API 提供来自 Java 编程语言的通用数据访问,主要位于 java.sql 包中,定义了访问数据库的接口和类,常用的 API 如下:
Inceptor/ArgoDB 支持完整的 SQL 标准语法,可兼容 Oracle、IBM DB2、Teradata 方言,本章节中,我们将介绍如何开发 Java 应用程序对 Inceptor/ArgoDB 数据进行操作,通用开发流程如下:
在开发 Java 应用程序前,请确保 JDK 版本为 1.8 及以上。
JDBC 开发流程
接下来,我们将介绍各步骤的详细操作及示例代码供您参考:
1. 在项目中加载您下载的驱动包,以 IntelliJ IDEA 开发工具为例,流程如下:
2. 开始编写项目中的 Java 代码,首先我们在代码中加载 jar 包 和 JDBC 驱动。
// 导入 jar 包
import java.sql.*;
// 加载 JDBC 驱动
Class.forName("org.apache.hive.jdbc.HiveDriver");
3. 在 DriverManager 中,使用 DriverManager.getConnection() 方法获取数据库连接(Connection)。
下述示例代码以连接免认证的 Inceptor/ArgoDB 数据库为例,如数据库开启了认证,请参考示例代码章节。
String jdbcURL = "jdbc:transwarp2://<host_ip>:<port>/<database_name>;<JDBC_Conf>?<Inceptor/ArgoDB_Conf>";
Connection conn = DriverManager.getConnection(jdbcURL);
a) <host_ip>:数据库的连接地址,即 Quark 组件的服务地址,您可以登录 Transwarp Manager 平台,找到 Quark 组件并获取其服务地址。
b) <port>:数据库服务端口,默认为 10000。
c) <database_name>:要连接的数据库名。
d) <JDBC_Conf>:JDBC 连接参数,多个参数间通过英文分号(;)分隔,常见参数如下:
e) <Inceptor/ArgoDB_Conf>:Inceptor/ArgoDB 连接参数,多个参数间通过英文分号(;)分隔,常用参数为 ngmr.execute.mode,即设置 Inceptor/ArgoDB 的执行模式。
4. 提交 SQL 语句至数据库执行,可使用 Statement 或 PreparedStatement 构建。
Statement stmt = conn.createStatement();
stmt.executeUpdate( "insert into table_test values(a,a)" );
stmt.executeUpdate( "delete from table_test where col1=a" );
stmt.executeQuery( "select * from table_test" );
stmt.execute( "begin transaction" );
ps = conn.prepareStatement( "SELECT i.*, j.* FROM Omega i, Zappa j WHERE i = ? AND j = ?" );
ps.setString(1, "Poor Yorick");
ps.setInt(2, 8008);
rs = ps.executeQuery();
5. (可选)通过 JDBC 执行事务。
默认情况下,处于自动提交模式,即每执行一条 SQL 都是作为事务自动执行的,您也可以使用 begin transaction,可以在一个事务中执行多条语句,事务以 commit 结束。
stmt.execute("begin transaction");
stmt.executeUpdate(SQL 1);
stmt.executeUpdate(SQL 2);
stmt.executeUpdate(SQL 3);
stmt.execute("commit");
6. 使用 ResultSet.getXXX() 方法获取数据结果。
int numColumns = rs.getMetaData().getColumnCount();
while ( rs.next() ) {
for ( int i = 1 ; i <= numColumns ; i++ ) {
System.out.println( "COLUMN " + i + " = " + rs.getObject(i) );
}
}
7. 关闭所有的数据库资源。
rs.close();
stmt.close();
conn.close();
异常处理允许我们以受控的方式处理异常情况,而不是直接退出程序。例如数据库操作失败,JDBC 将抛出一个 SQLException,此类异常很少能够恢复,此时需要尽可能详细地打印异常日志,将 SQLException 翻译成应用程序领域相关的异常(非强制处理异常),然后回滚数据库并通知用户。
为帮助您更好地上手 Inceptor 相关应用程序的开发,下文提供了不同验证模式下,与 Inceptor 进行交互的相关代码功能参考。
当 Inceptor 未开启认证时,您可以参考下述代码连接并操作 Inceptor,相关说明请参考代码中的注释。
package demo;
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
// 加载驱动
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 本示例连接至 default 数据库,您也可以指定要连接的数据库
String jdbcURL = "jdbc:transwarp2://172.18.130.13:10000/default";
Connection conn = DriverManager.getConnection(jdbcURL);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from table_jdbc");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
当 Inceptor 启用了 Kerberos 认证时,您可以参考下述代码连接并操作 Inceptor。
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 建立连接
String jdbcURL = "jdbc:transwarp2://localhost:10000/default;principal=hive/node@TDH;"+
"authentication=kerberos;"+
"kuser=user_principal;"+
"keytab=keytab_path;"+
"krb5conf=krb5.conf_path";
Connection conn = DriverManager.getConnection(jdbcURL);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select c1, c2 from table1");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
① 连接至开启 Kerberos 认证的 Inceptor 的 JDBC 连接串,格式为 jdbc:transwarp2://<host_ip>:10000/<database_name>;principal=<username>/node@TDH;
② kuser:将值设置为 Inceptor server的用户的 principal。
③ keytab_path:将值设置为 user_principal 对应 keytab 文件的绝对路径 。
目前尚不支持在应用程序中使用 principal + 密码的认证方式。
④ krb5.conf_path:将值设置为 Kerberos 配置文件 krb5.conf 的绝对路径 。
当 Inceptor 启用了 LDAP 认证时,您可以参考下述代码连接并操作 Inceptor。
import java.sql.*;
public class JDBCExample {
// 驱动程序
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.exit(1);
}
// 连接数据库,本示例连接至 default 数据库,您也可以指定要连接的数据库
String jdbcURL = "jdbc:transwarp2://localhost:10000/default";
// 访问 Inceptor 的用户名。
String user = "user";
// 用户名对应的密码。
String password = "password";
Connection conn = DriverManager.getConnection(jdbcURL, user, password);
// 执行查询并获取结果
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select c1, c2 from table1");
ResultSetMetaData rsmd = rs.getMetaData();
int size = rsmd.getColumnCount();
while(rs.next()) {
StringBuffer value = new StringBuffer();
for(int i = 0; i < size; i++) {
value.append(rs.getString(i+1)).append("\t");
}
// 获取输出结果并关闭连接
System.out.println(value.toString());
}
rs.close();
stmt.close();
conn.close();
}
}
由于篇幅原因,有关 JDBC 4 支持的接口及返回类型功能参考,可参考下一篇:JDBC 接口参考
如果上述内容对您有提供帮助,欢迎多多点赞支持~😎