## 模块2：使用Java进行TiDB基本操作

运行以下Java代码连接到TiDB Cloud Starter集群并执行一些基本操作。

### 步骤1. 连接到TiDB Cloud Starter集群

+ 在左侧VS Code的**EXPLORER**部分，点击`DemoJdbcConnectionServerless.java`文件。

+ `DemoJdbcConnectionServerless.java`中的以下Java代码片段将您连接到实验的TiDB Cloud Starter集群。

  ```java
  ...
  String tidbHost = System.getenv().getOrDefault("TIDB_HOST", "localhost");
  int tidbPort = Integer.parseInt(System.getenv().getOrDefault("TIDB_PORT", "4000"));
  String tidbUser = System.getenv().getOrDefault("TIDB_USER", "root");
  String tidbPassword = System.getenv().getOrDefault("TIDB_PASSWORD", "");
  String tidbDatabase = System.getenv().getOrDefault("TIDB_DATABASE", "test");

  String connectionUrl = "jdbc:mysql://" + tidbHost + ":" + tidbPort + "/" + tidbDatabase +
          "?sslMode=VERIFY_IDENTITY&enabledTLSProtocols=TLSv1.2,TLSv1.3";

  connection = DriverManager.getConnection(connectionUrl, tidbUser, tidbPassword);
  ...
  ```

+ 您现在可以执行代码并查看结果。

  ```bash
  rm -f DemoJdbcConnectionServerless.class
  javac -cp mysql-connector-j-9.1.0.jar DemoJdbcConnectionServerless.java
  sleep 1
  java -cp :mysql-connector-j-9.1.0.jar DemoJdbcConnectionServerless
  ```

  ```output
  Connection established.
  Connection closed.
  ```

### 步骤2. 基本CRUD操作

+ 在左侧VS Code的**EXPLORER**部分，点击`DemoJdbcExecute.java`文件，您可以简要浏览源代码。

+ 在以下代码片段中，我们向您展示了一种创建表，然后插入和查询数据的方法。

  ```java
  ...
  // Create table
  connection.createStatement().executeUpdate("CREATE TABLE t1 (id int PRIMARY KEY, name char(4))");

  // Describe table
  printResultSetStringString("DESCRIBE test.t1", connection);

  // Explain SQL
  printResultSetStringString("EXPLAIN SELECT * FROM test.t1", connection);

  // Select
  printResultSetStringString("SELECT * FROM test.t1", connection);

  // Try DML
  printResultSetStringString("INSERT INTO test.t1 VALUES (100, 'WXYZ'); INSERT INTO test.t1 VALUES (200, 'ABCD')", connection);

  // Select again
  printResultSetStringString("SELECT * FROM test.t1", connection);
  ...
  ```

  + 请注意，为了简单起见，我们在代码中设置了`SET tidb_multi_statement_mode='ON'`，并在同一行执行两个SQL语句。请了解安全风险（如SQL注入）。

+ 您现在可以执行代码并查看结果。

  ```bash
  rm -f DemoJdbcExecute.class
  javac -cp mysql-connector-j-9.1.0.jar DemoJdbcExecute.java
  sleep 1
  java -cp :mysql-connector-j-9.1.0.jar DemoJdbcExecute
  ```

  ```output
  Connection established.

  /* Executing: SET tidb_multi_statement_mode='ON'; */

  /* Executing: show variables like 'autocommit'; */
          Row#,  Variable_name, Value
          1) autocommit, ON

  /* Executing: describe test.t1; */
          Row#,  Field, Type
          1) id, int(11)
          2) name, char(4)

  /* Executing: explain select * from test.t1; */
          Row#,  id, estRows
          1) TableReader_5, 10000.00
          2) └─TableFullScan_4, 10000.00

  /* Executing: select * from test.t1; */
          Row#,  id, name

  /* Executing: insert into test.t1 values (100, 'WXYZ'); insert into test.t1 values (200, 'ABCD'); */

  /* Executing: select * from test.t1; */
          Row#,  id, name
          1) 100, WXYZ
          2) 200, ABCD
  Connection closed.
  ```
