java web jdbcd_JavaWeb之JDBC(复习)

十二、JDBC(复习)

目录:JDBC、事务

1.JDBC

什么是JDBC:Java连接数据库。

e8571cba96d3

JDBC原理

需要jar包的支持:

①java.sql

②javax.sql

③mysql-connector-java…连接驱动(必须要导入)

创建测试数据库中的users表,可下载使用:https://share.weiyun.com/CT4MEnQJ,也可以直接复制下方。

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','2000-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','2000-01-01');

导入数据库依赖:

mysql

mysql-connector-java

5.1.47

IDEA中连接数据库:右侧Database——>点击+——>选择Data Source——>选择MySQL——>填写数据库的用户名和密码——>点击Test Connection测试功能——>点击Apply——>OK

e8571cba96d3

点击Database和+

e8571cba96d3

填写数据库的用户名和密码

JDBC固定步骤:

①加载驱动。

② 连接数据库。

③向数据库发送SQL的对象Statement、PreparedStatement:CRUD。

④编写SQL (根据业务编写不同的SQL)。

⑤执行SQL。

⑥关闭连接。

package com.ping.jdbc;

import java.sql.*;

public class TestJdbc {

public static void main(String[] args) throws ClassNotFoundException, SQLException {

//配置信息

//useUnicode=true&characterEncoding=utf-8 解决中文乱码

String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";

String username = "root";

String password = "123456";

//加载驱动

Class.forName("com.mysql.jdbc.Driver");

//连接数据库,代表数据库

Connection connection = DriverManager.getConnection(url, username, password);

//向数据库发送SQL的对象Statement,PreparedStatement : CRUD

Statement statement = connection.createStatement();

//编写SQL

String sql = "select * from users";

//执行查询SQL,返回一个 ResultSet : 结果集

ResultSet rs = statement.executeQuery(sql);

while (rs.next()){

System.out.println("id="+rs.getObject("id"));

System.out.println("name="+rs.getObject("name"));

System.out.println("password="+rs.getObject("password"));

System.out.println("email="+rs.getObject("email"));

System.out.println("birthday="+rs.getObject("birthday"));

}

//关闭连接,释放资源一定要先开后关

rs.close();

statement.close();

connection.close();

}

}

预编译SQL:

package com.ping.jdbc;

import java.sql.*;

public class TestJdbc2 {

public static void main(String[] args) throws Exception {

//配置信息

String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";

String username = "root";

String password = "123456";

//加载驱动

Class.forName("com.mysql.jdbc.Driver");

//连接数据库

Connection connection = DriverManager.getConnection(url, username, password);

//编写SQL

String sql = "insert into users(id, name, password, email, birthday) values (?,?,?,?,?);";

//预编译

PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.setInt(1,2);

preparedStatement.setString(2,"Ping");

preparedStatement.setString(3,"123456");

preparedStatement.setString(4,"2585801995@qq.com");

preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));

//执行SQL

int i = preparedStatement.executeUpdate();

if (i>0){

System.out.println("插入成功@");

}

//关闭连接,释放资源一定要先开后关

preparedStatement.close();

connection.close();

}

}

2.事务

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

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

步骤:

①开启事务

②事务提交 commit()

③事务回滚 rollback()

④关闭事务

Junit单元测试

导入依赖:

junit

junit

4.12

简单使用:@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行。

创建测试数据库中的表,用来模拟账户转账,可下载使用:https://share.weiyun.com/ddtKuOZf,也可以直接复制下方。

CREATE TABLE account(

id INT PRIMARY KEY AUTO_INCREMENT,

`name` VARCHAR(40),

money FLOAT

);

INSERT INTO account(`name`,money) VALUES('A',1000);

INSERT INTO account(`name`,money) VALUES('B',1000);

INSERT INTO account(`name`,money) VALUES('C',1000);

模拟转账

@Test

public void test() {

//配置信息

String url="jdbc:mysql://localhost:3306/jdbc?useUnicode=true&characterEncoding=utf-8";

String username = "root";

String password = "123456";

Connection connection = null;

//加载驱动

try {

Class.forName("com.mysql.jdbc.Driver");

//连接数据库

connection = DriverManager.getConnection(url, username, password);

//通知数据库开启事务,false时开启

connection.setAutoCommit(false);

String sql = "update account set money = money-100 where name = 'A'";

connection.prepareStatement(sql).executeUpdate();

//制造错误

//int i = 1/0;

String sql2 = "update account set money = money+100 where name = 'B'";

connection.prepareStatement(sql2).executeUpdate();

connection.commit();//以上两条SQL都执行成功了,就提交事务

System.out.println("success");

} catch (Exception e) {

try {

//如果出现异常,就通知数据库回滚事务

connection.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

e.printStackTrace();

}finally {

try {

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值