JavaWeb-14-JDBC

14. JDBC

什么是JDBC:Java链接数据库

在这里插入图片描述

需要jar包的支持:

  • java.sql
  • javax.sql
  • mysql-connector-java…连接驱动

实验环境搭建

CREATE TABLE users (
	id INT PRIMARY KEY,
	`name` VARCHAR(40),
	`password` VARCHAR(40),
	email VARCHAR(60),
	birthday date

);


INSERT INTO users(id,`name`,`password`,email,birthday) 
VALUES(1,'张三','123456','zs@qq.com','2002-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday) 
VALUES(2,'李四','123456','ls@qq.com','2000-01-01');
INSERT INTO users(id,`name`,`password`,email,birthday) 
VALUES(3,'王五','123456','ww@qq.com','2001-01-01');

SELECT * FROM users;

导入数据库依赖

<!--mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.19</version>
</dependency>

IDEA中的数据库:

在这里插入图片描述

JDBC固定步骤:

  1. 加载驱动
  2. 连接数据库,代表数据库
  3. 向数据库发送SQL的对象Statement,PreparedStatement:CRUD
  4. 编写SQL
  5. 执行SQL
  6. 关闭连接

预编译SQL

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //配置信息

        String url = "jdbc:mysql://localhost:3306/web_jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC";
        String username = "root";
        String password = "123456";


        //1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 连接数据库,代表数据库
        Connection connection = DriverManager.getConnection(url, username, password);

        //3. 编写sql
        String sql = "insert into users(id, name, password, email, birthday) values(?,?,?,?,?);";

        //4. 预编译
        PreparedStatement ps = connection.prepareStatement(sql);

        ps.setInt(1,5);//第一个占位符?赋值为1
        ps.setString(2,"啦啦啦");
        ps.setString(3,"123456");
        ps.setString(4,"123465@qq.com");
        ps.setDate(5,new Date(new java.util.Date().getTime()));


        //5. 执行SQL
        int i = ps.executeUpdate();

        if (i>0) {
            System.out.println("插入成功");
        }

        //6. 关闭连接释放资源 (一定)先开的后关

        ps.close();

        connection.close();

    }

*找了小bug:*for the right syntax to use near ‘?,?,?,?)’

1、符号错误,比如 ? ,等打成中文字符。

2、执行语句时写成如下形式:

pst.executeUpdate(sql);

而占位符语句不能用带有参数的executeUpdate()方法执行。若sql语句使用写死的语句则可以使用带参的方法。

解决方案:

1、重敲错误位置的字符。

2、执行语句去掉“sql”:执行pst.executeUpdate();

事务

要么都成功,要么都失败!

ACID原则:保证数据的安全。

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency)
    事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
开启事务
事务提交  commit()
事务回滚  rollback()
关闭事务

转账:
A:1000
B:1000

A(900)  --100-->  B(1100)
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值