Java 开发中之三:JDBC的学习
连接方式:
1、桥连接,jdbc:odbc(本机),不建议这种方式。
2、jdbc驱动方式:最多是数据厂商提供的数据库驱动 jar:是一组编译好的java类程序
主流数据库
连接数据的步骤:1、取得一个驱动driver,注册到当前的系统中(相当创新一个连接工厂),2从连接工厂得到一个connection,3、创新SQL语句执行对象 Statement,4、执行Statement(1:执行查询:resultSet. 2:执行非查询,无返回结果)。5、释放资源
如果你记不住各数据库的连接如:
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/test";
String user = "root";
String password = "";
Connection connection = DriverManager.getConnection(url, user, password);
则可以利用eclipse IDE window-show view-DB Browser 中可以新建就可以取得各大数据的连接方式
sqlserver 2008
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=B2C2";
String user = "sa";
String password = "123456;
connection = DriverManager.getConnection(url, user, password);
statement= connection.createStatement(1005,1008); //注意,这里开发过程中用预处理preparement callableStatement
ResultSet rs=statement.executeQuery("select * from tbUser");
数据库的四大操作是:CRUD create read update delete
oracle 11g
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
String user="scott";
String password="tiger";
conn=DriverManager.getConnection(url, user, password);
关于Oralce的一些说明:
它只有一个数据库(一个实例),分用户的操作
两个超级用户:sys: change_on_install
system:manager
普通用户:scott tiger
解锁:alter user scott account unlock;
show user;
grant create table to zk;
grant select on scott.emp to zk;
grant all on emp to zk;
grant all on emp to zk with grant option 这个时候用户zk就有权限把emp表再往下分配权限了。
回收权限 revoke select on scott.emp from zk;
几个函数:
select greatest(12121,20545,050046,05) from dual;
select max(sal) from emp;
select sal,comm,sal+nvl(comm,0) from emp;
select * from emp where comm is null
select sal,decode(sal,
800,'low',
3000,'normal',
6000,'high',
'unkown') from emp;
select sal,decode(sign(sal-1000),-1,'low',--sign(x) :返回三个值:-1,0,1
decode(sign(sal-3000),-1,'normal',
0,'normal',
1,'high',
'unkown' )) from emp; ---其实就是if else
select ss.job,count(1) from scott.emp ss group by ss.job
select sss.job,avg(sss.sal) from scott.emp sss group by sss.job having avg(sss.sal)>=1000
oralce中的约束
主键约束:不以为空,不能得重复
alter table emp
add constraint pk_study primary key (xh) // alter table emp drop contraint pkstru;
非空约束
alter table emp
modify (xm not null)
外建约束
aleter table emp
add constraint fk_stu foreign key emp(xh) references dept(deptno)
唯一值约束
alter table emp
add constraint fkkk unique(xn)
检查约束
alter table emp
add check (sex in '1' or '2')
create table sut
(
xh number(2) primary key ,--主键约束
xm varchar2(10) not null,--非空约束
age number(2) check (age between 10 and 90),--检查约束
sex varchar2(2) check (sex in 'boy' or 'girl');
cardid number(19) unique,--唯一值约束
cclaid number(2) reference cal(id);--一般id是主键 所以一般不要加,因为这样数据库很麻烦
)
重点:开发中尽量量少用,特别是主外健约束, oralce 中最大的并发数最高可以达6万多次。
Oralce 中的数据字典:
select * from user_constraints t where t.TABLE_NAME='EMP';
Oralce的联合查询
内查询:也就等连接:
select * from emp,dept where emp.deptno=dept.deptno and dept.deptno=10 ---与下面等同
select * from emp inner join dept on emp.deptno=dept.deptno where dept.deptno=10
外连接查询:
左外 :select dept.deptno,emp.ename from dept,emp where dept.deptno=emp.deptno(+)=======select dept.deptno,emp.ename from dept left outer join emp on dept.deptno=emp.deptno;
右外:select dept.deptno,emp.ename from dept,emp where dept.deptno(+)=emp.deptno=======select dept.deptno,emp.ename from dept right outer join emp on dept.deptno=emp.deptno;
说明:+是oracle特有,后一部分是结构化查询语言标准的写法。
全外:select dept.deptno,emp.ename from dept full outer join emp on dept.deptno=emp.deptno;
子查询(一张表内部联连时查询)
Oracle的对象
序列: create sequence seql start with 100
复杂的序列:create sequence seq2 start with 100 increment by 3 maxvalue 9999 minvalue 900 cycle
视图: 主要是简化SQL语句,它其实是的一张伪表
create view v_name as SQL 语句 如果加上 with read only 说明是只读视图
with check option 检查视图
复杂视图:多表进行查询
index(索引):自动添加索引,primary key,unique
普通的的索引:create index idx_name on emp(ename,deptno,job);
其实Oracle有一个默认的索引,rowid 物理的位置,索引都是自动去维护,一般不用去手动维护。
特殊的索引,位示图索引(如性别只有男,女时)create bitmap index idx_sex on student(sex) 它可以加下如下查询
select * from studnet where sex='男';
在SQL语句中如何使用Index
select * from emp; //这样的语句要少写,因为这样的语句系统默认是不使用索引的,就算你在表中有很多索引,因为它是全表扫描,
select empno,ename from emp;//也不使用索引,所有总结出来,只有带了where 语句的SQL语句才能使用索引。
select empno,ename from emp where sal>1000 时:先找sal是否有索引,然后再执行查询。
posted on 2012-12-07 20:22 peter.peng 阅读(392) 评论(0) 编辑 收藏 举报