全部產品
Search
文件中心

PolarDB:Prepare協議使用說明

更新時間:Jul 06, 2024

本文介紹了Prepare協議的概念、用途及在Java中的開啟方法。

介紹

PolarDB-X 1.0提供對伺服器端預先處理語句的支援,支援利用高效的用戶端/伺服器二進位協議。使用準備好的語句和預留位置來擷取參數值具有以下優勢:
  • 每次執行時解析語句的開銷都較小。通常情況下,資料庫應用程式處理大量幾乎相同的語句,只改變Prepare語句中的變數值,這樣可以大幅度提升SQL執行效率。
  • 防止SQL注入攻擊。

詳細說明

  • Prepare協議支援範圍
  • Prepare協議SQL支援範圍:支援所有DML語句,例如:SELECT、UPDATE、DELETE、INSERT等。
  • Prepare協議SQL不支援範圍:不支援DML以外其他SQL語句,例如:SHOW、SET等。
  • Prepare協議不支援在MySQL命令列中使用如下方法:
    mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
    mysql> PREPARE stmt2 FROM @s;
    mysql> SET @a = 6;
    mysql> SET @b = 8;
    mysql> EXECUTE stmt2 USING @a, @b;

在Java中開啟Prepare協議

  • 在Java用戶端中,如果需要使用Prepare協議,需要強行在URL串連串中增加useServerPrepStmts=true參數,如果不指定此參數,則PreparedStatement預設會走普通查詢。
  • 如:jdbc:mysql://xxxxxx:3306/xxxxxx?useServerPrepStmts=true

Java使用樣本:

Class.forName("com.mysql.jdbc.Driver");
Connection connection =  DriverManager.getConnection("jdbc:mysql://xxxxxx:3306/xxxxxx?useServerPrepStmts=true", "xxxxx", "xxxxx");
String sql = "insert into batch values(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setInt(1, 0);
preparedStatement.setString(2, "corona-db");
preparedStatement.executeUpdate();