Use la interfaz estándar Java Database Connectivity (JDBC) para conectar su aplicación Java a LindormTable y ejecutar operaciones SQL en tablas anchas.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
JDK 1.8 o una versión posterior instalada.
La dirección IP de su cliente agregada a la lista de permitidos de Lindorm. Consulte Set a whitelist.
Limitaciones
Este tema aplica únicamente a Lindorm en modo de tabla ancha. No es compatible con Lindorm Serverless.
Agregar la dependencia de Maven
Si trabaja con un proyecto de Maven, agregue el siguiente fragmento a la sección dependencies del archivo pom.xml:
<dependency>
<groupId>com.aliyun.lindorm</groupId>
<artifactId>lindorm-all-client</artifactId>
<version>2.2.1.3</version>
</dependency>
Conectar a LindormTable
Use DriverManager.getConnection() para establecer la conexión.
// Lindorm Wide Table SQL endpoint — obtain from the Lindorm console.
// See: View endpoints
String url = "jdbc:lindorm:table:url=http://<your-endpoint>:30060";
Properties properties = new Properties();
// The database username obtained from the Lindorm console.
properties.put("user", "root");
// The database password obtained from the Lindorm console.
properties.put("password", "test");
// The database to connect to. Defaults to "default" if not specified.
properties.put("database", "default");
Connection connection = DriverManager.getConnection(url, properties);
Parámetros de conexión
| Parámetro | Ejemplo | Descripción |
|---|---|---|
url | jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060 | Dirección SQL de la tabla ancha de Lindorm. Obtenga el endpoint desde View endpoints en la consola de Lindorm. Si su aplicación se ejecuta en una instancia ECS, use el endpoint de la red virtual privada (VPC) para reducir la latencia y aumentar la seguridad. Para desarrollo local, habilite primero un endpoint público: en la consola, vaya a Database Connections > Wide Table Engine y haga clic en Enable Public Endpoint. |
user | root | Nombre de usuario de la base de datos obtenido desde la consola de Lindorm. Para restablecer una contraseña olvidada, use el sistema de administración de clústeres de LindormTable. |
password | test | Contraseña de la base de datos obtenida desde la consola de Lindorm. |
database | default | Base de datos a la que se conectará. El valor predeterminado es default. |
Administración de conexiones
El servidor cierra las conexiones inactivas después de 10 minutos. Si reutiliza una conexión cerrada, se genera el error com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedException. Cuando esto ocurra, vuelva a establecer la conexión.
En aplicaciones de producción, use un pool de conexiones (como Druid) configurado con parámetros de keepalive o validación. Así evitará que los tiempos de espera por inactividad se manifiesten como errores.
Ejecutar operaciones CRUD
A continuación se muestra un ejemplo que abarca el ciclo completo de creación, lectura, actualización y eliminación (CRUD). La muestra completa y lista para ejecutarse se encuentra en la clase com.aliyun.lindorm.sql.demo.BasicDemo. Descargue el código de ejemplo.
String tableName = "sql_table_" + new Random().nextInt(1000);
// Create a table.
// The CREATE TABLE statement creates a wide table by default.
try (Statement statement = connection.createStatement()) {
String sql = "create table if not exists " + tableName
+ "(id VARCHAR, name VARCHAR, primary key(id))";
statement.executeUpdate(sql);
}
// Insert data using batch upsert.
// Keep individual batches to hundreds of rows — large batches degrade performance.
String upsertSql = "upsert into " + tableName + "(id, name) values(?, ?)";
try (PreparedStatement ps = connection.prepareStatement(upsertSql)) {
for (int i = 0; i < 100; i++) {
ps.setString(1, "aa" + i);
ps.setString(2, "bb" + i);
ps.addBatch();
}
ps.executeBatch();
}
// Query data.
String querySql = "select * from " + tableName + " where id=?";
try (PreparedStatement ps = connection.prepareStatement(querySql)) {
ps.setString(1, "aa1");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println("id=" + rs.getString(1));
System.out.println("name=" + rs.getString(2));
}
}
// Delete a row.
String deleteSql = "delete from " + tableName + " where id=?";
try (PreparedStatement ps = connection.prepareStatement(deleteSql)) {
ps.setString(1, "aa1");
ps.executeUpdate();
}
// Update a row.
// LindormTable UPDATE supports only single-row updates, not batch updates.
// The WHERE clause must include the full primary key.
String updateSql = "update " + tableName + " set name=? where id=?";
try (PreparedStatement ps = connection.prepareStatement(updateSql)) {
ps.setString(1, "bb2update");
ps.setString(2, "aa2");
ps.executeUpdate();
}
// Drop the table.
try (Statement stmt = connection.createStatement()) {
stmt.execute("drop table " + tableName);
}
// Always close the connection after use to prevent connection leaks.
connection.close();
Usar LindormTable con frameworks de Java
Si prefiere usar un framework de Java de mayor nivel, consulte los siguientes ejemplos:
Pool de conexiones Druid: Ejemplo de acceso con Druid
Spring Framework: Ejemplo de acceso con Spring
MyBatis: Ejemplo de acceso con MyBatis
Hibernate: Ejemplo de acceso con Hibernate
Preguntas frecuentes
¿Por qué UPDATE requiere la clave primaria completa en la cláusula WHERE?
LindormTable solo admite actualizaciones de una sola fila con UPDATE. Por ello, la cláusula WHERE debe especificar la clave primaria completa. Si la clave primaria consta de varias columnas, incluya todas las columnas de la clave en dicha cláusula.
¿Qué sintaxis SQL admite LindormTable?
Consulte el manual de sintaxis SQL para ver la referencia completa.
Referencias
Para obtener información sobre la sintaxis de SQL de LindormTable, consulte el manual de sintaxis SQL.