根据《JDBC测试MySQL准备工作》一文先将数据库和表创建完毕。
- 引入依赖
<dependencies>
<dependency>
<groupId>sql>mysql</groupId>
<artifactId>sql>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "insert into t_user (username, password) VALUES (?, ?)";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, "黎明");
preparedStatement.setString(2, "123456");
int effectRowCount = preparedStatement.executeUpdate();
System.out.println("effectRowCount = " + effectRowCount);
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
executeUpdate()
方法可以执行插入
、更新
、删除
以及像DML
没有返回值的语句。
返回值:
(1)
、执行DML
语句返回受影响的行数。
(2)
、没有返回的内容的语句返回值为0
。
sql">insert into t_user (username, password) VALUES (?, ?)
preparedStatement.setString(1, "黎明")
设置第1个 ❓
的值。
preparedStatement.setString(2, "123456")
设置第2个 ❓
的值。
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "delete from t_user where id = ?";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, 6);
int effectRowCount = preparedStatement.executeUpdate();
System.out.println("effectRowCount = " + effectRowCount);
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
删除t_user
表id
为6
的记录。
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "update t_user set password = ? where username = ?";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, "321654");
preparedStatement.setString(2, "Paul");
int effectRowCount = preparedStatement.executeUpdate();
System.out.println("effectRowCount = " + effectRowCount);
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
根据username
修改password
。
插入成功时 - 获取插入记录的主键
java">import java.sql.*;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "insert into t_user (username, password) VALUES (?, ?)";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
preparedStatement.setString(1, "黎明");
preparedStatement.setString(2, "123456");
int effectRowCount = preparedStatement.executeUpdate();
System.out.println("effectRowCount = " + effectRowCount);
ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
while (generatedKeys.next()) {
int keysInt = generatedKeys.getInt(1);
System.out.println("keysInt = " + keysInt);
}
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
-
总结
查询操作获取结果集
java">import java.sql.*;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "select id, username, password from t_user where username = 'Apollo'";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery()) {
while (resultSet.next()) {
int id = resultSet.getInt(1);
String username = resultSet.getString(2);
String password = resultSet.getString(3);
System.out.print(id + "\t");
System.out.print(username + "\t");
System.out.println(password);
int idLabel = resultSet.getInt("id");
String usernameLabel = resultSet.getString("username");
String passwordLabel = resultSet.getString("password");
System.out.print(idLabel + "\t");
System.out.print(usernameLabel + "\t");
System.out.println(passwordLabel);
}
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
获取结果集后,获取具体的列时,有两种方式:①:
通过索引坐标;②:
通过列字段名。
设置事务提交
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "delete from t_user where id > ?";
public static void main(String[] args) throws SQLException {
Connection connection = null;
try {
connection = DriverManager.getConnection(url, user, password);
/**
* 第一步:设置自动提交为 false 。
*/
connection.setAutoCommit(false);
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 3);
int effectRowCount = preparedStatement.executeUpdate();
//int x = 1 / 0;
System.out.println("effectRowCount = " + effectRowCount);
/**
* 提交事务
*/
connection.commit();
} catch (Exception exception) {
System.out.println("Exception Happening ...");
try {
/**
* 第二步:回滚事务
*/
if (connection != null) {
connection.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
} finally {
if (connection != null) {
/**
* 第三步:修改回原来的 true 。关闭连接
*/
connection.setAutoCommit(true);
connection.close();
}
}
}
}
批量添加数据
java">import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Arrays;
public class Test {
private static final String url = "jdbc:sql>mysql://gosuncn.fun:3306/gosuncn?serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String user = "gosuncn";
private static final String password = "gosuncn";
private static final String sql = "insert into t_user (username, password) VALUES (?, ?)";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection(url, user, password);
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
for (int i = 0; i < 10; i++) {
preparedStatement.setString(1, "黎明-" + (i + 1));
preparedStatement.setString(2, "123456");
preparedStatement.addBatch();
}
int[] batchRowEffect = preparedStatement.executeBatch();
System.out.println("batchRowEffect = " + Arrays.toString(batchRowEffect));
} catch (SQLException exception) {
System.out.println("SQLException Happening ...");
}
}
}
先将SQL语句添加到批处理中,在批量执行语句。
①:preparedStatement.addBatch()
// 先将SQL语句添加到批处理中
②:preparedStatement.executeBatch()
// 在批量执行语句