作用:1:保证数据的正确性,保证如下特征:
a:原子性:如果因故障中断,则所有结果都撤消
b:一致性:事务处理的结果保留不变的特性
c:孤立性:中间状态对其他事务是不可见的
d:持久性:完成事务的结果是持久的
事务终止的两种方式:1提交,一个事务使其结果永久不变,2回滚,撤消所有更改回到原来状态。
2:解决数据同时读取的问题:
3个问题:
a:脏读取:一个事务读取了另外一个并行事务未提交的数据
b:不可重复读取:一个事务再次读取之前的 数据时得到的数据不一致,被另外一个事务修改
c:虚读:一个事务重新执行一个查询,返回的记录包含了其他事务提交的新记录
解决办法:
设定事务的隔离级别:con.setTransactionIsolation(Connection.isolationLevel);[@more@] 四种隔离级别:
con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//最底级别:只保证不会读到非法数据,上述3个问题有可能发生
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //默认级别:可以防止脏读
con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//可以防止脏读和不可重复读取
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //最高级别:防止上述3种情况,事务串行执行
1:
try{ //1:设置自动提交为false
con.setAutoCommit(false);
//2:创建SQL语句
PreparedStatement st = con.prepareStatement("update book set name=? where id=?");
st.setString(1,"hibernate4");
st.setInt(2,2);
st.executeUpdate();
//3:提交
con.commit();
}catch(Exception e){
//4:如果有异常发生回滚到原来的状态
con.rollback();
}finally{
//5:设置成为默认状态
con.setAutoCommit(true);
}
-------------------------------------------------------------
metadata:(元数据)
用来获取具体的表的相关信息,如:数据库中有哪些表,表中有哪些字段和字段的属性,两种元数据:
1:DatabaseMetaData://用来获得数据库的相关信息
DatabaseMetaData dbmd = con.getMetaData();//通过connection对象获得
System.out.println(dbmd.getDatabaseProductName());
System.out.println(dbmd.getDriverName());
System.out.println(dbmd.getSchemas());
2:ResultSetMetaData://用来获得表的信息
ResultSetMetaData rsmd = rs.getMetaData();//通过ResultSet对象获得
int column = rsmd.getColumnCount();//获得总列数
System.out.println(rsmd.getColumnName(1));//获得列名
System.out.println(rsmd.getColumnTypeName(1));//获得列的类型
System.out.println(rsmd.getTableName(1));//获得表名
--------------------------------------------------------------------------
oracle 相关概念:
1:Oracle全局数据库名和SID
数据库名是一个数据库的名称标识,如MyOracle;这个数据库处于网络中时,为标识该数据库的网络位置,需要用数据库名和网络位置组成其全局数据库名,如MyOracle.domain。即MyOracle和MyOracle.domain都指同一个数据库,只是一个名字用在本机上指明,另一个名字用在网络上指明。
SID是一个Oracle实例的唯一名称标识。Oracle实例(Instance)也称为Oracle服务器(Server),是用来访问数据库文件集的存储结构与后台程序的集合,用SID来标识。
一个数据库是Oracle用于保存数据的一系列物理结构和逻辑结构。
简单地说,一个Oracle数据库是磁盘上的一堆文件;为了启动数据库即访问这堆文件,需要在内存中创建它的一个实例,然后由实例加载并打开数据库,实例就是内存中的一堆进程。用户连接数据库时,实际上是连接到实例,然后由实例负责与数据库通信,再将处理结果返回给用户。
所以,Oracle中一个数据库至少有一个实例与之对应,但一个数据库可以对应多个实例,被多个实例访问。
2:oracle的存储结构:
数据库、表空间、数据文件表、数据。比如一个装满东西的柜子,数据库就是柜子,柜子中的抽屉就表空间,抽屉中的文件夹就是
数据文件,文件中的纸就是表,表上的信息就是数据
实现oracle自动增加列
1:-- 创建表
create table myTable
(
id int,
uid varchar(20),
pwd varchar(50),
primary key( int_menu_id )
);
2:
-- 创建一个序列
create sequence name
increment by x //x为增长间隔
start with x //x为初始值
maxvalue x //x为最大值
minvalue x //x为最小值
cycle //循环使用,到达最大值或者最小值时,从新建立对象
cache x //制定缓存序列值的个数
一个例子create sequence seqmax
increment by 1
start with 1
no maxvalue
nocache
create sequence seq_myTable NoMaxValue NoCycle;
3: -- 创建一个触发器
CREATE OR REPLACE TRIGGER "TGR_2" BEFORE
INSERT ON "MYTABLE" FOR EACH ROW begin
select seq_mytable.nextval into :new.id from dual;
end;
对Oralce 中的数据进行操作:
try {
Class.forName("oracle.jdbc.OracleDriver");//注册oracle驱动
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:lxldb","lxl","lxl");//连接到oracle数据库
Statement st = con.createStatement();//创建sql
st.executeUpdate("insert into student(name) values ('lxl')");//执行sql
st.close();//关闭连接
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SQL-Plus和TOAD的使用
a:原子性:如果因故障中断,则所有结果都撤消
b:一致性:事务处理的结果保留不变的特性
c:孤立性:中间状态对其他事务是不可见的
d:持久性:完成事务的结果是持久的
事务终止的两种方式:1提交,一个事务使其结果永久不变,2回滚,撤消所有更改回到原来状态。
2:解决数据同时读取的问题:
3个问题:
a:脏读取:一个事务读取了另外一个并行事务未提交的数据
b:不可重复读取:一个事务再次读取之前的 数据时得到的数据不一致,被另外一个事务修改
c:虚读:一个事务重新执行一个查询,返回的记录包含了其他事务提交的新记录
解决办法:
设定事务的隔离级别:con.setTransactionIsolation(Connection.isolationLevel);[@more@] 四种隔离级别:
con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//最底级别:只保证不会读到非法数据,上述3个问题有可能发生
con.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //默认级别:可以防止脏读
con.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);//可以防止脏读和不可重复读取
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); //最高级别:防止上述3种情况,事务串行执行
1:
try{ //1:设置自动提交为false
con.setAutoCommit(false);
//2:创建SQL语句
PreparedStatement st = con.prepareStatement("update book set name=? where id=?");
st.setString(1,"hibernate4");
st.setInt(2,2);
st.executeUpdate();
//3:提交
con.commit();
}catch(Exception e){
//4:如果有异常发生回滚到原来的状态
con.rollback();
}finally{
//5:设置成为默认状态
con.setAutoCommit(true);
}
-------------------------------------------------------------
metadata:(元数据)
用来获取具体的表的相关信息,如:数据库中有哪些表,表中有哪些字段和字段的属性,两种元数据:
1:DatabaseMetaData://用来获得数据库的相关信息
DatabaseMetaData dbmd = con.getMetaData();//通过connection对象获得
System.out.println(dbmd.getDatabaseProductName());
System.out.println(dbmd.getDriverName());
System.out.println(dbmd.getSchemas());
2:ResultSetMetaData://用来获得表的信息
ResultSetMetaData rsmd = rs.getMetaData();//通过ResultSet对象获得
int column = rsmd.getColumnCount();//获得总列数
System.out.println(rsmd.getColumnName(1));//获得列名
System.out.println(rsmd.getColumnTypeName(1));//获得列的类型
System.out.println(rsmd.getTableName(1));//获得表名
--------------------------------------------------------------------------
oracle 相关概念:
1:Oracle全局数据库名和SID
数据库名是一个数据库的名称标识,如MyOracle;这个数据库处于网络中时,为标识该数据库的网络位置,需要用数据库名和网络位置组成其全局数据库名,如MyOracle.domain。即MyOracle和MyOracle.domain都指同一个数据库,只是一个名字用在本机上指明,另一个名字用在网络上指明。
SID是一个Oracle实例的唯一名称标识。Oracle实例(Instance)也称为Oracle服务器(Server),是用来访问数据库文件集的存储结构与后台程序的集合,用SID来标识。
一个数据库是Oracle用于保存数据的一系列物理结构和逻辑结构。
简单地说,一个Oracle数据库是磁盘上的一堆文件;为了启动数据库即访问这堆文件,需要在内存中创建它的一个实例,然后由实例加载并打开数据库,实例就是内存中的一堆进程。用户连接数据库时,实际上是连接到实例,然后由实例负责与数据库通信,再将处理结果返回给用户。
所以,Oracle中一个数据库至少有一个实例与之对应,但一个数据库可以对应多个实例,被多个实例访问。
2:oracle的存储结构:
数据库、表空间、数据文件表、数据。比如一个装满东西的柜子,数据库就是柜子,柜子中的抽屉就表空间,抽屉中的文件夹就是
数据文件,文件中的纸就是表,表上的信息就是数据
实现oracle自动增加列
1:-- 创建表
create table myTable
(
id int,
uid varchar(20),
pwd varchar(50),
primary key( int_menu_id )
);
2:
-- 创建一个序列
create sequence name
increment by x //x为增长间隔
start with x //x为初始值
maxvalue x //x为最大值
minvalue x //x为最小值
cycle //循环使用,到达最大值或者最小值时,从新建立对象
cache x //制定缓存序列值的个数
一个例子create sequence seqmax
increment by 1
start with 1
no maxvalue
nocache
create sequence seq_myTable NoMaxValue NoCycle;
3: -- 创建一个触发器
CREATE OR REPLACE TRIGGER "TGR_2" BEFORE
INSERT ON "MYTABLE" FOR EACH ROW begin
select seq_mytable.nextval into :new.id from dual;
end;
对Oralce 中的数据进行操作:
try {
Class.forName("oracle.jdbc.OracleDriver");//注册oracle驱动
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:lxldb","lxl","lxl");//连接到oracle数据库
Statement st = con.createStatement();//创建sql
st.executeUpdate("insert into student(name) values ('lxl')");//执行sql
st.close();//关闭连接
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SQL-Plus和TOAD的使用
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/663635/viewspace-923147/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/663635/viewspace-923147/