cgb2105-day05-Oracle

一,SQL的语法练习

–1,测试

#查询男老师的人数
select count(1),tname from teachers 
where tsex='男' 
group by tname
#having tsex='男'  #having里不能出现没查过的列名

#查询女学生的所有信息
select * from students where ssex='女'
#查询每个班里的女学生的人数和名字
select sname,count(1) from students 
where ssex='女'
group by class
having count(1)> 1

#查询最年长和年轻的学生
select * from students order by sbirthday #升序,按数字升序
select min(sbirthday),max(sbirthday) from students

#查询大于平均年龄的学生
select * from students where year(sbirthday) <
  ( select avg( year(sbirthday) ) from students )
limit 0,1

二,Oralce的过气技术

–1,虚表

--1. dual虚表
select 1 from dual
select 'abc' from dual
--select now() from dual 
select sysdate from dual

–2,序列

和MySQL里的主键,,,自动递增效果一样。Oracle可以指定开始位置,递增规则。
创建序列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用序列

--2. 使用序列,自己指定开始位置和变化规则。
select ID_SEQ.CURRVAL  from dual --CURRVAL查询当前的值
select ID_SEQ.Nextval  from dual  --Nextval查询下一次的值
insert into stu(sid) values( ID_SEQ.Nextval )  --只给sid列赋值,其他列都是null

select * from stu --sid确实使用了序列的值
insert into stu values('hi',1,'1-1月-2000','ios', ID_SEQ.Nextval)  --以后插入新数据时,sid都可以用序列的值

–3,视图

创建视图
在这里插入图片描述
在这里插入图片描述

--视图:好处是提高查询效率,缺点是SQL无法优化
--1.创建视图             视图名
create or replace view StuView as
       --把查询的结果缓存到视图里
  select * from  stu where sname like '%o%'
  
--2.使用视图
select * from  stu where sname like '%o%' --不需要次次写相同的需求了,因为都缓存到视图里了
select * from  StuView  --直接查视图

–4,触发器

创建触发器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

create or replace trigger Stu_update_Tri
  before update on stu  
  for each row
declare
  -- local variables here
begin
  --判断,如果满足了条件,就执行触发器的功能
  IF :NEW.SSEX>5 THEN  
       :NEW.SSEX := 1; --把新的值设置成1
  END IF;
end Stu_update_Tri;

使用触发器

--2. 使用触发器
update stu set ssex=10 ;  --满足了触发器的条件,ssex改成了触发器规定的1
update stu set ssex=3 ;   --不满足触发器的条件
select * from stu 

三,JDBC

–1,概述

专门用来 通过java程序 连接 数据库。是一套标准,本质上就是用jar包里的各种工具类。

–2,开发步骤

导入jar包
连接数据库
发起SQL
处理结果

–3,导入jar包

在这里插入图片描述
创建工程:File-New-Project-选java-next-next-输入工程名-finish
创建lib文件夹:选中工程-右键-new-Directory-起个名字lib-finish
拷贝jar包:从磁盘里找到下载好的jar包,复制粘贴到lib文件夹里
在这里插入图片描述
编译jar包:
在这里插入图片描述
在这里插入图片描述

四,入门案例

在这里插入图片描述

package cn.tedu.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

//测试 jdbc入门案例
public class Test1 {
    public static void main(String[] args) throws Exception {
        //1.注册驱动
//        Class.forName("com.mysql.cj.jdbc.Driver");//高版本jar包的路径
        Class.forName("com.mysql.jdbc.Driver");//低版本jar包的路径
        //2,连接数据库(用户名 密码 IP地址 端口号)
//        String url = "使用的协议 IP地址 端口号 数据库名 " ;
        String url = "jdbc:mysql://localhost:3306/cgb2105" ;
        String user = "root" ; //连接数据库的用户名
        String pwd = "root" ;  //连接数据库的密码
        Connection conn = DriverManager.getConnection(url,user,pwd);
        //3,获取传输器
        Statement st = conn.createStatement();
        //4,执行SQL -- 查询部门表的所有数据
        String sql = "select * from dept";
        //executeQuery执行了查询的语句,并且把结果封装给了ResultSet结果集
        ResultSet rs = st.executeQuery(sql);
        //5,解析结果集
        //next()判断有没有下一条数据,有返回true,没有返回false
        while( rs.next() ) {
            //rs获取数据:根据列的编号 或者 列名
//getInt:字段是整数类型的,直接获取整数值 getString:字段是字符串类型的,直接获取字符串值
//            int num = rs.getInt(1);//获取第1列的数据
//            String name = rs.getString(2);//获取第2列的数据
//            String loc = rs.getString(3);//获取第3列的数据
            int num = rs.getInt("deptno");//获取deptno列的数据
            String name = rs.getString("dname");//获取dname列的数据
            String loc = rs.getString("loc");//获取loc列的数据

            System.out.println(num + name + loc);
        }
        //6,释放资源
        rs.close();//释放结果集
        st.close();//释放传输器
        conn.close();//释放连接
    }
}

五,练习

–1,利用jdbc向dept表中插入数据

package cn.tedu.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

//测试 jdbc的插入
public class Test2 {
    public static void main(String[] args) throws Exception {
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");//高版本的jar包驱动路径要改一下
        //2,获取连接
String url = "jdbc:mysql://localhost:3306/cgb2105?characterEncoding=utf8";
        Connection conn = DriverManager.getConnection(url,"root","root");
        //3,获取传输器
        Statement st = conn.createStatement();
        //4,执行SQL
        //利用jdbc向dept表中插入数据
        String  sql ="insert into dept values(null,'java开发部2','北京2')" ;
        //executeUpdate用来执行增删改的SQL,返回影响行数
        int rows = st.executeUpdate(sql);
        //5,解析结果集
        System.out.println("数据插入成功!!!");
        //6,释放资源
        st.close();
        conn.close();
    }
}

六,作业

–1,利用jdbc查询user的信息,如果信息正确就登录,否则提示错误

	--1,创建user表,指定字段id name password,并添加数据
	--2,通过jdbc查询user表的数据,根据用户名和密码查
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值