事务回滚、MVC设计模式(编程思想,便于对代码的管理)

Model View Control

MySqlPrepare(把数据库的连接单独创建一类)

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;

public class MySqlPrepare {

    private Connection conn;
    private static MySqlPrepare manager;
    public static MySqlPrepare newInstance(){
        if(manager==null){
            //如果没有创建对象,则创建一个,如果已经创建了就直接返回,保证只有一个类的实例
            manager=new MySqlPrepare();
        }
        //返回本实例的一个对象
        return manager;
    }
    private MySqlPrepare(){
        try {
            // 从保重加载驱动
            Class.forName("com.mysql.jdbc.Driver"); // 加载MYSQL JDBC驱动程序
            // Class.forName("org.gjt.mm.mysql.Driver");
            System.out.println("Success loading Mysql Driver!");
            // 建立连接,加database的名字,加入用户名密码
             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/clazz", "root", "123456");
                // URL:连接URL为 jdbc:mysql//服务器地址/数据库名
                // ,user:后面的2个参数分别是登陆用户名和password:密码

                // 用连接去增删改查
        }catch (Exception e) {
            System.out.print("Error loading Mysql Driver!");
            e.printStackTrace();
        }   
    }
    public Connection getConn() {
        return conn;
    }
    public void setConn(Connection conn) {
        this.conn = conn;
    }
}

MysqlOprate (数据库的操作单独创建一类)

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MysqlOprate {
    private static MysqlOprate oprate;
    private MysqlOprate(){

    }
    /**
     * 单例设计模式
     * @return 只能创建一个对象
     */
    private static synchronized MysqlOprate newInstance(){
        if(oprate==null){
            oprate=new MysqlOprate();
        }
        return oprate;
    }
    /**
     * 
     * @param name 传入要查询的用户名
     * @param pass 传入要查询的用户名密码
     * @return  如果用户名密码都匹配,则返回true,否则返回false
     */
    public boolean signIn(String name,String pass){
        Connection connect=MySqlPrepare.newInstance().getConn();
        try {
            if (!connect.isClosed()) {
                PreparedStatement prepare= connect.prepareStatement("select * from user where user_name=? and user_word=?");
                prepare.setString(1, name); //对占位符设置值,占位符顺序从1开始,第一个参数是占位符的位置,第二个参数是占位符的值。
                prepare.setString(2, pass);
                ResultSet set= prepare.executeQuery();
                set.last();
                int num=set.getRow();//另一种方法
                return num==1;
            } else {
                System.out.println("请与数据库建立连接");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }
}

在其他程序中使用时创建另一个类

事务

银行ATM取款

输入金额->服务器->播放录音->打开取钱口->吐钱->拿钱走

写一个事务,数据库连接默认每一条语句都是一个事务,会单独执行,首先设置connection不自动提交,最后一起提交,若其中的一条出错,则之前执行的语句都撤销。

Connection conn=MySqlPrepare.newInstance().getConn();
        String str1="insert into user (user_name,user_word)values('zhangsan1','12346')";
        String str2="insert into user (user_name,user_word)values('zhangsan2','12346')";
        String str3="insert into user (user_names,user_word)values('zhangsan3','12346')";
        String str4="insert into user (user_name,user_word)values('zhangsan4','12346')";
        try {
            Statement state=conn.createStatement();
            //把默认的每条语句都是一条事务关闭,然后
            conn.setAutoCommit(false);
            state.ececute(str1);
            state.execute(str2);
            state.execute(str3);
            state.execute(str4);
            conn.commit();
            //用这几条语句可以增加效率
            "   
            Statement state=conn.createStatement();
            conn.setAutoCommit(false);
            state.addBatch(str1);
            state.addBatch(str2);
            state.addBatch(str3);
            state.addBatch(str4);
            state.executeBatch();
            "
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值