Bu kılavuzda, MaxCompute JDBC sürücüsünün nasıl indirileceği ve MaxCompute'e nasıl bağlanılacağı açıklanmaktadır. Başlamanıza yardımcı olacak örnek kodlar içerir.
Dikkat edilmesi gerekenler
-
MaxCompute JDBC sürücüsünü kullanarak SQL ifadelerini çalıştırmak ve yürütme sonuçlarını almak için aşağıdaki gereksinimleri karşılamanız gerekir:
Bir projenin üyesi olmalısınız.
Proje üzerinde CREATE INSTANCE iznine sahip olmalısınız.
-
Kullanmak istediğiniz tablo üzerinde SELECT ve DOWNLOAD izinlerine sahip olmalısınız.
NotMaxCompute JDBC V1.9 veya önceki bir sürümü kullanırken, her sorgu için otomatik olarak geçici bir tablo oluşturulur. Sorgu sonuçlarını geçici tablodan almak için Tunnel komutlarını kullanabilirsiniz. Bu sürümleri kullanmak için CREATE TABLE iznine sahip olmanız gerekir.
MaxCompute JDBC V2.2 veya sonraki bir sürümü kullanırken, her sorgu için otomatik olarak geçici bir tablo oluşturulmaz. CREATE TABLE izniniz olsun veya olmasın, sorgu sonuçlarını almak için InstanceTunnel arayüzünü çağırabilirsiniz.
MaxCompute izinleri hakkında daha fazla bilgi için bkz. MaxCompute izinleri.
MaxCompute veri koruma özelliğini sunar. Bir proje için veri koruma özelliği etkinleştirildiyse verileri projeden dışarı taşıyamazsınız. V2.4'ten önceki bir MaxCompute JDBC sürümü kullanıyorsanız
result setsalınamaz. MaxCompute JDBC V2.4 veya sonraki bir sürümü kullanıyorsanız aldığınız sonuç satırı sayısı READ_TABLE_MAX_ROW parametresinin değerini aşamaz. Bu parametre hakkında daha fazla bilgi için bkz. Proje komutları. Veri koruma özelliği hakkında daha fazla bilgi için bkz. Proje veri koruması.
-
MaxCompute V2.0 veri türü sürümü; TINYINT, SMALLINT, DATETIME, TIMESTAMP, ARRAY, MAP ve STRUCT gibi daha fazla veri türünü destekler. Bu yeni veri türlerini kullanmak için MaxCompute V2.0 veri türü sürümünü etkinleştirmek üzere aşağıdaki komutu çalıştırmanız gerekir. Daha fazla bilgi için bkz. Veri türü sürüm kılavuzu.
set odps.sql.type.system.odps2=true JDBC V3.4.1 ve sonraki sürümler için uzun SQL sorgularınız (1 KB'den uzun) varsa eşzamanlılığı dikkatli bir şekilde kontrol etmeniz gerekir. Örneğin 8 vCPU ve 16,0 GiB belleğe sahip bir ECS örneği kullanırken eşzamanlılık 100'ü aşmamalıdır. Eşzamanlılığı etkili bir şekilde kontrol edemiyorsanız JDBC'yi V3.8.8 veya V3.9.3 sürümüne yükseltebilir ve SQL ayrıştırma özelliğini devre dışı bırakmak için
skipCheckIfSelect=trueayarlayabilirsiniz. Bu özellik hakkında daha fazla bilgi için bkz. Sürüm güncellemeleri.
JDBC sürücüsünü indirin
Farklı sürümler için MaxCompute JAR paketlerini OSS, GitHub veya Maven deposu üzerinden edinebilirsiniz. Tüm bağımlılıkları içeren JAR paketini (jar-with-dependencies) indirmenizi öneririz.
Aşağıdaki örnek, MaxCompute JDBC sürücüsünü Maven ile kullanmak için Project Object Model (POM) bağımlılığını göstermektedir.
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-jdbc</artifactId>
<version>3.8.6</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
MaxCompute JDBC sürücüsü, aliyun-odps-jdbc adresinde bulunan açık kaynaklı bir projedir.
JDBC sürücüsünün geliştirilmesine ve iyileştirilmesine katkılarınızı bekliyoruz. Sorunları Issues sayfasında bildirebilir veya Pull requests aracılığıyla kod iyileştirmelerinde bulunabilirsiniz. Issues ve Pull requests kullanırken projenin şablon gereksinimlerini takip edin.
JDBC parametreleri
JDBC'yi URL parametreleri ve Properties nesnelerini kullanarak yapılandırabilirsiniz. Properties nesnelerinin önceliği daha yüksektir ve URL parametrelerinin üzerine yazar.
URL anahtarı odps_config=config_file içeriyorsa JDBC config_file dosyasını Properties parametreleri olarak okur.
-
Temel parametreler
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
project
project_name
Evet
MaxCompute projesinin adı.
accessId
access_id
EvetAlibaba Cloud hesabınızın AccessKey kimliği.
AccessKey kimliğinizi AccessKey Management sayfasından edinebilirsiniz.
accessKey
access_key
EvetAlibaba Cloud hesabınızın AccessKey gizli anahtarı.
AccessKey gizli anahtarınızı AccessKey Management sayfasından edinebilirsiniz.
logview
logview_host
Hayır
MaxCompute LogView URL'si. Değerhttp://logview.odps.aliyun.comolarak sabittir.
tunnelEndpoint
tunnel_endpoint
HayırMaxCompute Tunnel hizmetinin uç noktası.
Her bölge ve ağ türü için Tunnel uç noktaları hakkında bilgi almak için bkz. Uç noktalar.
-
Günlük yapılandırma parametreleri
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
enableOdpsLogger
enable_odps_logger
Hayır
MaxCompute JDBC günlük kaydedicisinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:
False (varsayılan): Günlük kaydedici devre dışı bırakılır.
True: Etkinleştirildi. Günlükler, JAR paketinin dizinindeki
jdbc.logdosyasına yazılır.
logConfFile
log_conf_file
Hayır
Çıktı dosyası ve logLevel gibi günlük çıktısını esnek bir şekilde yapılandırmak için ek bir SLF4J yapılandırma dosyası belirtebilirsiniz. Bu yöntem, projenizin
pom.xmldosyasına aşağıdaki bağımlılıkları eklemenizi gerektirir:<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>Yapılandırma örneği için bkz. Yapılandırma dosyası örneği.
logLevel
log_level
Hayır
Çıktının günlük düzeyi. Varsayılan değer: INFO.
-
Diğer parametreler
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
stsToken
sts_token
Hayır
Alibaba Cloud STS belirteci.
charset
charset
Hayır
Giriş ve çıkış için kullanılan karakter kümesi. Varsayılan değer: UTF-8.
useProjectTimeZone
use_project_time_zone
Hayır
Projenin
odps.sql.timezoneözelliğinin kullanılıp kullanılmayacağını belirtir. Geçerli değerler:False (varsayılan): Özellik kullanılmaz.
True: Özellik kullanılır.
NotSaat dilimini bir ifadede
set odps.sql.timezone=xxxkullanarak da belirtebilirsiniz.Öncelik sırası: İfade > proje > null.
disableConnectionSetting
disable_connection_setting
Hayır
Bir bağlantı için SQL parametrelerinin ayarlanmasına izin verilip verilmeyeceğini belirtir. Geçerli değerler:
False (varsayılan): İzin verilmez.
True: İzin verilir.
Bu parametre true olarak ayarlandığında
set xxxkomutu hem ifadeye hem de bağlantıya uygulanır. Aksi takdirde yalnızca ifadeye uygulanır.settings
settings
Hayır
Global varsayılan
sql settingiçin bir JSON dizesi. Örnek:{"key":"value"}.tableList
table_list
Hayır
MaxCompute tablolarının adları. Format:
projectname.tablename,projectname1.tablename1.connectTimeout
connect_timeout
Hayır
Bir ağ bağlantısı kurmak için zaman aşımı süresi. Varsayılan değer: 10 saniye (s).
readTimeout
read_timeout
Hayır
Bir ağ bağlantısından veri okumak için zaman aşımı süresi. Varsayılan değer: 120 saniye (s).
NotHer RESTful API isteği için toplam zaman aşımı, varsayılan olarak 130 saniye olan connectTimeout ve readTimeout değerlerinin toplamıdır. Sürücü, her isteği en fazla 3 kez yeniden dener.
RESTful API istekleri için bağlantı zaman aşımını ayarlamak amacıyla readTimeout parametresini değiştirin.
enableCommandApi
enable_command_api
Hayır
Komut API'sinin kullanılıp kullanılmayacağını belirtir. Geçerli değerler:
False (varsayılan): Komut API'si kullanılmaz.
True: Komut API'si kullanılır.
Etkinleştirildiğinde normalde yalnızca odpscmd'ye özel olan komutları JDBC'de çalıştırabilirsiniz.
httpsCheck
https_check
Hayır
HTTPS sertifikası doğrulamasının yapılıp yapılmayacağını belirtir. Geçerli değerler:
False (varsayılan): Doğrulama yapılmaz.
True: Doğrulama yapılır.
tunnelConnectTimeout
tunnel_connect_timeout
Hayır
Veri indirirken Tunnel için bağlantı zaman aşımı süresi. Varsayılan değer: 180 saniye (s).
tunnelReadTimeout
tunnel_read_timeout
Hayır
Veri indirirken Tunnel için okuma zaman aşımı süresi. Varsayılan değer: 300 saniye (s).
skipCheckIfSelect
skipCheckIfSelect
Hayır
SQL ayrıştırmanın atlanıp atlanmayacağını belirtir. Geçerli değerler:
False (varsayılan): Ayrıştırma atlanmaz.
True: Ayrıştırma atlanır.
NotAyrıştırmayı atlamak, istemci tarafındaki CPU ve bellek tüketimini azaltabilir ancak SELECT olmayan ifadeler için gecikme süresini artırabilir.
-
MCQA dışı parametreler (yalnızca çevrimdışı modda etkili)
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
autoLimitFallback
auto_limit_fallback
Hayır
Otomatik limit geri dönüşü. Geçerli değerler:
False (varsayılan): Geri dönüş yapılmaz.
True: Geri dönüş yapılır. Çevrimdışı modda, Tunnel bir
no download permissionistisnası raporladığında sürücü otomatik olarak geri döner ve indirilen kayıt sayısını 10.000 ile sınırlar.
-
MaxQA/MCQA 1.0 parametreleri (yalnızca MaxQA/MCQA 1.0 için etkili)
Temel yapılandırma
False (varsayılan): Devre dışı.
True: Etkin.
-
Limit ile ilgili parametreler
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
instanceTunnelMaxRecord
instance_tunnel_max_record
Hayır
Sonuç kümesindeki maksimum kayıt sayısı.
NotBu parametre yalnızca enableLimit parametresi False olarak ayarlandığında etkili olur.
instanceTunnelMaxSize
instance_tunnel_max_size
Hayır
Sonuç kümesinin maksimum boyutu. Birim: byte.
autoSelectLimit
auto_select_limit
Hayır
Otomatik sorgu limiti.
Varsayılan olarak Alibaba Cloud genel cloud ortamlarında en fazla 1.000.000 satır sorgulayabilirsiniz. Daha fazla veri sorgulamak için bu parametreyi yapılandırabilirsiniz.
NotBu parametre yalnızca enableLimit parametresi False olarak ayarlandığında etkili olur.
JDBC V3.2.29 ve sonraki sürümler için autoSelectLimit parametresini ayarlarsanız enableLimit parametresi otomatik olarak False olarak ayarlanır.
enableLimit
enable_limit
Hayır
Limitin etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:
False: Limit etkin değil.
True (varsayılan): Limit etkin.
Etkinleştirilirse indirme izni kontrol edilmez ve sonuç kümeleri varsayılan olarak 10.000 kayıtla sınırlanır.
-
Geri dönüş ile ilgili parametreler
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
fallbackForUnknownError
fallback_for_unknownerror
Hayır
Bilinmeyen bir hata oluştuğunda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False: Geri dönüş yapılmaz.
True (varsayılan): Geri dönüş yapılır.
fallbackForResourceNotEnough
fallback_for_resourcenotenough
Hayır
Kaynaklar yetersiz olduğunda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False: Geri dönüş yapılmaz.
True (varsayılan): Geri dönüş yapılır.
fallbackForUpgrading
fallback_for_upgrading
Hayır
Yükseltme sırasında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False: Geri dönüş yapılmaz.
True (varsayılan): Geri dönüş yapılır.
fallbackForRunningTimeout
fallback_for_runningtimeout
Hayır
Bir işlem komutu zaman aşımına uğradığında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False: Geri dönüş yapılmaz.
True (varsayılan): Geri dönüş yapılır.
fallbackForUnsupportedFeature
fallback_for_unsupported_feature
Hayır
Desteklenmeyen bir MCQA özelliği kullanıldığında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False: Geri dönüş yapılmaz.
True (varsayılan): Geri dönüş yapılır.
alwaysFallback
always_fallback
Hayır
Yukarıdaki tüm senaryolarda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:
False (varsayılan): Geri dönüş yapılmaz.
True: Geri dönüş yapılır.
NotBu parametre yalnızca JDBC V3.2.3 ve sonraki sürümlerde desteklenir.
disableFallback
disable_fallback
Hayır
Yukarıdaki tüm senaryolarda çevrimdışı moda geri dönüşün devre dışı bırakılıp bırakılmayacağını belirtir. Geçerli değerler:
False (varsayılan): Geri dönüş yapılır.
True: Geri dönüş yapılmaz.
fallbackQuota
fallback_quota
Hayır
Bir MCQA işinin geri düştüğü kotanın adı. Yapılandırılmadıysa projenin varsayılan kotasi kullanılır.
URL anahtarı
Özellik anahtarı
Gerekli
Açıklama
interactiveMode
interactive_mode
Hayır
MaxQA/MCQA 1.0'ın etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:
executeProject
execute_project_name
Hayır
SQL görevinin fiilen çalıştığı MaxCompute projesinin adı.
tunnelRetryTime
tunnel_retry_time
Hayır
SQLExecutor için Tunnel yeniden deneme sayısı. Varsayılan değer: 6.
attachTimeout
attach_timeout
Hayır
MCQA 1.0 bağlantısı kurmak için zaman aşımı süresi. Varsayılan değer: 60 saniye (s).
fallbackQuota
fallback_quota
Hayır
Bir MCQA 1.0 işi geri düştüğünde kullanılacak kota. Yapılandırılmadıysa projenin varsayılan kotasi kullanılır.
quotaName
quota_name
Hayır
MaxQA işi tarafından kullanılan hesaplama kaynağı kotasi.
MaxCompute'e bağlanın
-
MaxCompute JDBC sürücüsünü yükleyin.
Class.forName("com.aliyun.odps.jdbc.OdpsDriver"); -
DriverManager kullanarak bir bağlantı oluşturun.
Connection cnct = DriverManager.getConnection(url, accessId, accessKey);-
url: URL aşağıdaki formatta olmalıdır:
jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}]. Parametreler şu şekilde açıklanmıştır:<maxcompute_endpoint>: Bölge için MaxCompute hizmetinin uç noktası. Örneğin Çin (Hangzhou) bölgesi için genel uç nokta
http://service.cn-hangzhou.maxcompute.aliyun.com/apişeklindedir. Daha fazla bilgi için bkz. Uç noktalar.<maxcompute_project_name>: MaxCompute projesinin adı.
useProjectTimeZone: MaxCompute projesinin saat diliminin kullanılıp kullanılmayacağını belirtir.
Örnek:
jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true; accessId: Alibaba Cloud hesabınızın AccessKey kimliği.
-
accessKey: AccessKey kimliğine karşılık gelen AccessKey gizli anahtarı.
NotBir AccessKey kimliği ve AccessKey gizli anahtarı oluşturmak ve görüntülemek için bkz. Alibaba Cloud hesabı hazırlama.
-
-
Bir sorgu çalıştırın.
try ( Statement stmt = cnct.createStatement(); ResultSet rset = stmt.executeQuery("SELECT foo FROM bar;") ) { while (rset.next()) { // process the results } } catch (SQLException e) { // handle the exception } finally { if (cnct != null) { try { cnct.close(); } catch (SQLException e) { // Ignore or record a closed exception } } }
Örnek kod
-
Tabloyu silin, tablo oluşturun ve meta verileri alın
NotProjeye JDBC bağımlılığını eklerseniz SDK bağımlılığını ayrı olarak eklemeyin. JDBC bağımlılığı gerekli SDK'yı içerir ve ayrı olarak eklenmesi sürüm uyumsuzluğu hatalarına neden olabilir.
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"; // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. To create a RAM user, log on to the RAM console. // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements. // For security, do not hardcode the AccessKey ID and AccessKey secret in your 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) { 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() ) { // create a table 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()); 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(); } } }Örnek çıktı:
product = MaxCompute/ODPS jdbc version = 3, 8 inspecting table: jdbc_test key BIGINT(-5) value STRING(12) -
Tabloyu güncelleyin
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"; // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. To create a RAM user, log on to the RAM console. // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements. // For security, do not hardcode the AccessKey ID and AccessKey secret in your 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) { 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() ) { // 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; } catch (SQLException e) { e.printStackTrace(); } } } -
Tabloyu toplu olarak güncelleyin
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"; // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements. // For security, do not hardcode the AccessKey ID and AccessKey secret in your 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) { 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(?, ?)") ) { // First batch pstmt.setLong(1, 1L); pstmt.setString(2, "foo"); pstmt.addBatch(); // Second batch 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(); } } }NotexecuteBatch yöntemi Transaction Table 2.0 tabloları gibi kümelenmiş tablolara toplu yazmayı desteklemez.
-
Standart bir bölümlenmiş tabloya toplu olarak veri yazmak için INSERT INTO ifadesinde hedef bölümü belirtmeniz gerekir. Örnek:
-- The table creation statement for the partitioned table sale_detail is as follows. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); -- Assume that the partition sale_date='20240219', region='hangzhou' already exists. The INSERT INTO statement for batch writes to the partitioned table is as follows. INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
-
Tabloyu sorgulayın
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"; // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements. // For security, do not hardcode the AccessKey ID and AccessKey secret in your 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) { 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(); } } }NotOdpsStatement üç yöntemi destekler:
execute(sql),executeQuery(sql)veexecuteUpdate(sql).execute(sql)veexecuteQuery(sql)yöntemleri ayrıca üç yaygın komutu da destekler:desc table,show tablesveshow partitions.