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编辑  收藏  举报