#执行SQL语句
创建Statement对象后,可以使用executeQuery、executeUpdate或execute方法向YashanDB发送SQL语句。应根据SQL语句的返回结果选择对应方法。
常用SQL执行方法如下表所示。
| 方法 | 适用场景 | 返回值 |
|---|---|---|
| executeQuery(String sql) | 执行返回单个结果集的查询语句。 | 查询结果ResultSet。 |
| executeUpdate(String sql) | 执行INSERT、UPDATE或DELETE语句。 | 受影响的行数。 |
| execute(String sql) | 执行DDL语句,或者返回结果类型不确定的SQL语句。 | 第一个执行结果为ResultSet时返回true,否则返回false。 |
Note:
execute()返回false不表示SQL执行失败,只表示第一个执行结果不是ResultSet。SQL执行失败时,JDBC驱动会抛出SQLException。
# 执行DDL语句
下面示例使用execute()创建customer表:
String sql =
"CREATE TABLE customer "
+ "(id INTEGER PRIMARY KEY, name VARCHAR(32))";
try (Statement statement = connection.createStatement()) {
// 执行建表语句。
statement.execute(sql);
}
# 插入数据
使用executeUpdate()执行INSERT语句。返回值表示插入的行数。
String sql =
"INSERT INTO customer (id, name) VALUES (1, 'Alice')";
try (Statement statement = connection.createStatement()) {
// 执行插入并获取插入行数。
int insertedRows = statement.executeUpdate(sql);
System.out.println("Inserted rows: " + insertedRows);
}
示例执行成功时,输出如下:
Inserted rows: 1
# 查询数据
使用executeQuery()执行SELECT语句。该方法返回ResultSet,调用next()可以逐行读取查询结果。
String sql = "SELECT id, name FROM customer ORDER BY id";
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
// 遍历查询结果。
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id: " + id + ", name: " + name);
}
}
示例执行成功时,输出如下:
id: 1, name: Alice
结果集的读取方法请参考使用ResultSet对象。
# 更新数据
使用executeUpdate()执行UPDATE语句。返回值表示更新的行数,可以用于判断是否存在满足条件的数据。
String sql =
"UPDATE customer SET name = 'Carol' WHERE id = 1";
try (Statement statement = connection.createStatement()) {
// 执行更新并获取更新行数。
int updatedRows = statement.executeUpdate(sql);
System.out.println("Updated rows: " + updatedRows);
}
示例执行成功时,输出如下:
Updated rows: 1
# 删除数据
使用executeUpdate()执行DELETE语句。返回值表示删除的行数。
String sql = "DELETE FROM customer WHERE id = 1";
try (Statement statement = connection.createStatement()) {
// 执行删除并获取删除行数。
int deletedRows = statement.executeUpdate(sql);
System.out.println("Deleted rows: " + deletedRows);
}
示例执行成功时,输出如下:
Deleted rows: 1
# 完整示例
下面示例依次创建表、插入数据、查询数据、更新数据和删除数据。示例执行完成后会删除创建的表。
package quickstart;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class ExecuteSqlExample {
// 数据库连接参数。
private static final String URL =
"jdbc:yasdb://192.168.1.2:1688/yasdb";
private static final String USER = "username";
private static final String PASSWORD = "passwd";
private static final String TABLE_NAME =
"customer";
public static void main(String[] args) throws SQLException {
// 设置登录用户名和密码。
Properties properties = new Properties();
properties.setProperty("user", USER);
properties.setProperty("password", PASSWORD);
try (Connection connection =
DriverManager.getConnection(URL, properties)) {
boolean tableCreated = false;
try {
// 创建示例表。
try (Statement statement =
connection.createStatement()) {
String sql = "CREATE TABLE " + TABLE_NAME
+ " (id INTEGER PRIMARY KEY, "
+ "name VARCHAR(32))";
statement.execute(sql);
tableCreated = true;
System.out.println("Table created");
}
// 插入一行数据。
try (Statement statement =
connection.createStatement()) {
String sql = "INSERT INTO " + TABLE_NAME
+ " (id, name) VALUES (1, 'Alice')";
int insertedRows = statement.executeUpdate(sql);
System.out.println(
"Inserted rows: " + insertedRows);
}
// 查询并输出数据。
try (Statement statement =
connection.createStatement();
ResultSet resultSet = statement.executeQuery(
"SELECT id, name FROM " + TABLE_NAME
+ " ORDER BY id")) {
while (resultSet.next()) {
System.out.println(
"id: " + resultSet.getInt("id")
+ ", name: "
+ resultSet.getString("name"));
}
}
// 更新数据。
try (Statement statement =
connection.createStatement()) {
String sql = "UPDATE " + TABLE_NAME
+ " SET name = 'Carol' WHERE id = 1";
int updatedRows = statement.executeUpdate(sql);
System.out.println(
"Updated rows: " + updatedRows);
}
// 删除数据。
try (Statement statement =
connection.createStatement()) {
String sql = "DELETE FROM " + TABLE_NAME
+ " WHERE id = 1";
int deletedRows = statement.executeUpdate(sql);
System.out.println(
"Deleted rows: " + deletedRows);
}
} finally {
// 删除示例表,避免残留测试对象。
if (tableCreated) {
try (Statement statement =
connection.createStatement()) {
statement.execute(
"DROP TABLE " + TABLE_NAME);
System.out.println("Table dropped");
}
}
}
}
}
}
示例执行成功时,输出如下:
Table created
Inserted rows: 1
id: 1, name: Alice
Updated rows: 1
Deleted rows: 1
Table dropped

