JDBC+JavaWeb

1 PreparedStatement对Blob文件的操作

  • PreparedStatement可以操作Blob类型的文件
Connection connection = MysqlUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setBlob(index,InPutStream);
Connection connection = MysqlUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql); 
InputStream inputStream = new FileInputStream(new File("链接"));
preparedStatement.setBlob(1,InPutStream);
//通过流,添加Blob

2 PreparedStatement实现批量操作

  • PreparedStatement执行相同的预编译的SQL语句时,不会每次都重新编译。所以效率远高于Statement
Connection connection = MysqlUtil.getConnection();
        String sql="INSERT INTO user(user_name) VALUES(?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        for(int i =0;i<20000;i++){
            preparedStatement.setInt(1,i);
        }
        int i = preparedStatement.executeUpdate();
  • 使用addBatch()、executeBatch()和clearBatch
Connection connection = MysqlUtil.getConnection();
        String sql="INSERT INTO user(user_name) VALUES(?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        for(int i =0;i<20000;i++){
            preparedStatement.setInt(1,i);
            
            if(i%500==0){
                preparedStatement.executeBatch();
                preparedStatement.clearBatch();
            }
        }
        

3 事务

  • 事务是一组逻辑处理单元,使数据从一种状态变为另一种状态
    • 一组逻辑操作单元:一个或多个DML操作
  • 事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
  • 为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。
  • 那些操作会导致数据的自动提交
    • DDL操作一旦执行,都会自动提交。
      • set autocommit=false 对DDL无效
    • DML默认情况下,一旦执行,就会自动提交。
      • set autocommit=false 就会取消DML自动提交
    • 关闭连接时会自动提交数据
  1. 取消自动提交
connection.setAutoCommit(false);
  1. 提交数据
connection.commit();
  1. 遇到异常进行回滚
connection.rollback();
//完整版本
//使用事务以后的通用的增删改操作(version 2.0)
public void update(Connection conn ,String sql, Object... args) {
	PreparedStatement ps = null;
	try {
		// 1.获取PreparedStatement的实例 (或:预编译sql语句)
		ps = conn.prepareStatement(sql);
		// 2.填充占位符
		for (int i = 0; i < args.length; i++) {
			ps.setObject(i + 1, args[i]);
		}
		// 3.执行sql语句
		ps.execute();
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		// 4.关闭资源
		JDBCUtils.closeResource(null, ps);

	}
}

3.1 事务的属性

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

  • 一致性(Consistency)
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

  • 隔离性(Isolation)
    事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

3.2 隔离级别

  • 读未提交——出现脏读、不可重复度、幻读
  • 读已提交——出现不可重复度、幻读
  • 可重复读——出现幻读
  • 串行化——都可以解决,但是并发性差
//获取隔离级别
connection.getTransactionIsolation();
//取消数据的自动提交
connection.setAutoCommit(false);
//设置数据库的隔离级别
connection.setTransactionIsolation();
//读已提交的
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

**一般来说,数据库只要避免脏读就可以。 **

4数据库连接池

  • 为解决开发中的数据库连接问题,采用数据库连接池技术。

1.javaWeb

  • javaweb是所有通过java语言编写可以通过浏览器访问的程序的总称

  • javaweb是基于请求和响应开发的

  • 请求:请求是客户端向服务器发送数据,叫请求 Request

  • 响应:服务器给客户端回传数据,叫响应 Response

  • 请求和响应是成对出现的

  • web资源按实现的技术和呈现效果的不同,分为静态资源和动态资源

    • 静态资源:html、css、js、mp4、jpg等等
    • 动态资源:jsp页面、Servlet程序等
  • 常用的服务器:Tomcat(轻量级javaweb服务器)、Jboss(支持所有JavaEE规范)

  • Servlet程序2.5版本是现在市面使用最多的版本

  • 到了3.0之后,就是注解版本的Servlet使用

  • 如何访问tomcat下的目录

    localhost:8080/book/index.html

  • 为数据库建立一个缓冲池,预先在缓冲池中放入一定量的连接当需要建立连接时,只需从缓冲池中取出一个,用完再放回去。

posted @ 2021-12-28 22:57  Boerk  阅读(55)  评论(0)    收藏  举报