Mysql 数据库连接、访问、增删查改

Mysql数据库常用操作

Mysql建库、建表

CREATE DATABASE spring_jdbc_test;
DROP TABLE IF EXISTS `question_validate_log`;
CREATE TABLE IF NOT EXISTS `student`(
    `id` int unsigned auto_increment,
    `name` VARCHAR(50) NOT NULL,
    `sex` ENUM("male","female"),
    `age` tinyint unsigned,
    PRIMARY KEY (id)
    )ENGINE=innodb DEFAULT charset = utf8;

CRUD

INSERT INTO student ( `name`, `sex`, `age` ) VALUES ( 'tom', 1, 22 )select * from student where id =1;
delete from student where id = 5;
update student set name = "jerry" where id =2 ;

事物

![Mysql事务](https://img-blog.csdnimg.cn/20191119155551921.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3NTYxMTY1#pic_center =200x400 ,size_16,color_FFFFFF,t_70)
一个连接的事物在处理过程中时
另外一个连接客户端在事物提交之前 ,并不会知道这个事物的执行结果,否则就脏读了。

JDBC数据库连接并且进行CRUD、设置简单的事务

CRUD接口

public interface DbCRUD {

    int create(Student student);

    Student queryById(int id);

    boolean delete(int id);

    boolean update(Student student);
}

CRUD实现

    @Override
    public int create(Student student) {
        int res = -1;
        try {
            String insertCommand = "INSERT INTO " + TABLE_NAME + " ( " + ALL_COLUMN_WITHOUT_ID + " )" +
                    " VALUES " +
                    "( ?, ?, ? )";
            PreparedStatement statement = conn.prepareStatement(insertCommand, Statement.RETURN_GENERATED_KEYS);
            statement.setString(1, student.getName());
            statement.setInt(2, student.getSex().toInt());
            statement.setInt(3, student.getAge());
            res = statement.executeUpdate();
            ResultSet resultSet = statement.getGeneratedKeys();
            while (resultSet.next()) {
                res = resultSet.getInt(1);
            }
            try {
                resultSet.close();
            } catch (Exception e) {
                System.out.println("resultSet close exception");
            }
            try {
                statement.close();
            } catch (Exception e) {
                System.out.println("statement close exception");
            }
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
        return res;
    }

    @Override
    public Student queryById(int id) {
        Student student = null;
        try {
            String queryCommand = "SELECT " + ALL_COLUMN + " FROM " + TABLE_NAME + " WHERE id = ?";
            PreparedStatement statement = conn.prepareStatement(queryCommand);
            statement.setInt(1, id);
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                student = new Student();
                student.setId(resultSet.getInt(1));
                student.setName(resultSet.getString(2));
                student.setSex(Sex.findByString(resultSet.getString(3)));
                student.setAge(resultSet.getInt(4));
            }
            try {
                resultSet.close();
            } catch (Exception e) {
                System.out.println("resultSet close exception");
            }
            try {
                statement.close();
            } catch (Exception e) {
                System.out.println("statement close exception");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return student;
    }

    @Override
    public boolean delete(int id) {
        boolean res = false;
        String deleteCommand = "DELETE FROM " + TABLE_NAME + " WHERE id = ?";
        try {
            PreparedStatement statement = conn.prepareStatement(deleteCommand);
            statement.setInt(1, id);
            res = statement.executeUpdate() > 0;
            try {
                statement.close();
            } catch (Exception e) {
                System.out.println("statement close exception");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }

    @Override
    public boolean update(Student student) {
        //需要判断id的正确性、student内容的正确性
        boolean res = false;
        if (student.getId() > 0) {
            StringBuilder updateCommand = new StringBuilder();
            updateCommand.append("UPDATE " + TABLE_NAME + " SET ");
            List<String> args = new ArrayList<>();
            if (StringUtils.isNotBlank(student.getName())) {
                args.add("name = ?");
            }
            if (student.getSex() != null) {
                args.add("sex = ?");
            }
            if (student.getAge() > 0) {
                args.add("age = ?");
            }
            updateCommand.append(StringUtils.join(args, ", "));
            updateCommand.append(" WHERE id = ?");
            try {
                PreparedStatement statement = conn.prepareStatement(updateCommand.toString());
                if (StringUtils.isNotBlank(student.getName())) {
                    statement.setString(1, student.getName());
                }
                if (student.getSex() != null) {
                    statement.setInt(2, student.getSex().toInt());
                }
                if (student.getAge() > 0) {
                    statement.setInt(3, student.getAge());
                }
                statement.setInt(4, student.getId());
                res = statement.executeUpdate() > 0;
                try {
                    statement.close();
                } catch (Exception e) {
                    System.out.println("statement close exception");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return res;
    }
    //mysql驱动包名
    private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
    //数据库连接地址
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/spring_jdbc_test";
    //用户名
    private static final String USER_NAME = "root";
    //密码
    private static final String PASSWORD = "***";

    @Test
    private void testDb() {
        Dbtest dbtest = new Dbtest();
        try {
            //加载mysql的驱动类
            Class.forName(DRIVER_NAME);
            //获取数据库连接
            dbtest.conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
            //设置事物
            dbtest.conn.setAutoCommit(false);
            dbtest.create(new Student(-1, "tom", Sex.MALE, 22));
            System.out.println(dbtest.queryById(5));
            dbtest.conn.commit();
            //设置回默认值
            dbtest.conn.setAutoCommit(false);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dbtest.conn != null) {
                try {
                    dbtest.conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

JDBC语句对象:

常规语句General Statement

预置语句Prepared Statement

可调用语句Callable Statement

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值