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

来源:互联网 发布:加工中心简单编程实例 编辑:程序博客网 时间:2024/05/21 00:44

上次总结到数据库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
















原创粉丝点击