BATCH、事务、CLOB、BLOB

Batch:需要执行大量的数据时可以使用批处理

 注意点:

1、尽量使用Statement,因为如果是PreParedStatement可能会因为数据量太大而存在空间问题,编译器会报错。

2、把自动提交关闭,设置为手动提交。

事务:

基本概念:是数据库操作的一个单元,是一组同时执行,要么同时成功要么同时失败的语句。

开始于:连接到数据库上,并执行一条DML语句,前一个事务结束后又有一条新的DML语句

结束于: 执行COMMIT或ROLLBACK语句

执行一条DDL语句,例如CREATE TABLE语句,在这种情况下会自动执行COMMIT语句

执行一条DCL语句,例如GRANT语句,在这种情况下会自动执行COMMIT语句

断开与数据库的连接

执行一条DDL语句失败,这个时候就会自动执行ROLLBACK。

事务的四大特点(ACID):

Atomicity(原子性):表示一个事务内所有的操作都是一个整体,要么同时成功,要么同时失败。

Consistency(一致性):一个事物内任何一条语句发生错误,整个状态回滚到修改前

ISOLATION(隔离性):事务查看数据时数据所处的状态要么是另一并发事务修改前的状态,要么是修改后的状态,不会查看中间状态。

DURABILITY(持久性):一旦commit那么对于数据库的影响是永久的。

事务隔离级别由低到高:

读取未提交

读取已提交

可重复度

序列化

CLOB:用于存储大量的文本数据,大字段一般是以流的方式读取的。

使用CLOB将文本写入数据库中:

Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/kk_1",
        "root", "MySQL1998" );
ps=conn.prepareStatement("insert into k_table (username,myInfo) values (?,?)");
ps.setString(1,"赵大帅");
//输入文件中的内容:
//ps.setClob(2,new FileReader(new File("E:\\a.txt")));
//输入程序中的字符串,这里不能直接使用String,因为DLOB需要的是流
ps.setClob(2,new BufferedReader(new InputStreamReader(new ByteArrayInputStream("zyk is beautiful".getBytes()))));
ps.execute();
System.out.println("OK");

在使用CLOB是出现异常:

Exception in thread "main" java.lang.AbstractMethodError: com.mysql.jdbc.PreparedStatement.isClosed

解决方法:更新connector包。

使用CLOB查询指定的数据:

 

import java.io.*;
import java.sql.*;

public class TestCLOB {
    public static void main(String[] args) {
        PreparedStatement ps=null;
        Connection conn=null;
        ResultSet rs=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/kk_1",
                    "root", "MySQL1998" );
ps=conn.prepareStatement("select * from k_table where id=?");
ps.setInt(1,60010);
rs=ps.executeQuery();
while(rs.next()){
    Clob c=rs.getClob("myInfo");
    Reader reader=c.getCharacterStream();
    int temp=0;
    while((temp=reader.read())!=-1){
        System.out.print((char) temp);

    }
}
System.out.println("OK");

 

BLOB:用于存储大量的二进制文件

 

try {
    Class.forName("com.mysql.jdbc.Driver");
    conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/kk_1",
            "root", "MySQL1998" );
    ps=conn.prepareStatement("insert into k_table (username,headImg) values (?,?)");
    ps.setString(1,"赵大帅");
    //存入blob
    ps.setBlob(2,new FileInputStream("e:/timg.jpg"));
    ps.execute();

 

取出BLOB信息:

public class TestCLOB {
    public static void main(String[] args) {
        PreparedStatement ps=null;
        Connection conn=null;
        ResultSet rs=null;
        //Reader reader=null;
        InputStream inputStreamReader=null;
        OutputStream outputStream=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/kk_1",
                    "root", "MySQL1998" );
            //去除BLOB
            ps=conn.prepareStatement("select * from k_table where id=?");
            ps.setInt(1,60011);
            rs=ps.executeQuery();
            while(rs.next()){
                Blob blob=rs.getBlob("headImg");
                inputStreamReader=blob.getBinaryStream();
                outputStream=new FileOutputStream("e:/aaa.jpg");
                int temp=0;
                while((temp=inputStreamReader.read())!=-1){
                        outputStream.write(temp);
                }


            }

 

 

 

posted on 2019-04-11 14:09 突突英雄 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/tutuhome/p/10689307.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值