1. 数据库的学习与应用
从最基础的Oracle的安装与安装完成后的检查情况以及select语句讲起,oracle作为一种适用于大型、中型和微型计算机的关系数据库管理系统,操作相对比较繁琐,从select语句、Oracle中的函数到存储过程,表与表之间的联系,以及如何将这两个没有关系的表给关联起来了,就是要为一张表建立一个主键和外键,外键用来联系另一张表的主键。
明确解决问题的思路,确定要联系哪张表,明确联系后不需要的列不需要查询等等。从一无所知变得入门,学会好多基本的东西,认识到学习方法的重要性,人不要以为死学,要学以致用,从思路里领悟更多的知识。我发现oracle数据库并没有我想象中的难,勤学多练,及时复习至关重要。
(1)基本概念与体系结构
Oracle(神谕)公司,主要的版本Oracle8i/9i(internet)、Oracle10g/11g(grid) 、Oracle12c(cloud)
a.实例(Instance),实例是一个非固定的、基于内存的基本进程与内存结构。Oracle实例 = 内存结构+后台进程
b.数据库(Database),数据库指的是固定的、基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等。它是静态的、永久的,只要文件存在它就存在。数据库名(db_name)就是对数据库的标识。
*用户访问数据库,连接的是实例,通过实例访问数据库。
c.实例与数据库的对应关系:
同一时间,一个实例只能打开一个数据库,也就是一个实例只能操作或理一个数据库,但一个数据库可以被多个是实例打开。
d.存储结构如下:
逻辑结构 物理结构
表空间<---------------------------->一个或多个数据文件(.dbf文件)
| |
表等 段(Segment):段是由多个区间构成的。
|
区间(Extent):区间是由多个连续的Oracle数据块构成。
|
数据块(db_block):数据块是由多个(数量一般是固定的)操作系统块构成。
*从物理结构上来说:数据文件组成数据库,数据库由实例来管理。
*段在Oracle里是占用表空间的具体对象。
e.表空间
SYSTEM表空间,用于存放Oracle系统内部表和数据字典的数据,该表空间对应的数据文件是system01.dbf。
f.数据文件(Datafile),是用于保存用户应用数据和Oracle系统内部数据的文件。Oracle数据库由表空间组成,一个表空间可以包含一个或多个数据文件。数据文件可以存放两种类型的数据:系统数据,用户数据。
g.Oracle中几个重要的概念
全局数据库名——数据库处于一个网络中的名称标识。
全局数据库名(global_name)=数据库名(db_name)+数据库域(db_domain)。
查询全局数据库名:select * from global_name;
查询当前数据库名:select name from v$database ;
服务名(Service_name)
本地网络服务名
(2)连接与配置
配置Listener
进入Net Configuration Assistant的监听程序配置选项,一路"下一步",正常情况下不需要改任何地方。
监听的协议,默认是tcp协议;监听的端口号,默认是1521,这也是Oracle的默认的端口号。
配置TNS
a. 测试连接
方法: 命令行 下键入 "tnsping 服务端IP地址" 如果出现 "OK(XX毫秒)" 字样,说明可以与服务端建立连接。否则请检查服务端配置。
b. 添加服务名(访问远程主机中的Oracle,本地的Oracle监听器是不需要打开的。)
方法:打开ORACLE "Net Configuration Assistant" 工具 -> "本地NET服务名配置" -> "添加" -> 选择ORACLE数据库或服务-> 输入服务名(建库时输入的全局数据库名*) -> TCP -> 主机名中输入服务端IP地址(或主机名),端口输入服务端监听程序所监听的端口 -> 是,进行测试 -> 首次测试可能会失败,因为默认的用户名口令不一定和服务端的匹配,点击“更改登录”输入有效用户名和口令确定后如出现“测试成功”,说明连接成功,点击“下一步”-> 输入本地服务名(实际上是刚配置的"本地net服务"的名字,这个名字将在plsql developer中的数据库下拉框中使用) -> 直到完成。
c.最后一步“输入本地服务名”,是一个可以任意取名字,该名字在PLSQL Developer的登录中应该添入数据库文本框中。一般本地服务名为orcl,所以应该换一个名字,例如:test.orcl。(不换也可以,不过二者容易弄混)
即:sqlplus user/password @本地服务名
*需要注意的问题:
服务名(目标主机的sid或全局数据名)与本地服务名的区别:
a.“选择ORACLE数据库或服务-> 输入服务名”这里的服务名指的是xxx.xxx.xxx.xxx:orcl中的orcl,一般需要全局数据库名,但可以直接用xxx.xxx.xxx.xxx:yyy中的yyy。 xxx为IP地址。(全局数据库名与SID同名时直接使用SID就可以了,如果不同名,则要使用全局数据库名)
b.最后一步“输入本地服务名”,是一个可以任意取名字,该名字在PLSQL Developer的登录中应该添入数据库文本框中。
(3)用户管理与权限控制:
a.Oracle内部有两个建好的用户:SYSTEM和SYS。
用户可直接登录到SYSTEM用户以创建其他用户,因为SYSTEM具有创建别的用户的权限。SYS用户具有DBA权限,并且拥有SYS模式,只能通过SYSDBA登陆数据库。
sqlplus system/123456 --普通登录方式
sqlplus sys/123456 as sysdba --超级管理登录方式
sqlplus / as sysdba --操作系统账户登录方式
1.sys——所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户。
2.system——用户用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。system用户拥有普通dba角色权限。
用户具有“SYSDBA”或者“SYSOPER”系统权限,登陆em也只能用这两个身份,不能用normal。
3.normal是普通用户 sysdba拥有最高的系统权限,登陆后是sys
sysoper主要用来启动、关闭数据库,sysoper登陆后用户是public。
权限控制方式:用户---角色---权限三级控制
b.用户管理
CREATE USER username identified by password;--创建一个用户,用户名为username,密码为password。
ALTER USER username DEFAULT TABLESPACE spacename;--设置用户username的默认表空间,如果不设置的话就USERS01.DBF所对应的表空间。
GRANT CONNECT,RESOURCE TO username;--给用户username赋予基本角色。
GRANT unlimited tablespace TO username;--授予系统权限,如果缺少这个权限则没法在表中插入数据
CONNECT username/password--使用username登录服务器
开启scott账户
使用scott账启登录后输入如下内容查看表:select table_name from user_tables;scott(密码是tiger)是Oracle中比较小的,范例方案,经常被用于教学。scott用户拥有4个表 BONUS:奖金表 DEPT:部门表 EMP:员工表 SALGRADE:工资等级表,scott的默认密码是tiger。从Oracle10g开始,在默认情况下scott是不能登陆的。这是因为scott用户是被锁定的,需要开启此帐户。
1.在运行中sqlplus system/manager
2.在提示符下,执行命令
(1)alter user scott account unlock; --给账户解锁
(2)alter user scott identified by tiger; --给账户设置密码,可以不做
(3)grant connect,resource,create view to scott; --给账户设置权限
3.利用scott身份登录:运行:sqlplus scott/tiger;当然我们也可以使用PL/SQL Develper进行用户设置来解锁。该表空间的表和数据可以在utlsampl.sql中找到。
(4)SQL
a.数据类型
1.字符类型
CHAR(n BYTE/CHAR) 默认1字节,n值最大为2000
NCHAR(n) 默认1字符,最大存储内容2000字节
NVARCHAR2(n) 最大长度必须指定,最大存储内容4000字节 VARCHAR2(n BYTE/CHAR) 最大长度必须指定
VARCHAR 同VARCHAR2
2.数字类型
NUMBER(p[,s]) 1-22字节。 少位。
BINARY_FLOAT 5字节
BINARY_DOUBLE 9字节
3.时间类型
DATE 7字节
TIMESTAMP 7至11字节
4.大对象类型
BLOB 最大为(4GB-1)*数据库块大小
CLOB 最大为(4GB-1)*数据库块大小
NCLOB 最大为(4GB-1)*数据库块大小
BFILE 最大为2 32-1字节
5.其他类型
LONG 最大为2GB
RAW(n) 最大2000字节 LONG RAW 最大为2GB
ROWID 10字节
b.创建表空间
create tablespace user_privilege
datafile 'C:\app\Administrator\oradata\orcl\privilege.dbf'
size 50m
autoextend on next 50m maxsize 2048m; --文件自动增长,每次增长50m,最大2048m
CREATE TABLESPACE epet_tablespace
DATAFILE 'C:\app\Administrator\oradata\orcl\EPET.DBF'
SIZE 100M;
alter session set container=cdb$root;
create user c##yuhf identified by 123;
select * from v$tablespace;
alter user c##yuhf default tablespace test_tablespace;
创建用户并授予权限
创建用户:
CREATE USER epet IDENTIFIED BY bdqn DEFAULT TABLESPACE epet_tablespace; --创建用户epet,密码为bdqn,默认表空间为epet_tablespace。
创建数据库表的方法
CREATE TABLE [schema.]table_name(
column_name datatype [DEFAULT express] [not null] [CONSTRAINT constraint_name constraint_type(column)] ,
…,
[CONSTRAINT constrain_name] constraint_type (column,…)
);
ALTER TABLE table_name ADD CONSTRAINT name constraintType(column);
select语句
select * from emp;
select empno,ename,job,mgr from emp;
select sal+comm from emp;
select to_date('1999/2/12','YYYY-mm-dd')-hiredate as "date" from emp;
select '姓名:'||ename||' 岗位:'||job as "姓名,岗位" from emp;
select * from emp where comm is null;
select distinct deptno from emp;
--like、in、between...and...
select * from emp where ename like '%I%';
select * from emp where job in(upper('clerk'),'SALESMAN');
select * from emp where hiredate between to_date('1980/2/12','YYYY-mm-dd') and to_date('1999/2/12','YYYY-mm-dd');
order by 默认升序,即使不写ASC;DESC为降序
聚合函数与分组子句
avg(X) :平均值
count(X) :计数(返回查询的行数)
max(X) :最大值
min(X) :最小值
sum(X) :求和
select count(*) from emp group by job;
select sum(sal) from emp group by job;
连接
左外连接:
select * from emp e left outer join dept d on e.deptno=d.deptno;
内连接:
select * from emp e inner join dept d on e.deptno=d.deptno;
子查询
在select、insert、update或delete语句内部使用的select语句,这个select语句称为子查询。
子查询的类型:
1、单行子查询:不向外部SQL语句返回结果,或者只是返回一行。
2、多行子查询:向外部的SQL语句返回一行或多行。
3、多列子查询:向外部SQL语句返回多列数据。
4、关联子查询:子查询引用了外部SQL语句中的一列或多列。
5、嵌套子查询:子查询位于另一个子查询中,最多可以嵌套255层
2.JAVA的学习与应用:
在学习JAVA的过程中,除了学习了一些基本知识外,着重学习的就是JDBC,即:数据库的连接。JDBC是java数据库连接(Java DataBase Connectivity)技术的简称,由一组使用Java语言编写的类和接口组成,可以为多种关系数据库提供统一访问。Sun公司提供了JDBC的接口规范——JDBC API,而数据库厂商或第三方中间件厂商根据该接口规范提供针对不同数据库的具体实现——JDBC驱动。JDBC两种常用的驱动方式:JDBC-ODBC桥方式连接数据,使用纯Java方式连接数据库。
(1)JDBC-ODBC桥方式连接数据库
JDBC-ODBC桥方式连接数据(一般来说主流的数据库都不需要使用这种方式进行连接操作。)JDK中已经包括了JDBC-ODBC桥连的驱动接口,只需要配置ODBC数据源即可。JDBC驱动类是:sun.jdbc.odbc.JdbcOdbcDriver数据库连接字符串是:jdbc:odbc:ConnSqlServer*ConnSqlServer需要在控制面板->管理工具->odbc数据源中进行配置Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:ConnSqlServer";
(2)使用纯Java方式连接数据库
由数据库厂商自己提供,一般一种JDBC驱动只能对应一种数据库或某种数据库的某个版本。由于数据库厂商进行了专门的优化,所以运行速度较快。一般采用jar包的方式引入。
操作JDBC的具体步骤:
a.导入java.sql包中的内容import java.sql.*;
b.加载,注册数据库存驱动程序
c.创建Connection对象(建立与数据库的连接)
d.创建Statement对象(对数据库发出命令),创建ResultSet对象(接受数据库返回的信息)
e.使用ResultSet对象。ResultSet可以理解为由所查询结果组成的一个二维表,每行代表一条记录,每列代表一个字段。
f.关闭所有对象stmt.close();rst.close();con.close();
JDBC软编码
jdbc.properties
##oracle
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost :1521/pdborcl.vm
jdbc.username=scott
jdbc.password=tiger
DBConnection.java
Properties p = new Properties();
try {
p.load(DBConnection.class.getResourceAsStream("/jdbc.properties")); } catch (IOException e) {
log.info("properties file not found"+e.getMessage());
}
connString = p.getProperty("jdbc.url");
dbDriverString = p.getProperty("jdbc.driverClassName");
name=p.getProperty("jdbc.username");
pwd=p.getProperty("jdbc.password");
try {
//Class.forName(dbDriverString);
connection = DriverManager.getConnection(connString,name,pwd);
log.debug("ok");
} catch(SQLException e){
log.info("Connection error:"+e.getMessage());
}
3.Html,CSS与JavaScript的交互与应用
这一部分着重学习了JavaScript,使我知道并且了解了JavaScript是一门脚本语言,是用来对页面元素进行控制的脚本。需要注意的是:JavaScript与Html、CSS一样,也是在浏览器上解释并执行的。所以JavaScript的执行结果与浏览器是不可分的,即:不同的浏览器可能对相同的JavaScript代码做出不同解释。其次:我们应该知道:JavaScript与Java没任何关系,一个是在客户端运行的脚本,一个是在服务器端运行的编程语言。
JavaScript特点:(1)可以控制HTML、CSS的元素。(2)语法与一般面向对象编程相似,都是C系统的。(3)解释性语言。(4)区分大小写。
JavaScript组成:(1)ECMAScript(JavaScript的基本语法)(2)BOM(以浏览器的角度来解析html文档的技术)(3)DOM(以html文档的角度来解析html文档的技术)
JavaScript基本结构:
<script type="text/javascript">
javaScript代码;
</script>
javascript代码可以出现在三种地方:
(1)网页的共享的代码可以<script>标签的方式出现在页面的任何一个地方。
(2)整个网站共享的代码可以放在xx.js文件中,在页面中通过<script src="xx.js" />方式来引用。
(3)在语句中也有可能出现javascript代码,比如:
<a href="javascript:alert('ok');">xxx</a>或<input type="button" value="按钮1" onClick="test()" />
JavaScript执行原理
html、css、javascript代码都放在服务器端,浏览器请求时,服务器端会将其请求的文件,发送会浏览器。以上三种语言将在浏览器中解释并执行。浏览器将执行结果返回客户。不同的浏览器将以不同的方式解析相同的代码,并以不同的方式展现出来。
JavaScript与css的交互:
获取和设置CSS样式的方法:
(1)标签对象.style.样式 只能获取和设置行内的CSS样式。
(2)标签对象.className.CSS类名
CSS的几种写法:
(1)行内的CSS。
<input type="text" value="新增" style="xxx:12px;xxx:xxx" />
(2)内部CSS
<style> ...
</style>
(3)外部样式文件:xxx.css
获取类样式的方法
(1)currentStyle 是微软的技术,也就是说只被IE系列浏览器支持。
(2)getComputedStyle() DOM的技术,最早是firefox实现的,目前大多数浏览器都支持(包括新一代的IE也支持)。
用法:标签对象.currentStyle.样式 //currentStyle与style的用法是基本一样的。document.defaultView.getComputedStyle(标签对象,null).样式。
4.Struts2与的了解与配置
Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
Struts2配置过程:
(1)创建web工程。(2)添加Struts2框架所必须的jar包。(3)配置web.xml文件。(4)编写LoginAction.java(Struts2的Action)。(5)添加并配置Struts2的struts.xml配置文件。(6)创建jsp页面。(7)部署运行项目进行测试。
a.创建web工程
b.加载jar包
Commons-logging-1.0.4.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar
struts2-core-2.0.11.jar、xwork-2.0.4.jar
c.配置web.xml中Struts2过滤器
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
d.写LoginAction.java
e.配置struts.xml(创建在src下,因需要在classes目录下)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="com.ascent.action.LoginAction">
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
f.添加welcome.jsp
g.部署、启动测试 Struts2流程添加成功。
需要注意的是:(1)默认命名空间里的Action可以处理任何模块下的Action请求。(2)当某个包指定了命名空间后,该包下所有的Action处理的URL应该是:命名空间+Action名。
来源:oschina
链接:https://my.oschina.net/u/2510566/blog/678623