日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于Java JDBC接口的應(yīng)用開發(fā)

Java JDBC(JavaDataBase Connectivity)是一種規(guī)范的Java API,主要用于連接和處理數(shù)據(jù)庫、執(zhí)行SQL語句。您可以通過Java JDBC接口連接寬表引擎,并結(jié)合Lindorm SQL進(jìn)行應(yīng)用開發(fā)。本文介紹使用MySQL協(xié)議,通過Java JDBC接口進(jìn)行應(yīng)用開發(fā)的方法。

前提條件

操作步驟

  1. 添加MySQL JDBC Driver的依賴。以Maven項目為例,在pom.xml文件的dependencies中添加依賴項。示例代碼如下:

      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.33</version>
      </dependency>
    重要
    • 推薦通過8.0及以上版本的MySQL JDBC驅(qū)動連接Lindorm寬表引擎。

    • 在Java中創(chuàng)建MySQL JDBC連接依賴于MySQL JDBC驅(qū)動包,您需要手動將MySQL JDBC驅(qū)動包(mysql-connector-java-x.x.x.jar)添加至CLASSPATH中,否則無法創(chuàng)建MySQL JDBC連接。

  2. 初始化MySQL JDBC客戶端并建立Lindorm客戶端和數(shù)據(jù)之間的連接。

    Class.forName("com.mysql.jdbc.Driver");
    
    //Lindorm控制臺獲取的數(shù)據(jù)庫用戶名。
    String username = "root";
    //Lindorm控制臺獲取的數(shù)據(jù)庫密碼。
    String password = "root";
    //建立連接時可指定某一database。若不指定database,默認(rèn)使用default。
    String database = "default";
    //Lindorm寬表MySQL兼容地址。33060是MySQL協(xié)議的端口號。
    String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000";
    Properties properties = new Properties();
    properties.put("user", username);
    properties.put("password", password);
    
    //獲取連接
    Connection connection = DriverManager.getConnection(url, properties);

    參數(shù)說明

    參數(shù)

    說明

    url

    MySQL協(xié)議的Java JDBC連接地址。格式為jdbc:mysql://<MySQL兼容地址>/" + database + "?連接配置

    如何獲取MySQL兼容地址,請參見查看連接地址。連接配置的詳細(xì)說明,請參見連接配置說明

    重要
    • 如果應(yīng)用部署在ECS實例,建議您通過專有網(wǎng)絡(luò)訪問Lindorm實例,可獲得更高的安全性和更低的網(wǎng)絡(luò)延遲。

    • 如果應(yīng)用部署在本地,在通過公網(wǎng)連接Lindorm實例前需在控制臺開通公網(wǎng)地址。開通方式:查看寬表引擎連接地址

    • 通過專有網(wǎng)絡(luò)訪問時url請?zhí)顚慚ySQL兼容地址對應(yīng)的專有網(wǎng)絡(luò)地址,通過公網(wǎng)訪問時url請?zhí)顚慚ySQL兼容地址對應(yīng)的公網(wǎng)地址。

    database

    需要連接的數(shù)據(jù)庫名稱。默認(rèn)連接default數(shù)據(jù)庫。

    username

    連接寬表引擎的用戶名和密碼。

    如果您忘記用戶密碼,可以通過Lindorm寬表引擎的集群管理系統(tǒng)修改密碼。具體操作,請參見修改用戶密碼

    password

    連接配置說明

    參數(shù)

    示例值

    說明

    sslMode

    disabled

    JDBC驅(qū)動建立連接時是否使用SSL建立加密連接。建議設(shè)置為disabled,即不使用SSL建立加密連接。設(shè)置為disabled可以有效提高性能。

    allowPublicKeyRetrieval

    true

    JDBC驅(qū)動建立連接進(jìn)行用戶認(rèn)證時,是否允許從服務(wù)器檢RSA公鑰。建議設(shè)置為true

    useServerPrepStmts

    true

    JDBC驅(qū)動是否啟用服務(wù)器端預(yù)處理語句。建議設(shè)置為true,即允許數(shù)據(jù)庫使用其內(nèi)置的SQL預(yù)處理機制,可提高性能并減少SQL注入問題。

    useLocalSessionState

    true

    JDBC驅(qū)動是否啟用本地會話狀態(tài),用于降低對數(shù)據(jù)庫服務(wù)器的往返通信次數(shù)。建議設(shè)置為true

    rewriteBatchedStatements

    true

    JDBC驅(qū)動是否重寫批量語句。建議設(shè)置為true,對于使用預(yù)處理語句并進(jìn)行批量參數(shù)綁定的應(yīng)用,可以極大提升寫入性能。

    cachePrepStmts

    true

    是否允許緩存預(yù)處理語句。建議設(shè)置為true,可以減少預(yù)處理語句的創(chuàng)建次數(shù),對于頻繁執(zhí)行的語句有性能提升。

    prepStmtCacheSize

    100

    設(shè)置JDBC驅(qū)動層面緩存預(yù)處理語句的個數(shù)。該參數(shù)僅在cachePrepStmts設(shè)置為true時生效。

    prepStmtCacheSqlLimit

    500000

    設(shè)置預(yù)處理語句可緩存的最大長度,超過此長度的SQL語句不會被緩存。如果業(yè)務(wù)對性能比較敏感,建議增加該參數(shù)的值。

    說明

    prepStmtCacheSqlLimit值增加可能會消耗更多內(nèi)存資源,建議根據(jù)實際需求合理設(shè)置。

  3. 建立連接后,通過寬表SQL語法使用Lindorm寬表引擎。示例代碼如下:

    String tableName = "sql_table_" + new Random().nextInt(1000);
    //創(chuàng)建表
    try (Statement statement = connection.createStatement()) {
      String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))";
      int ret = statement.executeUpdate(sql);
      System.out.println(ret);
    }
    
    //插入數(shù)據(jù)
    String upsertSql = "insert into " + tableName + "(id,name) values(?,?)";
    try (PreparedStatement ps = connection.prepareStatement(upsertSql)) {
      int batchSize = 100;
      for (int i = 0; i < batchSize; i++) {
        ps.setString(1, "aa" + i);
        ps.setString(2, "bb" + i);
        //加入批次
        ps.addBatch();
      }
      int[] ret = ps.executeBatch();
      System.out.println(Arrays.toString(ret));
    }
    
    //查詢數(shù)據(jù)
    String querySql = "select * from " + tableName + " where id=?";
    try (PreparedStatement ps = connection.prepareStatement(querySql)) {
      ps.setString(1, "aa1");
      ResultSet rs = ps.executeQuery();
      while (rs.next()) {
        String id = rs.getString(1);
        String name = rs.getString(2);
        System.out.println("id=" + id);
        System.out.println("name=" + name);
      }
    }
    
    //刪除數(shù)據(jù)
    String deleteSql = "delete from " + tableName + " where id=?";
    try (PreparedStatement ps = connection.prepareStatement(deleteSql)) {
      ps.setString(1, "aa1");
      ps.executeUpdate();
    }
    
    //關(guān)閉連接,當(dāng)結(jié)束操作時要確保連接被關(guān)閉,否則會造成連接泄漏。
    connection.close();

    寬表SQL語法的使用,請參見SQL語法手冊

    說明
    • batchSize為batch的大小,建議不超過65535/列數(shù),最佳大小為Math.round(65535/列數(shù))。例如,上述代碼中示例表共2列,batch的大小建議不要超過65535/2 = 32767.5,可以向下取整為32767

    • 在Lindorm SQL中,insert語句的語義與upsert相同。由于MySQL JDBC的客戶端優(yōu)化了insert語句,因此在寫入數(shù)據(jù)時更推薦您使用insert語句。