标签:lse 失败 记录 username trace catch exception 持久 rest
对于读取数据,我们应当如何与数据库打交道呢,这个时候应该使用JDBC,就是java帮助我们实现了操控数据库的一些连接,我们只需要到时候加载一个连接数据库的插件
下面即使java程序的对数据库的增删改查,以及事务处理
import java.sql.*; public class HelloWorld { public static void main(String[] args) throws Exception { String JDBC_URl = "jdbs:mysql://127.0.0.1:3306/bbsoo"; String JDBC_USER = "root"; String JDBC_PASSWORD = "mysql"; // 查找数据 try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { // 方法一使用 Statement try (Statement st = conn.createStatement()) { // 执行语句 try (ResultSet rs = st.executeQuery("select user_id, username, user_type from bbs_users;")) { // 判断是否有下一个值 while (rs.next()) { int id = rs.getInt(1); String username = rs.getString(2); int user_type = rs.getInt(3); System.out.println("first: user :id" + id + " username:" + username + "user_type:" + user_type); } } } // 方式二 PreparedStatement try (PreparedStatement st = conn.prepareStatement("select ?, ?, ? from bbs_users;")) { // 在对应位置拼接我们的字符 st.setObject(1, "user_id"); st.setObject(2, "username"); st.setObject(3, "user_type"); try (ResultSet rs = st.executeQuery()) { while (rs.next()) { int id = rs.getInt(1); String username = rs.getString(2); int user_type = rs.getInt(3); System.out.println("second: user :id" + id + " username:" + username + "user_type:" + user_type); } } } } // 插入数据 try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { // 准备sql语句 try (PreparedStatement ps = conn.prepareStatement("INSERT INTO bbs_users (username, user_type) values (?, ?) ")) { // 填入对应索引位置的值 ps.setObject(1, "ming"); ps.setObject(2, 1); // 执行sql语句,返回值表示插入的记录数量 int n = ps.executeUpdate(); System.out.println(n); // 这个可以抓住插入的那条数据 try (ResultSet rs = ps.getGeneratedKeys()) { if (rs.next()) { int id = rs.getInt(1); // 获取id } } } } // 更新 try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { try (PreparedStatement ps = conn.prepareStatement("UPDATE bbs_users SET username=? where id =?")) { ps.setObject(1, "ning"); ps.setObject(2, 1); int n = ps.executeUpdate(); // 返回更新的条数 System.out.println(n); } } // 删除 try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { try (PreparedStatement ps = conn.prepareStatement("DELETE FROM bbs_users where id = ?")) { ps.setObject(1, 1); int n = ps.executeUpdate(); // 返回删除条数 System.out.println(n); } } // 事务 try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { try { conn.setAutoCommit(false); try (PreparedStatement ps = conn.prepareStatement("DELETE FROM bbs_users where id = ?")) { ps.setObject(1, 1); int n = ps.executeUpdate(); // 返回删除条数 System.out.println(n); } try (PreparedStatement ps = conn.prepareStatement("DELETE FROM bbs_users where id = ?")) { ps.setObject(1, 2); int n = ps.executeUpdate(); // 返回删除条数 System.out.println(n); } conn.commit(); } catch (SQLException e) { e.printStackTrace(); } finally { conn.setAutoCommit(true); conn.close(); } } // batch, 对于又重复操作,并且可以进行整理数据进行逐条执行,效率较低,可以使用batch try (Connection conn = DriverManager.getConnection(JDBC_URl, JDBC_USER, JDBC_PASSWORD)) { // 准备sql语句 try (PreparedStatement ps = conn.prepareStatement("INSERT INTO bbs_users (username, user_type) values (?, ?) ")) { // 填入对应索引位置的值 for (int i = 0; i < 10; i++) { ps.setObject(1, "ming" + i); ps.setObject(2, 1); ps.addBatch(); // 添加到batch中 } // 执行sql语句,返回的是每一条成功数量的数组 int[] n = ps.executeBatch(); for (int nn : n) { System.out.println(nn + "success"); } } } } }
我们都知道数据库的几大特性:原子性,一致性,隔离性,持久性,那么为了保证数据一致性,在进行多次操作数据库,或者这些数据修改会影响数据库一致性的情况下,一定要开启事务,这样最终失败,可以进行数据回滚,保证数据的一致性
标签:lse 失败 记录 username trace catch exception 持久 rest
原文地址:https://www.cnblogs.com/yangshixiong/p/12182662.html