赞
踩
提示:文章内容输出来源:拉勾教育Java就业急训营
进入了第二阶段 拉勾教育Java就业急训营,主要关于数据库
这里就没有具体的笔记,只记录出现 需要注意的问题
null,语法 是 is null , is not null.
having 运用在 group by 之后, 是分组后的过滤
having 后面可以写 聚合函数
where 进行分组前的过滤
where 后面不能写 聚合函数
聚合函数的计算,null值。
count(1), 统计null 值,忽略所有列
count(*) 统计 null 值, 包括所有列
count(列名) 不统计null 值,所以一般选择非空的列:主键
select * from student s natural inner join takes t
union
select s.id,s.name,s.dept_name,s.tot_cred,null,null, null,null,null
from student s where s.id not in (select id from takes)
select name, semester, sum(tot_cred),year
from student natural left join takes
group by student.id, year, semester
类似JAVA中的IF ELSE语句
下面当semester是Spring 就返回 1… (为什么设置返回1,2,3 只是为了排序而已)
select s.name, t.semester, t.year, s.tot_cred from student s, takes t
where s.id = t.id order by t.year,
case t.semester
when 'Spring' THEN 1
when 'Summer' THEN 2
when 'Fall' THEN 3
end;
功能:
public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { //1.获取连接 conn = JDBCUtils.getConnection(); //开启事务 conn.setAutoCommit(false); //2.定义sql //2.1 A - 500 String sql1 = "update account set balance = balance - ? where id = ?"; //2.2 B + 500 String sql2 = "update account set balance = balance + ? where id = ?"; //3.获取执行sql对象 pstmt1 = conn.prepareStatement(sql1); pstmt2 = conn.prepareStatement(sql2); //4. 设置参数 pstmt1.setDouble(1,500); pstmt1.setInt(2,1); pstmt2.setDouble(1,500); pstmt2.setInt(2,2); //5.执行sql pstmt1.executeUpdate(); // 手动制造异常 int i = 3/0; pstmt2.executeUpdate(); //提交事务 conn.commit(); } catch (Exception e) { //事务回滚 try { if(conn != null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { JDBCUtils.close(pstmt1,conn); JDBCUtils.close(pstmt2,null); } }
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种
并发问题:
数据库事务的隔离性: 数据库系统必须具有隔离并发运行各个事务的能力, 使它们不会相互影响, 避免各种并发问题。
一个事务与其他事务隔离的程度称为隔离级别。数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱。
四种隔离级别:
使用Statement操作数据表存在弊端:
问题一:存在拼串操作,繁琐 PreparedStatement 能最大可能提高性能
问题二:存在SQL注入问题. PreparedStatement 可以防止 SQL 注入
好处:
JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,
DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池
DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。
注意:
该类简单化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。
是使用ResultSetHandler接口的几个常见实现类实现数据库的增删改查,可以大大减少代码量,优化程序
List<Employee> list = qr.query(sql, new BeanListHandler<Employee>(Employee.class));
提示:这里对文章进行总结:
持续更新遇到的SQL 问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。