文章目录
一,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表的数据,根据用户名和密码查