事务的概念及数据库数据的输入与输出

上次总结到数据库SQL语句的准备和执行,以及批处理操作。

  • 事务

事务是指一组数据库SQL操作语句,执行时要么全部成功,要么全部失败。这组SQL语句是指DML语句(insert  delete update)。其中有一条DML语句执行失败,则所有 SQL操作失败,数据将回滚(rollback)到SQL语句操作前的状态。

事务的四个特性:

1)原子性:即执行时要么全部成功,要么全部失败。

2)持久性:SQL语句执行完之后,数据的改变是永久的。

3)一致性:指SQL执行失败,数据将会回滚至之前的状态。

4)隔离性:指事务并发执行时,用户只会看到事务执行前或执行后的数据状态,而不会看到数据的中间状态。


  • 数据库数据的输入与输出
CLOB: Character Large Object 大量文本数据对象,用来存储大量的文本信息,以 字符为单位存储数据于数据库中。对应的数据库类型为Clob等。数据库中可能要存储文章等长篇幅信息,例如自我介绍等,此时CLOB便可发挥它的功能了。
CLOB数据输入数据库操作:输入操作使用Statement实现类的setClob方法,该方法需要一个读取字符的IO流(###Reader),一般从本地文件读取信息至数据库。

代码实现:
	ps=con.prepareStatement("insert into Student(Id,Info) values(?,?)");
	ps.setObject(1, 1);
	try {
		ps.setClob(2,new FileReader(new File("d:/a.txt")) );
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
			
	ps.executeUpdate();

CLOB数据输出操作:同样地,需要用到IO流来读取数据库中的文本信息,并写到Java程序或者本地文件中。使用getClob方法,其中需要的IO流是getCharacterStream方法提供的。

代码实现:
	ps=con.prepareStatement("select * from Student where id=1");
	re=ps.executeQuery();
			
	while(re.next()){
		Clob info=(Clob) re.getClob(6);
		int len=0;
		Reader reader=info.getCharacterStream();	//关闭流			
		try {
			while((len=reader.read())!=-1){
				System.out.print((char)len);
			}
		} catch (IOException e) {
			e.printStackTrace();
			}
		}

BLOB: Binary Large Object  大量二进制对象;与CLOB类似,只不过BLOB用来存储 二进制类型的大量数据,例如音频,图片,视频等,对应的数据库类型为Blob。同时,它的输入与输出也需要用到IO流。
Blob的输入操作:使用setBlob方法,使用读取二进制的IO流来读取数据(###InputStream)。

代码实现:
	ps.setBlob(2, new FileInputStream(new File("D:/Lighthouse.jpg")));
	ps.executeUpdate();

Blob的输出操作:使用getBlob方法,使用getBinaryStream方法获取IO流。

代码实现:
	ps=con.prepareStatement(sql);
	rs=ps.executeQuery();
			
	while(rs.next()){
		Blob blo=rs.getBlob("Image");
		is=blo.getBinaryStream();
		os=new FileOutputStream("d:/sql.jpg");//使用流将读取的二进制数据写到 d:/sql.jpg 中
		int len=0;
		byte[] bytes=new byte[1024000];
				
		while((len=is.read(bytes))!=-1){
			os.write(bytes, 0, len);
		}	
	}

总结:理解事务的概念,再次回顾并巩固CLOB,BLOB的操作。

       下次总结:嵌入式SQL语言及ORM
















你可能感兴趣的:(java,数据库,事务,数据库)