Panduan ini menjelaskan cara mengunduh driver JDBC MaxCompute dan menghubungkan ke MaxCompute, serta menyertakan contoh kode untuk membantu Anda memulai.
Peringatan
Untuk mengeksekusi pernyataan SQL dan memperoleh hasil eksekusinya menggunakan driver JDBC MaxCompute, Anda harus memenuhi persyaratan berikut:
Anda adalah anggota proyek.
Anda memiliki izin CREATE INSTANCE pada proyek tersebut.
Anda memiliki izin SELECT dan DOWNLOAD pada tabel yang ingin Anda gunakan.
CatatanSaat menggunakan MaxCompute JDBC V1.9 atau versi sebelumnya, tabel temporary dibuat secara otomatis untuk setiap kueri. Anda dapat menggunakan perintah Tunnel untuk memperoleh hasil kueri dari tabel temporary tersebut. Untuk menggunakan versi ini, Anda harus memiliki izin CREATE TABLE.
Saat menggunakan MaxCompute JDBC V2.2 atau versi yang lebih baru, tidak ada tabel temporary yang dibuat secara otomatis untuk setiap kueri. Anda dapat memanggil antarmuka InstanceTunnel untuk memperoleh hasil kueri, terlepas dari apakah Anda memiliki izin CREATE TABLE atau tidak.
Untuk informasi selengkapnya tentang izin MaxCompute, lihat Izin MaxCompute.
MaxCompute menyediakan fitur perlindungan data. Jika fitur perlindungan data diaktifkan untuk suatu proyek, Anda tidak dapat memindahkan data keluar dari proyek tersebut. Jika Anda menggunakan MaxCompute JDBC versi sebelum V2.4, tidak ada
result setsyang dapat diperoleh. Jika Anda menggunakan MaxCompute JDBC V2.4 atau versi yang lebih baru, jumlah baris hasil yang Anda peroleh tidak boleh melebihi nilai parameter READ_TABLE_MAX_ROW. Untuk informasi selengkapnya tentang parameter ini, lihat Operasi proyek. Untuk informasi selengkapnya tentang fitur perlindungan data, lihat Perlindungan data proyek.
Edisi tipe data MaxCompute V2.0 mendukung lebih banyak tipe data, seperti TINYINT, SMALLINT, DATETIME, TIMESTAMP, ARRAY, MAP, dan STRUCT. Untuk menggunakan tipe data baru ini, Anda harus menjalankan perintah berikut untuk mengaktifkan edisi tipe data MaxCompute V2.0. Untuk informasi selengkapnya, lihat Panduan versi tipe data.
set odps.sql.type.system.odps2=trueUntuk JDBC V3.4.1 dan versi yang lebih baru, jika Anda memiliki kueri SQL panjang (lebih dari 1 KB), Anda harus mengontrol konkurensi dengan hati-hati. Misalnya, saat menggunakan instance ECS dengan 8 vCPU dan memori 16,0 GiB, konkurensi tidak boleh melebihi 100. Jika Anda tidak dapat mengontrol konkurensi secara efektif, Anda dapat melakukan upgrade JDBC ke V3.8.8 atau V3.9.3 dan mengatur
skipCheckIfSelect=trueuntuk menonaktifkan fitur parsing SQL. Untuk informasi selengkapnya tentang fitur ini, lihat Pembaruan versi.
Mengunduh driver JDBC
Anda dapat memperoleh paket JAR MaxCompute untuk berbagai versi dari OSS, GitHub, atau Repositori Maven. Kami menyarankan Anda mengunduh paket JAR yang mencakup semua dependensi (jar-with-dependencies).
Contoh berikut menunjukkan dependensi Project Object Model (POM) untuk menggunakan driver JDBC MaxCompute dengan Maven.
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-jdbc</artifactId>
<version>3.8.6</version>
<classifier>jar-with-dependencies</classifier>
</dependency>Driver JDBC MaxCompute adalah proyek open source yang tersedia di aliyun-odps-jdbc.
Kami menyambut kontribusi Anda dalam pengembangan dan peningkatan driver JDBC ini. Anda dapat melaporkan isu di halaman Issues atau memberikan kontribusi perbaikan kode melalui Pull requests. Saat menggunakan Issues dan Pull requests, ikuti persyaratan templat proyek.
Parameter JDBC
Anda dapat mengonfigurasi JDBC menggunakan parameter URL dan objek Properties. Objek Properties memiliki prioritas lebih tinggi dan menggantikan parameter URL.
Jika kunci URL berisi odps_config=config_file, JDBC membaca config_file sebagai parameter Properties.
Parameter dasar
Kunci URL
Kunci properti
Wajib
Deskripsi
project
project_name
Ya
Nama proyek MaxCompute.
accessId
access_id
Ya
ID AccessKey Akun Alibaba Cloud Anda.
Anda dapat memperoleh ID AccessKey Anda di halaman Manajemen AccessKey.
accessKey
access_key
Ya
Rahasia AccessKey Akun Alibaba Cloud Anda.
Anda dapat memperoleh rahasia AccessKey Anda di halaman Manajemen AccessKey.
logview
logview_host
Tidak
URL MaxCompute LogView. Nilainya tetap pada
http://logview.odps.aliyun.com.tunnelEndpoint
tunnel_endpoint
Tidak
Titik akhir layanan MaxCompute Tunnel.
Untuk titik akhir Tunnel tiap wilayah dan jenis jaringan, lihat Titik akhir.
Parameter konfigurasi log
Kunci URL
Kunci properti
Wajib
Deskripsi
enableOdpsLogger
enable_odps_logger
Tidak
Menentukan apakah akan mengaktifkan logger JDBC MaxCompute. Nilai yang valid:
False (default): Menonaktifkan logger.
True: Diaktifkan. Log ditulis ke file
jdbc.logdi direktori paket JAR.
logConfFile
log_conf_file
Tidak
Anda dapat menentukan file konfigurasi SLF4J tambahan untuk mengonfigurasi output log secara fleksibel, seperti file output dan logLevel. Metode ini mengharuskan Anda menambahkan dependensi berikut ke file
pom.xmlproyek Anda:<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>Untuk contoh konfigurasi, lihat Contoh file konfigurasi.
logLevel
log_level
Tidak
Tingkat log output. Nilai default: INFO.
Parameter lainnya
Kunci URL
Kunci properti
Wajib
Deskripsi
stsToken
sts_token
Tidak
Token STS Alibaba Cloud.
charset
charset
Tidak
Set karakter untuk input dan output. Nilai default: UTF-8.
useProjectTimeZone
use_project_time_zone
Tidak
Menentukan apakah akan menggunakan properti
odps.sql.timezoneproyek. Nilai yang valid:False (default): Tidak menggunakan properti tersebut.
True: Menggunakan properti tersebut.
CatatanAnda juga dapat menentukan zona waktu dalam pernyataan dengan menggunakan
set odps.sql.timezone=xxx.Urutan prioritas: Pernyataan > proyek > null.
disableConnectionSetting
disable_connection_setting
Tidak
Menentukan apakah akan mengizinkan pengaturan parameter SQL untuk koneksi. Nilai yang valid:
False (default): Tidak diizinkan.
True: Diizinkan.
Saat parameter ini diatur ke true, perintah
set xxxberlaku untuk pernyataan maupun koneksi. Jika tidak, hanya berlaku untuk pernyataan.settings
settings
Tidak
String JSON untuk
sql settingdefault global. Contoh:{"key":"value"}.tableList
table_list
Tidak
Nama tabel MaxCompute. Format:
projectname.tablename,projectname1.tablename1.connectTimeout
connect_timeout
Tidak
Timeout untuk membangun koneksi jaringan. Nilai default: 10 detik (s).
readTimeout
read_timeout
Tidak
Timeout untuk membaca data dari koneksi jaringan. Nilai default: 120 detik (s).
CatatanTotal timeout untuk setiap permintaan API RESTful adalah jumlah dari connectTimeout dan readTimeout, yang secara default 130 detik. Driver mencoba ulang setiap permintaan hingga 3 kali.
Untuk menyesuaikan timeout koneksi untuk permintaan API RESTful, ubah parameter readTimeout.
enableCommandApi
enable_command_api
Tidak
Menentukan apakah akan menggunakan command API. Nilai yang valid:
False (default): Command API tidak digunakan.
True: Command API digunakan.
Saat diaktifkan, Anda dapat menjalankan perintah di JDBC yang biasanya eksklusif untuk odpscmd.
httpsCheck
https_check
Tidak
Menentukan apakah akan melakukan verifikasi sertifikat HTTPS. Nilai yang valid:
False (default): Verifikasi tidak dilakukan.
True: Verifikasi dilakukan.
tunnelConnectTimeout
tunnel_connect_timeout
Tidak
Periode timeout koneksi untuk Tunnel saat Anda mengunduh data. Nilai default: 180 detik (s).
tunnelReadTimeout
tunnel_read_timeout
Tidak
Periode timeout baca untuk Tunnel saat Anda mengunduh data. Nilai default: 300 detik (s).
skipCheckIfSelect
skipCheckIfSelect
Tidak
Menentukan apakah akan melewati parsing SQL. Nilai yang valid:
False (default): Tidak melewati parsing.
True: Melewati parsing.
CatatanMelewati parsing dapat mengurangi konsumsi CPU dan memori di sisi klien, tetapi dapat meningkatkan latensi untuk pernyataan non-SELECT.
Parameter non-MCQA (hanya berlaku dalam mode offline)
Kunci URL
Kunci properti
Wajib
Deskripsi
autoLimitFallback
auto_limit_fallback
Tidak
Fallback batas otomatis. Nilai yang valid:
False (default): Tidak melakukan fallback.
True: Melakukan fallback. Dalam mode offline, ketika Tunnel melaporkan pengecualian
no download permission, driver secara otomatis melakukan fallback dan membatasi jumlah catatan yang diunduh menjadi 10.000.
Parameter MaxQA/MCQA 1.0 (hanya berlaku untuk MaxQA/MCQA 1.0)
Konfigurasi dasar
False (default): Dinonaktifkan.
True: Diaktifkan.
Parameter terkait batas
Kunci URL
Kunci properti
Wajib
Deskripsi
instanceTunnelMaxRecord
instance_tunnel_max_record
Tidak
Jumlah maksimum catatan dalam set hasil.
CatatanParameter ini hanya berlaku saat parameter enableLimit diatur ke False.
instanceTunnelMaxSize
instance_tunnel_max_size
Tidak
Ukuran maksimum set hasil. Satuan: byte.
autoSelectLimit
auto_select_limit
Tidak
Batas kueri otomatis.
Secara default, Anda dapat mengkueri maksimal 1.000.000 baris di lingkungan cloud publik Alibaba Cloud. Untuk mengkueri lebih banyak data, Anda dapat mengonfigurasi parameter ini.
CatatanParameter ini hanya berlaku saat parameter enableLimit diatur ke False.
Untuk JDBC V3.2.29 dan versi yang lebih baru, jika Anda mengatur parameter autoSelectLimit, parameter enableLimit secara otomatis diatur ke False.
enableLimit
enable_limit
Tidak
Menentukan apakah akan mengaktifkan batas. Nilai yang valid:
False: Batas tidak diaktifkan.
True (default): Batas diaktifkan.
Jika diaktifkan, izin unduh tidak diperiksa, dan set hasil dibatasi hingga 10.000 catatan secara default.
Parameter terkait fallback
Kunci URL
Kunci properti
Wajib
Deskripsi
fallbackForUnknownError
fallback_for_unknownerror
Tidak
Menentukan apakah akan melakukan fallback ke mode offline saat terjadi error yang tidak dikenal. Nilai yang valid:
False: Tidak melakukan fallback.
True (default): Melakukan fallback.
fallbackForResourceNotEnough
fallback_for_resourcenotenough
Tidak
Menentukan apakah akan melakukan fallback ke mode offline saat sumber daya tidak mencukupi. Nilai yang valid:
False: Tidak melakukan fallback.
True (default): Melakukan fallback.
fallbackForUpgrading
fallback_for_upgrading
Tidak
Menentukan apakah akan melakukan fallback ke mode offline selama proses upgrade. Nilai yang valid:
False: Tidak melakukan fallback.
True (default): Melakukan fallback.
fallbackForRunningTimeout
fallback_for_runningtimeout
Tidak
Menentukan apakah akan melakukan fallback ke mode offline saat perintah operasi mengalami timeout. Nilai yang valid:
False: Tidak melakukan fallback.
True (default): Melakukan fallback.
fallbackForUnsupportedFeature
fallback_for_unsupported_feature
Tidak
Menentukan apakah akan melakukan fallback ke mode offline saat menggunakan fitur MCQA yang tidak didukung. Nilai yang valid:
False: Tidak melakukan fallback.
True (default): Melakukan fallback.
alwaysFallback
always_fallback
Tidak
Menentukan apakah akan melakukan fallback ke mode offline dalam semua skenario di atas. Nilai yang valid:
False (default): Tidak melakukan fallback.
True: Melakukan fallback.
CatatanParameter ini hanya didukung di JDBC V3.2.3 dan versi yang lebih baru.
disableFallback
disable_fallback
Tidak
Menentukan apakah akan menonaktifkan fallback ke mode offline dalam semua skenario di atas. Nilai yang valid:
False (default): Melakukan fallback.
True: Tidak melakukan fallback.
fallbackQuota
fallback_quota
Tidak
Nama kuota tempat pekerjaan MCQA melakukan fallback. Jika tidak dikonfigurasi, kuota default proyek akan digunakan.
Kunci URL
Kunci properti
Wajib
Deskripsi
interactiveMode
interactive_mode
Tidak
Menentukan apakah akan mengaktifkan MaxQA/MCQA 1.0. Nilai yang valid:
executeProject
execute_project_name
Tidak
Nama proyek MaxCompute tempat tugas SQL benar-benar dijalankan.
tunnelRetryTime
tunnel_retry_time
Tidak
Jumlah percobaan ulang Tunnel untuk SQLExecutor. Nilai default: 6.
attachTimeout
attach_timeout
Tidak
Periode timeout untuk membangun koneksi MCQA 1.0. Nilai default: 60 detik (s).
fallbackQuota
fallback_quota
Tidak
Kuota yang digunakan saat pekerjaan MCQA 1.0 melakukan fallback. Jika tidak dikonfigurasi, kuota default proyek akan digunakan.
quotaName
quota_name
Tidak
Kuota sumber daya komputasi yang digunakan oleh pekerjaan MaxQA.
Menghubungkan ke MaxCompute
Memuat driver JDBC MaxCompute.
Class.forName("com.aliyun.odps.jdbc.OdpsDriver");Membuat koneksi menggunakan DriverManager.
Connection cnct = DriverManager.getConnection(url, accessId, accessKey);url: URL harus dalam format berikut:
jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}]. Parameter dijelaskan sebagai berikut:<maxcompute_endpoint>: Titik akhir layanan MaxCompute untuk wilayah tersebut. Misalnya, titik akhir publik untuk wilayah China (Hangzhou) adalah
http://service.cn-hangzhou.maxcompute.aliyun.com/api. Untuk informasi selengkapnya, lihat Titik akhir.<maxcompute_project_name>: Nama proyek MaxCompute.
useProjectTimeZone: Menentukan apakah akan menggunakan zona waktu proyek MaxCompute.
Contoh:
jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true;accessId: ID AccessKey Akun Alibaba Cloud Anda.
accessKey: Rahasia AccessKey yang sesuai dengan ID AccessKey tersebut.
CatatanUntuk membuat dan melihat ID AccessKey serta rahasia AccessKey, lihat Menyiapkan Akun Alibaba Cloud.
Menjalankan kueri.
try ( Statement stmt = cnct.createStatement(); ResultSet rset = stmt.executeQuery("SELECT foo FROM bar;") ) { while (rset.next()) { // proses hasilnya } } catch (SQLException e) { // tangani pengecualian } finally { if (cnct != null) { try { cnct.close(); } catch (SQLException e) { // Abaikan atau catat pengecualian closed } } }
Contoh kode
Menghapus tabel, membuat tabel, dan mendapatkan metadata
CatatanJika Anda menambahkan dependensi JDBC ke proyek Anda, jangan menambahkan dependensi SDK secara terpisah. Dependensi JDBC sudah mencakup SDK yang diperlukan, dan menambahkannya secara terpisah dapat menyebabkan error ketidakcocokan versi.
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"; // Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin untuk semua operasi API, yang merupakan risiko keamanan. Kami sangat menyarankan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Untuk membuat Pengguna RAM, login ke Konsol RAM. // Contoh ini menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda. // Untuk keamanan, jangan hardcode ID AccessKey dan Rahasia AccessKey dalam kode Anda. 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) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); Statement stmt = conn.createStatement() ) { // membuat tabel final String tableName = "jdbc_test"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)"); // mendapatkan metadata DatabaseMetaData metaData = conn.getMetaData(); System.out.println("product = " + metaData.getDatabaseProductName()); System.out.println("jdbc version = " + metaData.getDriverMajorVersion() + ", " + metaData.getDriverMinorVersion()); try (ResultSet tables = metaData.getTables(null, "default", tableName, null)) { while (tables.next()) { String name = tables.getString("TABLE_NAME"); System.out.println("inspecting table: " + name); try (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") + ")"); } } } } } catch (SQLException e) { e.printStackTrace(); } } }Contoh output:
product = MaxCompute/ODPS jdbc version = 3, 8 inspecting table: jdbc_test key BIGINT(-5) value STRING(12)Memperbarui tabel
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"; // Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin untuk semua operasi API, yang merupakan risiko keamanan. Kami sangat menyarankan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Untuk membuat Pengguna RAM, login ke Konsol RAM. // Contoh ini menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda. // Untuk keamanan, jangan hardcode ID AccessKey dan Rahasia AccessKey dalam kode Anda. 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) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); Statement stmt = conn.createStatement() ) { // DML berikut juga berfungsi // 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; } catch (SQLException e) { e.printStackTrace(); } } }Memperbarui tabel secara batch
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"; // Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin untuk semua operasi API, yang merupakan risiko keamanan. Kami sangat menyarankan menggunakan Pengguna RAM untuk akses API atau O&M rutin. // Contoh ini menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda. // Untuk keamanan, jangan hardcode ID AccessKey dan Rahasia AccessKey dalam kode Anda. 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) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO jdbc_test VALUES(?, ?)") ) { // Batch pertama pstmt.setLong(1, 1L); pstmt.setString(2, "foo"); pstmt.addBatch(); // Batch kedua pstmt.setLong(1, 2L); pstmt.setString(2, "bar"); pstmt.addBatch(); int[] ret = pstmt.executeBatch(); assert ret[0] == 1; assert ret[1] == 1; } catch (SQLException e) { e.printStackTrace(); } } }CatatanMetode executeBatch tidak mendukung penulisan batch ke tabel terkluster, seperti tabel Transaction Table 2.0.
Untuk menulis data ke tabel partisi standar secara batch, Anda harus menentukan partisi target dalam pernyataan INSERT INTO. Contoh:
-- Pernyataan pembuatan tabel untuk tabel partisi sale_detail adalah sebagai berikut. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); -- Asumsikan bahwa partisi sale_date='20240219', region='hangzhou' sudah ada. Pernyataan INSERT INTO untuk penulisan batch ke tabel partisi adalah sebagai berikut. INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
Kueri Tabel
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"; // Pasangan Kunci Akses Akun Alibaba Cloud memiliki izin untuk semua operasi API, yang merupakan risiko keamanan. Kami sangat menyarankan menggunakan Pengguna RAM untuk akses API atau O&M rutin. // Contoh ini menyimpan ID AccessKey dan Rahasia AccessKey dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda. // Untuk keamanan, jangan hardcode ID AccessKey dan Rahasia AccessKey dalam kode Anda. 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) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", accessId, accessKey); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM JDBC_TEST") ) { while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } } catch (SQLException e) { e.printStackTrace(); } } }CatatanOdpsStatement mendukung tiga metode:
execute(sql),executeQuery(sql), danexecuteUpdate(sql). Metodeexecute(sql)danexecuteQuery(sql)juga mendukung tiga perintah umum:desc table,show tables, danshow partitions.