JDBC基本和数据库事务
来源:互联网 发布:剑灵范冰冰捏脸数据 编辑:程序博客网 时间:2024/05/10 16:34
JDBC:
是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问。
功能:与数据库建立连接、发送SQL语句并处理结果。
显示数据库:show databases;
使用数据库:user 库名; (如:user mysql;)
显示数据库表:show tables;
显示表结构:describe 表名; (如:describe time_zone;)
建数据库:create database 库名; (如:create database school;)
在数据库中创建表:create table 表名(字段定义);
如; user school; //不能少
(id int(3) not null primary key,
name char(10),
address varchar(50),
year date );
添加记录:insert into 表名 values(各字段名);
如:insert into teacher values(001,’abc’,’hbes’,’1975-03-03’);
查询记录:select 字段 from 表名 where 条件;
如:select * from teacher;
select name from teacher where id = 001;
删除记录:delete from 表名 where 条件;
如:delete from teacher where id = 002;
delete from teacher;
更新记录:update 表名 set 字段名=值 where 条件;
如:update teacher set address = ‘wust’ where id = ‘001’;
删除表:drop table 表名;
删除数据库:drop database 库名;
MySQL中文处理:
先运行:Set Names GBK;
create table teacher
( id int(3) not null primary key,
name char(10),
address varchar(50),
year date )
default character set gbk;
就可添加和显示汉字数据
接口说明:
java.sql.DriverManager:处理驱动程序的调入和管理。
java.sql.Connection:其对象代表对特定数据库的一个连接。
java.sql.Statement:一个特定的容器,用以执行SQL语句。
java.sql.ResultSet:其对象代表执行一个Select语句后的结果集合。
Java访问数据库的基本步骤:
1、装载数据库的JDBC驱动程序:
Class.forName(“org.gjt.mm.mysql.Driver”).newInstance();
2、建立与数据库额连接:Connection conn = DriverManager.getConnectiton(url,用户名,密码);
MySQL连接串:”jdbc:mysql://主机:端口号/数据库名”
例如:String url = “jdbc:mysql://localhost:3306/school”;
3、建立Statement对象,准备执行SQL语句:
Statement stmt = conn.createStatement();
4、执行SQL语句:
常见3种执行SQL语句的方法:
1)executeQuery()--用于Select语句,返回结果集(ResultSet).
String sql = “select * from 表名”;
ResultSet rs = stmt.executeQuery(sql);
2) executeUpdate()--用于创建和更新表(如Update/Insert/Delete/Create),返回受影响行数(int)。
String sql = “Delete from 表名 where ...”;
int rsCount = stmt.executeUpdate(sql);
3) execute()--用于执行任何SQL语句,返回布尔值(执行是否成功)。
5、处理ResultSet结果集(主要是查询结果集)
while(rs.next()){
String s1 = rs.getString(“name”);//根据列名取值
...
或String s2 = rs.getString(2);//根据列号取值(从1开始)
或int id = rs.getInt(1);
}
6、依次关闭ResultSet、Statement和Connection对象:
rs.close(); stmt.close(); conn.close();
import java.io.*; import java.sql.*;
public class test {
public static void main(String[] args) throws Exception {
String url ="jdbc:mysql://localhost:3306/school"; //数据库连接字符串
Class.forName("org.gjt.mm.mysql.Driver").newInstance(); //加载驱动程序
Connection conn= DriverManager.getConnection(url,"root","dba"); //建立连接
Statement stmt=conn.createStatement(); //创建SQL容器
String sql="select * from teacher"; //表为teacher
ResultSet rs=stmt.executeQuery(sql); //获得结果集
while( rs.next() ) { //处理结果集
System.out.print(rs.getString("id")+" ");
System.out.print(rs.getString("name")+" ");
System.out.print(rs.getString("address")+" ");
System.out.print(rs.getString("year")+"\n");
}
rs.close(); stmt.close(); conn.close(); //关闭次序
}
}
注意MySQL驱动问题;
在当前项目中添加该驱动:
右击当前项目;
选择Build path → add External Archieves→引入mysql-connector-java-5.1.10-bin.jar。
条件查询:
String name = (new Scanner(System.in)).nextLine();
String sql = “select * from teacher where name =‘“+name+”’”;
ResultSet rs = stmt.executeQuery(sql);
//处理查询结果集
基本语句:
String sql="update teacher set name='amy' where id='002'";
int rowCount=stmt.executeUpdate(sql);
String sql="insert into teacher values(002,'hgdamy','wust','1974-02-03')";
int rowCount=stmt.executeUpdate(sql);
String sql="delete from teacher where id='002'";
int rowCount=stmt.executeUpdate(sql);
之后再查询
sql="select * from teacher ";
ResultSet rs=stmt.executeQuery(sql);
数据库事务:
在数据库中,事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。
为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。
事务的操作:先定义开始一个事务,然后对数据作修改操作,这时如果提交(COMMIT),这些修改就永久地保存下来,如果回退(ROLLBACK),数据库管理系统将放弃所作的所有修改而回到开始事务时的状态。
事务的ACID属性:
1、原子性(Atomicity):是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2、一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3、隔离性(Isolation):是指一个事务的执行不能被其它事务干扰,即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事务之间不能互相干扰。
4、持久性(Durability):是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其它操作和数据库故障不应该对其有任何影响。
事务:指构成单个逻辑工作单元的操作集合
事务处理:保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),要么整个事务回滚(rollback)到最初状态。
当一个连接对象被创建时,默认情况下是自动提交事务:每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚。
当JDBC程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。若想关闭这种默认提交方式,让多条SQL在一个事务中执行,并且保证这些语句是在同一时间共同执行时,我们就应该为这多条语句定义一个事务。
设置事务的提交方式为非自动提交:
conn.setAutoCommit(false);
接下来,.将需要添加事务的代码放入try,catch块中。然后,在try块内添加事务的提交操作,表示操作无异常,提交事务:
conn.commit();
在catch块内添加回滚事务,表示操作出现异常,撤销事务:
conn.rollback();
最后,设置事务提交方式为自动提交:
conn.setAutoCommit(true);
数据库的隔离级别:
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:
脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.
数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱。
数据库提供的4种事务隔离级别:
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ
- JDBC基本和数据库事务
- JDBC和数据库事务详解(一)
- JDBC和数据库事务详解(二)
- JDBC事务和数据库事务嵌套的讨论
- JDBC事务和数据库事务嵌套的讨论
- 数据库的事务JDBC
- 【JDBC】数据库事务
- JDBC连接数据库和基本操作
- 数据库基本操作和JDBC编程步骤
- JDBC事务和JTA事务
- JDBC事务和JTA事务
- JDBC事务和JTA事务
- JTA事务和JDBC事务
- JDBC事务和JTA事务
- JTA和JDBC事务
- JTA和JDBC事务
- JTA和JDBC事务
- JDBC 数据类型和事务
- Picasso 框架的简单使用 图片缓存 重用 和加载 裁剪
- VTK .gml文件的读取
- ElasticSearch的Mapping之字段类型
- 统一通信系统解决方案
- 为xml文件中已有的控件在代码中设置宽高
- JDBC基本和数据库事务
- boot loader:Grub
- SIFT之极值点检测
- 陪学网Axure原型设计比赛开响!你敢来挑战吗?
- An internal error occurred during:"Update Installed JREs".java.lang.NullPointerException
- Js日期函数
- 负载均衡的常用算法
- 调整大量开源库项目(五)跳动的TextView JumpingBeans,良好体验的滚动栏ConvenientBanner
- res与res-auto的区别