このトピックでは、MaxCompute JDBCドライバーのJARパッケージをダウンロードし、そのドライバーを使用してMaxComputeに接続する方法について説明します。 このトピックでは、サンプルコードも提供します。
使用上の注意
MaxCompute JDBCドライバーを使用してSQL文を実行し、実行結果を取得するには、次の要件を満たす必要があります。
あなたはプロジェクトのメンバーです。
プロジェクトに対するCREATE INSTANCE権限があること。
使用するテーブルに対するSELECTおよびDOWNLOAD権限があること。
説明MaxCompute JDBC V1.9以前を使用すると、クエリごとに一時テーブルが自動的に作成されます。 Tunnelコマンドを使用して、一時テーブルからクエリ結果を取得できます。 これらのバージョンを使用するには、CREATE TABLE権限が必要です。
MaxCompute JDBC V2.2以降を使用する場合、クエリごとに一時テーブルは自動的に作成されません。 CREATE TABLE権限があるかどうかに関係なく、InstanceTunnelインターフェイスを呼び出してクエリ結果を取得できます。
MaxCompute権限の詳細については、「MaxCompute権限」をご参照ください。
MaxCompute は、データ保護機能を提供します。 プロジェクトのデータ保護機能が有効になっている場合、プロジェクトからデータを移動することはできません。 V2.4より前のバージョンのMaxCompute JDBCを使用している場合、
result sets
は取得できません。 MaxCompute JDBC V2.4以降を使用する場合、取得する結果行の数はREAD_TABLE_MAX_ROWパラメーターの値を超えることはできません。 このパラメーターの詳細については、「プロジェクト操作」をご参照ください。 データ保護機能の詳細については、「プロジェクトデータ保護」をご参照ください。MaxCompute V2.0データ型エディションは、TINYINT、SMALLINT、DATETIME、TIMESTAMP、ARRAY、MAP、STRUCTなど、より多くのデータ型をサポートしています。 これらの新しいデータ型を使用するには、次のコマンドを実行してMaxCompute V2.0データ型エディションを有効にする必要があります。 詳細については、「Data type editions」をご参照ください。
set odps.sql.type.system.odps2=true
MaxCompute JDBCドライバーのJARパッケージをダウンロードする
異なるバージョンのMaxCompute JDBCドライバーのJARパッケージは、OSS、GitHub、またはMavenからダウンロードできます。 名前にJAR-with-dependenciesが含まれるjarパッケージをダウンロードすることを推奨します。
次のコードでは、MavenからダウンロードしたMaxCompute JDBCドライバーのProject Object Model (POM) ファイルの依存関係について説明します。
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-jdbc</artifactId>
<version>3.3.6</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
MaxCompute JDBCドライバーは、aliyun-odps-jdbcという名前のオープンソースのコードプロジェクトです。
MaxCompute JDBCドライバーの開発と改善にご参加いただけます。 [課題] タブで課題を報告し、[プルリクエスト] タブでソースコードを最適化できます。 [Issues] タブと [Pull requests] タブでの操作は、オープンソースプロジェクトのテンプレート要件に従う必要があります。
JDBCパラメータ
JDBCドライバを使用するようにURLおよびプロパティパラメーターを設定できます。 プロパティパラメーターは、URLパラメーターよりも優先度が高くなります。
URLパラメーターがodps_config=config_file
の場合、config_file
はプロパティパラメーターとして読み取られます。
基本パラメーター
URLキー
プロパティキー
必須
説明
project
project_name
必須
MaxCompute プロジェクトの名前を設定します。
accessId
access_id
必須
Alibaba CloudアカウントのAccessKey ID。
AccessKeyペアページからAccessKey IDを取得できます。
accessKey
access_key
必須
Alibaba CloudアカウントのAccessKeyシークレット。
AccessKeyペアページでAccessKey secretを取得できます。
logview
logview_host
選択可能
MaxCompute LogViewのURL。 値を
http://logview.odps.aliyun.com
に設定します。tunneelEndpoint
tunnel_endpoint
選択可能
MaxCompute Tunnelのエンドポイント。
異なるリージョンとネットワーク接続タイプに対応するTunnelエンドポイントの詳細については、「エンドポイント」をご参照ください。
ログ設定パラメーター
URLキー
プロパティキー
必須
説明
enableOdpsLogger
enable_odps_logger
選択可能
MaxCompute JDBCロガーを有効にするかどうかを指定します。 有効な値:
False: MaxCompute JDBCロガーは無効です。 ログはファイルに記録されません。 デフォルト値です。
True: MaxCompute JDBCロガーが有効になっています。 ログは、MaxCompute jdbcドライバのJARパッケージが格納されているディレクトリの
JDBC. log
ファイルに記録されます。
logConfFile
log_conf_ファイル
選択可能
Simple Logging Facade for Java (SLF4J) の設定ファイル。 この設定ファイルを指定すると、ログ出力を柔軟に設定できます。 たとえば、出力ファイルを指定し、logLevelパラメーターを設定してログレベルを指定できます。 この設定ファイルを指定するには、プロジェクトの
pom.xml
ファイルに次の依存関係を追加します。<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
設定の詳細については、「例」をご参照ください。
logLevel
log_level
選択可能
ログレベル。 デフォルト値: INFO。
その他のパラメーター
URLキー
プロパティキー
必須
説明
stsToken
sts_token
選択可能
Alibaba Cloud STSトークン。
charset
charset
選択可能
入力と出力の文字セット。 デフォルト値:UTF-8。
useProjectTimeZone
use_project_time_zone
選択可能
MaxComputeプロジェクトの
odps.sql.timezone
パラメーターで指定されたタイムゾーンを使用するかどうかを指定します。 有効な値:False: MaxComputeプロジェクトのタイムゾーンは使用されていません。 デフォルト値です。
True: MaxComputeプロジェクトのタイムゾーンが使用されています。
説明MaxComputeプロジェクトのタイムゾーンを使用するように、ステートメントで
set odps.sql.timezone=xxx
を設定することもできます。ステートメントで指定されたタイムゾーンは、プロジェクトで指定されたタイムゾーンよりも優先されます。 プロジェクトで指定されたタイムゾーンは、指定されていないタイムゾーンよりも優先されます。
disableConnectinosSetting
disable_connection_設定
選択可能
接続のSQLパラメーターを設定できるかどうかを指定します。 有効な値:
False: 接続のSQLパラメーターを設定できません。 デフォルト値です。
True: 接続のSQLパラメーターを設定できます。
このパラメーターをTrueに設定した場合、ステートメントで
set
コマンドを実行すると、ステートメントのSQLパラメーターと接続が同時に構成されます。 このパラメーターをFalseに設定した場合、set xxxコマンドをステートメントで実行すると、ステートメントのSQLパラメーターのみが構成されます。設定
設定
選択可能
デフォルトのグローバル
SQL設定
。 このパラメーターの値は、{"key":"value"}
などのJSON形式で渡されます。tableList
table_list
選択可能
MaxComputeのテーブルの名前。 テーブルの名前は、
projectname.tablename,projectname1.tablename1
形式です。connectTimeout
connect_timeout
選択可能
基になるネットワークを介して接続を確立するためのタイムアウト期間。 デフォルト値は 10 です。 単位は秒です。
readTimeout
read_timeout
選択可能
基になるネットワーク接続を介してデータを読み取るためのタイムアウト期間。 デフォルト値: 120 単位は秒です。
説明各RESTful APIリクエストの接続のタイムアウト期間は、connectTimeoutとreadTimeoutの値の合計です。 各RESTful APIリクエストのデフォルトのタイムアウト時間は130秒です。 デフォルトでは、RESTful APIリクエストで接続を確立するための再試行の最大数は3です。
RESTful APIリクエストのタイムアウト時間を調整する場合は、readTimeoutパラメーターの値を変更します。
enableCommandApi
enable_command_api
選択可能
commandAPIを使用するかどうかを指定します。 有効な値:
False: commandAPIは使用されません。 デフォルト値です。
True: commandAPIが使用されます。
このパラメーターをTrueに設定すると、JDBCドライバーを使用するときにMaxComputeクライアント (odpscmd) でのみ実行できる特定のコマンドを実行できます。
httpsCheck
https_check
選択可能
HTTPSベースの証明書検証を実行するかどうかを指定します。 有効な値:
False: HTTPSベースの証明書検証は実行されません。 デフォルト値です。
True: HTTPSベースの証明書検証が実行されます。
tunnelConnectTimeout
tunnel_connect_timeout
選択可能
tunnelコマンドを実行してデータをダウンロードするときのトンネル接続のタイムアウト期間。 デフォルト値: 180 単位は秒です。
tunnelReadTimeout
tunnel_read_timeout
選択可能
Tunnelコマンドを実行してデータをダウンロードするときのデータ読み取りのタイムアウト期間。 デフォルト値は 300 です。 単位は秒です。
MCQAに関連しないパラメータ (オフラインモード)
URLキー
プロパティキー
必須
説明
autoLimitFallback
auto_limit_フォールバック
選択可能
自動制限フォールバックを有効にするかどうかを指定します。 有効な値:
False: 自動制限フォールバックは無効です。 デフォルト値です。
True: 自動制限フォールバックが有効になっています。 オフラインモードでは、このパラメーターがTrueに設定されている場合、エラーメッセージ
no download permission
が表示されたときにダウンロードできるデータレコードの最大数が10,000されます。
MCQA関連パラメータ (MCQAモード)
基本パラメーター
False: MCQAは無効です。 デフォルト値です。
True: MCQAが有効です。
制限関連のパラメーター
URLキー
プロパティキー
必須
説明
instanceTunnelMaxRecord
instance_tunnel_max_レコード
選択可能
結果セット内のレコードの最大数。
説明このパラメーターは、enableLimitパラメーターがFalseに設定されている場合にのみ有効です。
instanceTunnelMaxSize
instance_tunnel_max_size
選択可能
結果セットの最大サイズ。 単位はバイトです。
autoSelectLimit
auto_select_limit
選択可能
クエリ内のデータの最大行数。
Alibaba Cloudのエラスティックコンピューティング環境では、デフォルトで最大100万行のデータを照会できます。 100万行を超えるデータをクエリする場合は、このパラメーターを設定できます。
説明このパラメーターは、enableLimitパラメーターがFalseに設定されている場合にのみ有効です。
V3.2.29以降のJDBCドライバーを使用する場合、autoSelectLimitパラメーターを設定すると、enableLimitパラメーターは自動的にFalseに設定されます。
odps.sql.select.auto.limit
をMaxComputeのSQL設定に追加できます。 既定では、このパラメーターはSQLジョブの実行時に有効になります。
enableLimit
enable_limit
選択可能
クエリ内のデータレコードの最大数の制限を有効にするかどうかを指定します。 有効な値:
False: クエリ内のデータレコードの最大数の制限が無効になっています。
True: クエリ内のデータレコードの最大数の制限が有効になっています。 デフォルト値です。
クエリ内のデータレコードの最大数の制限を有効にすると、ダウンロードコントロールはチェックされず、結果レコードの最大数は10,000されます。
ロールバック関連のパラメーター
URLキー
プロパティキー
必須
説明
fallbackForUnknownError
fallback_for_unknownerror
選択可能
不明なエラーが発生したときにMCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: MCQAジョブはオフラインモードにロールバックされません。
True: MCQAジョブはオフラインモードにロールバックされます。 デフォルト値です。
fallbackForResourceNotEnough
fallback_for_resourcenotenough
選択可能
リソースが不足している場合にMCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: MCQAジョブはオフラインモードにロールバックされません。
True: MCQAジョブはオフラインモードにロールバックされます。 デフォルト値です。
fallbackForUpgrading
fallback_for_upgrading
選択可能
アップグレード中にMCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: MCQAジョブはオフラインモードにロールバックされません。
True: MCQAジョブはオフラインモードにロールバックされます。 デフォルト値です。
fallbackForRunningTimeout
fallback_for_runningtimeout
選択可能
コマンドの実行時に接続がタイムアウトした場合に、MCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: MCQAジョブはオフラインモードにロールバックされません。
True: MCQAジョブはオフラインモードにロールバックされます。 デフォルト値です。
fallbackForUnsupportedFeature
fallbackForUnsupportedFeature
選択可能
MCQAがサポートされていないシナリオで、MCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: MCQAジョブはオフラインモードにロールバックされません。
True: MCQAジョブはオフラインモードにロールバックされます。 デフォルト値です。
alwaysFallback
always_fallback
選択可能
上記のすべてのシナリオでMCQAジョブをオフラインモードにロールバックするかどうかを指定します。 有効な値:
False: 自動制限フォールバックは無効です。 デフォルト値です。
True: MCQAジョブはオフラインモードにロールバックされます。
説明このパラメーターは、V3.2.3以降のMaxCompute JDBCドライバーを使用する場合にのみ有効になります。
disableFallback
disable_fallback
選択可能
上記のすべてのシナリオでMCQAジョブをオフラインモードにロールバックしないかどうかを指定します。 有効な値:
False: MCQAジョブがオフラインモードにロールバックされます。 デフォルト値です。
True: MCQAジョブはオフラインモードにロールバックされません。
fallbackQuota
fallback_quota
選択可能
MCQAジョブのロールバック時に選択されるクォータの名前。 このパラメーターを設定しない場合、MaxComputeプロジェクトのデフォルトクォータが使用されます。
URLキー
プロパティキー
必須
説明
interactiveMode
interactive_mode
選択可能
MaxComputeクエリアクセラレーション (MCQA) を有効にするかどうかを指定します。 有効な値:
executeProject
execute_project_name
選択可能
SQLタスクが実行されるMaxComputeプロジェクトの名前。
tunnelRetryTime
tunnel_retry_time
選択可能
SQLExecutorで指定したTunnelコマンドの最大リトライ回数。 デフォルト値: 6。
attachTimeout
attach_timeout
選択可能
MCQAが有効になっているときに接続を確立するためのタイムアウト期間。 デフォルト値: 60。 単位は秒です。
fallbackQuota
fallback_quota
選択可能
MCQAジョブのロールバック時に選択されるクォータの名前。 このパラメーターを設定しない場合、MaxComputeプロジェクトのデフォルトクォータが使用されます。
MaxCompute への接続
MaxCompute JDBC ドライバーを読み込みます。
Class.forName("com.aliyun.odps.jdbc.OdpsDriver");
DriverManagerを使用してMaxComputeへの接続を確立します。
Connection cnct = DriverManager.getConnection(url, accessId, accessKey);
url: URLは
jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true | false}]
形式です。 パラメーター:<maxcompute_endpoint>: 特定のリージョンのMaxComputeサービスのエンドポイント。 たとえば、中国 (杭州) リージョンのMaxComputeのパブリックエンドポイントは
http://service.cn-hangzhou.maxcompute.aliyun.com/api
です。 エンドポイントの構成情報の詳細については、「エンドポイント」をご参照ください。<maxcompute_project_name>: MaxComputeプロジェクトの名前。
useProjectTimeZone: MaxComputeプロジェクトのタイムゾーンを使用するかどうかを指定します。
サンプルコマンド:
jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true;
accessId: プロジェクトの作成に使用されたアカウントのAccessKey ID。
accessKey: プロジェクトの作成に使用されたアカウントのAccessKey IDに対応するAccessKeyシークレット。
説明AccessKey IDとAccessKeyシークレットを作成および表示する方法の詳細については、「Alibaba Cloudアカウントの作成」をご参照ください。
データクエリを実行します。
Statement stmt = cnct.createStatement(); ResultSet rset = stmt.executeQuery("SELECT foo FROM bar"); while (rset.next()) { // process the results } rset.close(); stmt.close(); cnct.close();
サンプルコード
テーブルの削除、テーブルの作成、およびメタデータの取得
説明プロジェクトでJDBC依存関係が使用されている場合、SDK依存関係を指定する必要はありません。 JDBC依存関係を設定すると、関連するSDKが自動的に使用されます。 SDKの依存関係を指定すると、コードの実行時にバージョンの不整合が原因でエラーが発生する可能性があります。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. // In this example, the AccessKey ID and AccessKey secret are saved in the environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements. // To prevent AccessKey pair leaks, we recommend that you do not directly specify the AccessKey ID and AccessKey secret in the code. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) throws SQLException { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); // create a table Statement stmt = conn.createStatement(); final String tableName = "jdbc_test"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)"); // get meta data DatabaseMetaData metaData = conn.getMetaData(); System.out.println("product = " + metaData.getDatabaseProductName()); System.out.println("jdbc version = " + metaData.getDriverMajorVersion() + ", " + metaData.getDriverMinorVersion()); ResultSet tables = metaData.getTables(null, null, tableName, null); while (tables.next()) { String name = tables.getString("TABLE_NAME"); System.out.println("inspecting table: " + name); ResultSet columns = metaData.getColumns(null, null, name, null); while (columns.next()) { System.out.println( columns.getString("COLUMN_NAME") + "\t" + columns.getString("TYPE_NAME") + "(" + columns.getInt("DATA_TYPE") + ")"); } columns.close(); } tables.close(); stmt.close(); conn.close(); } }
次の応答が返されます。
product = MaxCompute/ODPS jdbc version = 3, 0 inspecting table: jdbc_test key BIGINT(-5) value STRING(12)
テーブルを更新するUpdate a table
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use these credentials to perform operations, security risks may arise. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. // In this example, the AccessKey ID and AccessKey secret are saved in the environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements. // To prevent AccessKey pair leaks, we recommend that you do not directly specify the AccessKey ID and AccessKey secret in the code. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) throws SQLException { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); Statement stmt = conn.createStatement(); // The following DML also works //String dml = "INSERT INTO jdbc_test SELECT 1, \"foo\""; String dml = "INSERT INTO jdbc_test VALUES(1, \"foo\")"; int ret = stmt.executeUpdate(dml); assert ret == 1; stmt.close(); conn.close(); } }
複数のテーブルを同時に更新する
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. // In this example, the AccessKey ID and AccessKey secret are configured as environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements. // We recommend that you do not hard-code the AccessKey ID and AccessKey secret in your code. Otherwise, the AccessKey pair may be leaked. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) throws SQLException { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute endpoint>?project=<maxcompute project>", Main.accessId, Main.accessKey); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO jdbc_test VALUES(?, ?)"); pstmt.setLong(1, 1L); pstmt.setString(2, "foo"); pstmt.addBatch(); pstmt.setLong(1, 2L); pstmt.setString(2, "bar"); pstmt.addBatch(); int[] ret = pstmt.executeBatch(); assert ret[0] == 1; assert ret[1] == 1; pstmt.close(); conn.close(); } }
説明executeBatchメソッドは、クラスタ化されたテーブルへのバッチデータの書き込みには適していません。 たとえば、このメソッドを使用して、一度にトランザクションテーブル2.0テーブルにデータのバッチを書き込むことはできません。
データのバッチを標準のパーティションテーブルに一度に書き込む場合は、INSERT INTOステートメントでデータを書き込むパーティションを指定する必要があります。 次のコードは例を示しています。
-- Execute the following statement to create the partitioned table sale_detail. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); -- If the partitioned table contains partitions sale_date='20240219' and region='hangzhou', execute the following INSERT INTO statement to write a batch of data to the partitioned table at a time: INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
テーブルからのデータの照会
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. // In this example, the AccessKey ID and AccessKey secret are configured as environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements. // We recommend that you do not hard-code the AccessKey ID and AccessKey secret in your code. Otherwise, the AccessKey pair may be leaked. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) throws SQLException { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute endpoint>?project=<maxcompute project>", Main.accessId, Main.accessKey); ResultSet rs; Statement stmt = conn.createStatement(); String sql = "SELECT * FROM JDBC_TEST"; stmt.executeQuery(sql); ResultSet rset = stmt.getResultSet(); while (rset.next()) { System.out.println(String.valueOf(rset.getInt(1)) + "\t" + rset.getString(2)); } } }
説明OdpsStatementは、
execute(sql)
、executeQuery(sql)
、およびexecuteUpdate(sql)
のメソッドをサポートしています。execute(sql)
およびexecuteQuery(sql)
メソッドは、desc table
、show tables
、およびshow partitions
という一般的なコマンドをサポートしています。