其他分享
首页 > 其他分享> > 20220819 第一组 于芮 JDBC(第三十六天)

20220819 第一组 于芮 JDBC(第三十六天)

作者:互联网

 

小白成长记——第三十六天

 

   今天延续了昨天的JDBC的学习,继续深入研究了JDBC,大部分时间还是在做案例,来看一下今天的学习笔记吧!

Statement的不足:
1、大量的字符串拼接,代码可读性降低。
2、sql注入 SQL注入:BUG
通过字符串的拼接,可以得到一个恒等的sql语句,可以跳过某些判断。
PreparedStatement:预编译(预加载)接口
1、通过conn获取的对象
2、是Statement接口的子接口
3、sql语句中可以传参。用?占位,通过setXXX方法来给?赋值
4、提高性能
5、避免sql注入
获取元数据
元数据:表格本身的数据, 表格的列名,结果集的列名
数据库事务:是数据库的特性 Mysql的数据库引擎
1.在MySQL中,只有使用了Innodb引擎的数据库才支持事务
2.事务处理可以用来维护数据的完整性。保证sql语句要么全部执行,
要么全部不执行。
3. 发生在DML中,增删改。 事务的四大特征ACID
1、原子性 A。
一个事务,要么全部完成,要么全部不完成。
2、一致性 C。
在事务开始之前和事务结束之后,数据库的完整性没有被破坏。
3、隔离性 Isolation
数据库允许多个事务同时对数据进行处理。每个事务之间是相互隔离。
4、持久性 D
事务结束以后,对数据的增删改是永久性的。
术语:提交事务,回滚事务(事务回滚) 1、事务一旦提交,就不可能回滚。
2、当一个连接对象被创建时,默认情况下自动提交事务。
3、关闭连接时,数据会自动提交事务。 操作事务的步骤:
1、关闭事务的自动提交
当做出增删改操作,把变化发生在内存中,提交事务,才会真正提交给数据库

   然后今天的案例是一个连接数据库的简易银行系统,通过连接数据库,在Java中执行SQL语句,完成开户,转账,存款,来看一下代码吧!

  1 package M0819.Account;
  2 
  3 import L0818.JDBDUtil;
  4 
  5 import java.sql.Connection;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.SQLException;
  9 
 10 public class accountDao {
 11     private static Connection conn;
 12 
 13     {
 14         try {
 15             conn = JDBDUtil.getConnection();
 16         } catch (Exception e) {
 17             throw new RuntimeException(e);
 18         }
 19     }
 20     //转账
 21     public static Integer transform(String out, String in, Double balance){
 22         ResultSet rs=null;
 23         PreparedStatement preparedStatement=null;
 24         PreparedStatement preparedStatement1=null;
 25         double b=0;
 26         String sql= "select balance from account1 where accountid = ?";
 27         try {
 28             preparedStatement=conn.prepareStatement(sql);
 29             preparedStatement.setString(1,out);
 30             rs=preparedStatement.executeQuery();
 31             while (rs.next()){
 32                 b=rs.getDouble("balance");
 33             }
 34             if(b>=balance){
 35                 //余额够
 36                 //执行修改
 37                 conn.setAutoCommit(false);
 38                 sql= "update account1 set balance = balance - ? where accountid = ?";
 39                 preparedStatement=conn.prepareStatement(sql);
 40                 preparedStatement.setDouble(1,balance);
 41                 preparedStatement.setString((int) 2,out);
 42                 int i=preparedStatement.executeUpdate();
 43                 sql="update bank set balance = balance + ? where accountid = ?";
 44                 preparedStatement1=conn.prepareStatement(sql);
 45                 preparedStatement1.setString((int)2,in);
 46                 i=preparedStatement1.executeUpdate();
 47                 conn.commit();
 48                 return  i;
 49             }else {
 50                 //余额不够
 51                 throw new RuntimeException("余额不足,转账失败");
 52             }
 53         } catch (SQLException e) {
 54             throw new RuntimeException(e);
 55         }finally {
 56             JDBDUtil.close(conn,preparedStatement,rs);
 57             JDBDUtil.close(null,preparedStatement1,null);
 58         }
 59     }
 60     //取款
 61     public Integer out(String accountid,Double balance)
 62     {
 63         //取款之前先查询
 64         ResultSet rs=null;
 65         PreparedStatement preparedStatement=null;
 66         double b=0;
 67         String sql="select balance from account1 where accountid = ?";
 68         try {
 69             preparedStatement=conn.prepareStatement(sql);
 70             preparedStatement.setString(1,accountid);
 71             rs=preparedStatement.executeQuery();
 72             while(rs.next()){
 73                 b=rs.getDouble("balance");
 74             }
 75             if(b>=balance){
 76                 //余额够,执行修改
 77                 sql="update account set balance = balance - ? where accountid = ?";
 78                 preparedStatement=conn.prepareStatement(sql);
 79                 preparedStatement.setDouble(1,balance);
 80                 preparedStatement.setString((int)2,accountid);
 81                 int i=preparedStatement.executeUpdate();
 82                 return  i;
 83             }else {
 84                 //余额不够
 85                 throw new RuntimeException("余额不足,无法转账");
 86             }
 87         } catch (SQLException e) {
 88             throw new RuntimeException(e);
 89         }
 90     }
 91     //存款
 92     public  Integer in(String accountid,Double balance){
 93         int i=0;
 94         String sql= "update account1 set balance = ? where accountid = ?";
 95         PreparedStatement preparedStatement=null;
 96         try {
 97             preparedStatement=conn.prepareStatement(sql);
 98             preparedStatement.setDouble(1,balance);
 99             preparedStatement.setString(2,accountid);
100             i=preparedStatement.executeUpdate();
101         } catch (SQLException e) {
102             throw new RuntimeException(e);
103         }finally {
104             JDBDUtil.close(conn,preparedStatement,null);
105         }
106         return i;
107     }
108     //开户
109     public Integer add(String accountid,Double balance){
110         int i=0;
111         String sql= "insert into account1 (accountid,balance) values (?,?)";
112         PreparedStatement preparedStatement=null;
113         try {
114             preparedStatement=conn.prepareStatement(sql);
115             preparedStatement.setString(1,accountid);
116             preparedStatement.setDouble(2,balance);
117             i=preparedStatement.executeUpdate();
118         } catch (SQLException e) {
119             throw new RuntimeException(e);
120         }finally {
121             JDBDUtil.close(conn,preparedStatement,null);
122         }
123         return  i;
124     }
125 }

 

标签:第三十六,于芮,null,preparedStatement,sql,balance,20220819,conn,accountid
来源: https://www.cnblogs.com/dijiuzu/p/16603276.html