本身没有问题的sql语句,用户输入些特殊字符导致sql语句报错(sql注入)
使用createstatement缺点: sql注入 使用+号拼接容易导致sql语法错误 PreparedStatement:1.避免了sql注入问题;2.不再使用+拼接,避免了语法错误;3.将模板sql(固定的部分)和参数部分进行了分离,提高了维护性;4.提前预编译、减少了编译次数,效率较高 jdbc:java database connectivity 是一个接口:java连接数据库 封装jdbc链接的工具类:JdbcUtils 获取连接 释放资源
Jdbc演示事务
批量处理:多条语句一起提交给数据库处理(5.1.7不支持) preparedstatement的对象调用方法 addBatch():添加需要批量处理的sql语句或参数 executeBatch():执行批量处理语句 clearBatch():清空批处理包的语句
通常我们会遇到两种批量执行的sql语句的情况: 多条sql语句的批量处理(多条sql可能没关系) statement去执行 一条sql语句的批量传参 (参数不同) preparedstatement去执行 for循环 减少了编译次数和执行次数 使用批处理功能需要在jdbc链接mysql的URl中添加 rewriteBatchedStatements=true
blob类型数据的读写:存储图片、视频: InputStream 流的形式写入和读出 update beauty set photo=? where id=1 ps.setBlob(1,new FileInputStream(“src\6.jpg”)) 读出写到本地磁盘文件 select photo from beauty where id =1 ResultSet rs =ps.executeQuery() if(rs.next()){ //1.方式1: //Blob blob=rs.setBlob(“photo”); // InputStream inputStream= blob.getBinaryStream();//将blob类型数据返回成流 //2.方式2: InputStream inputStream= rs.setBinaryStream(“photo”); FileOutputStream fos =new FileOutputStream(“e:\demo”); int len; byte[] b = new byte[1024]; while((len=inputStream.read(b))!=-1){ fos.write(b,0,len); } fos.close(); inputStream.close(); }
##数据库连接池 对于一个项目,成千上万个用户连接数据库 object…param 可变长度 datasource源 开源框架 数据库连接池:DBCP、C3P0、Druid(德鲁伊)
封装通用的增删改 封装查询
DbUtils–>apache组织提供的一个开源jdbc工具类库,提供了通用的增删改查方法 QueryRunner 通用的查询方法 ResultSetHandler 是一个接口 结果集处理器 根据查询结果处理不同的返回形式 BeanHandler (sql语句查询出来表中一条数据,对应java中的一个对象) java类中对应一个表的bean类 BeanListHandler ScalarHandler (select count(*) from 表名)将结果集中的第一行第一列转换成object对象 学习一个类:包 、说明、 构造 、方法 update 通用的增删改方法
Java学习路线: JavaSE->JavaWeb->ssh、ssm、spring、springmvc->springboot->springcloud 代码要多练习,多敲写,百度
#封装BasicDAO Jdbc的综合应用: 1.domain实体类:管理员类、学生类、年级类 2.service业务层模块:不涉及到输入输出的内容; 1.登录验证 2… 3.view界面模块:和界面相关的模块 2用到1 3用到2 前台客户操作:3->2->1 书写:123的顺序 数据访问层:DAO data access object 和数据库打交道 学习:泛型方法的设计?泛型类的设计? java中的自动装拆箱概念?