第一篇:有关VS2010数据库项目开发的总结
有关学习VS2010数据库项目开发的总结
其实我们这个学期所学的主要是一个从两层架构开发到简单的三层架构开发的过程,前面老师所说的都是为了后面的三层架构做准备,可以说两层开发是三层架构的基础吧。
一个完整的项目开发的流程:(SQL+VS)
1.数据库设计(SQL server2008)(1)数据库分析(2)数据库结构设计(3)数据库和数据表的创建(4)根据系统需要创建存储过程 2.系统设计(VS2010)(1)界面设计(窗体+控件)
(2)创建相关类文件(编写相关功能代码)(3)系统打包部署生成
前面基础知识的总结:
1.用 ADO.NET 连接数据库
使用 Connection连接数据库
1.2 使用 Command 连接数据库
2.用 ADO.NET 查询和操作数据库
2.1 使用 DataReader 对象检索数据
2.2 使用 Command 对象操作数据
3.DataSet 数据集的用法
4.DataGridView的用法
5.带参数的存储过程调用
6.数据类型转换
显示转换
隐式转换
用户自定义转换
(1)隐式转换:一般是低类型向高类型转化,能够保证值不发生变化。隐式数值转换: 如数值型之间从低数值范围向高范围值转换
隐式枚举转换:隐式枚举转换允许将十进制整数 0 转换为任何枚举类型。
隐式引用转换
派生类向基类转换
隐式引用转换是指一类引用类型之间的转换,这种转换总是可以成功,因此不需要在运行时进行任何检查。
装箱转换
装箱转换允许将值类型隐式转换为引用类型。(2)显示转换:也称强制类型转换。不能保证数据的正确性。(type)(表达式)
用System.Convert类:值类型。将一个基本数据类型转换为另一个基本数据类型。使用Parse方法
大部份预定义值类型都有这个静态方法,用来将相应的文本转化为相应的值类型。
Convert.ToInt32()与int.Parse()的区别
(1)这两个方法的最大不同是它们对null值的处理方法:
Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.QueryString[“page”]),也可以用,int.Parse(Request.QueryString[“page”]),但是如果page这个参数在url中不存在,那么前者将返回0,0可能是一个有效的值,所以你不知道url中原来根本就没有这个参数而继续进行下一下的处理,这就可能产生意想不到的效果,而用后一种办法的话没有page这个参数会抛出异常,我们可以捕获异常然后再做相应的处理,比如提示用户缺少参数,而不是把参数值当做0来处理。(2)还有一点区别就是
a.Convert.ToInt32(double value)如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。不过4.6可以转换为5,4.4转换为4 b.int.Parse(“4.5”)
直接报错:“输入字符串的格式不正确”.c.int(4.6)= 4 Int转化其他数值类型为Int时没有四舍五入,强制转换
其它转换用运算符 as
as 运算符用于执行引用类型的显式类型转换。如果要转换的类型与指定类型兼容,转换就会成功;如果类型不兼容,则返回null。
表达式as 类型
as 运算符类似于类型转换,所不同的是,当转换失败时,as 运算符将返回null,而不是引发异常。示例: object o1=”SomeString”;
object o2=5;string s1=o1 as string;//类型兼容 s1=”SomeString”
string s2=o2 as string;//s2=null is
is 运算符用于检查对象的类型是否与给定类型兼容(对象是该类型,或是派生于该类型)。
表达式 is 类型
i 示例: int i=10;if(i is object)//true {} sizeof
sizeof 运算符用于获得值类型的大小(以字节为单位)。
sizeof(type)
sizeof 运算符仅适用于值类型,而不适用于引用类型。sizeof 运算符仅可用于 unsafe 模式。示例:
unsafe { Console.WriteLine(“{0}”,sizeof(int));
}
Convert.ToInt32()与int.Parse()的区别
(1)这两个方法的最大不同是它们对null值的处理方法:
Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常。没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.QueryString[“page”]),也可以用,int.Parse(Request.QueryString[“page”]),但是如果page这个参数在url中不存在,那么前者将返回0,0可能是一个有效的值,所以你不知道url中原来根本就没有这个参数而继续进行下一下的处理,这就可能产生意想不到的效果,而用后一种办法的话没有page这个参数会抛出异常,我们可以捕获异常然后再做相应的处理,比如提示用户缺少参数,而不是把参数值当做0来处理。(2)还有一点区别就是
a.Convert.ToInt32(double value)如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5转换为4,4.5 转换为 4,而 5.5 转换为 6。不过4.6可以转换为5,4.4转换为4 b.int.Parse(“4.5”)
直接报错:“输入字符串的格式不正确”.c.int(4.6)= 4 Int转化其他数值类型为Int时没有四舍五入,强制转换
int.Parse是转换String为int Convert.ToInt32是转换继承自Object的对象为int的.你得到一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt32.个人总结:(1)Convert.ToInt32的参数比较多,Int.Parse只能转换string类型的.(2)Parse就是把String转换成int,char,double....等,也就是*.Parse(string)括号中的一定要是string.(3)Convert可以提供多种类型的转换,也就是Convert.*()括号中可以为很多种类型(包括string).(4)至于效率上的区别可以看看这遍文章:《细说Convert和Parse到底那个效率高》 http://
有关三层架构
关于
三层架构(3-tier application)通常意义上的三层架构就是将整个业务应用划分为:表现层(UIL)、业务逻辑层(BLL)、数据访问层(DAL)、数据存储层(DBL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1、表现层(UIL):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。简单地说,处理事务的过程就叫业务逻辑
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。
概述
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。
三层结构原理:
3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
表示层
位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
业务逻辑层
业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
数据层
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。
简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。规则
三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:
1.UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改数据?
2.如果把UILayer拿掉, 你的项目还能在Interface/API的层次上提供所有功能吗?
3.你的DAL可以移植到其他类似环境的项目吗?
4.三个模块, 可以分别运行于不同的服务器吗?
如果不是所有答案都为YES, 那么你的项目还不能算是严格意义上的三层程序.三层程序有一些需要约定遵守的规则:
1.最关键的, UI层只能作为一个外壳, 不能包含任何BizLogic的处理过程
2.设计时应该从BLL出发, 而不是UI出发.BLL层在API上应该实现所有BizLogic, 以面向对象的方式
3.不管数据层是一个简单的SqlHelper也好, 还是带有Mapping过的Classes也好, 应该在一定的抽象程度上做到系统无关
4.不管使用COM+(Enterprise Service), 还是Remoting, 还是WebService之类的远程对象技术, 不管部署的时候是不是真的分别部署到不同的服务器上, 最起码在设计的时候要做这样的考虑, 更远的, 还得考虑多台服务器通过负载均衡作集群
所以考虑一个项目是不是应该应用三层/多层设计时, 先得考虑下是不是真的需要? 实际上大部分程序就开个WebApplication就足够了, 完全没必要作的这么复杂.而多层结构, 是用于解决真正复杂的项目需求的。
图(下面图源自Bruce Zhang博客)
一、三个层之间的关系
1. 代码访问流程(类之间的调用)类之
类之间的调用是单向的。2. 数据访问流和(双向)
3. 解决方案中,各项目引用(1)数据层被逻辑层引用(2)逻辑层被他对应的界面层引用(3)主界面层引用所有子界面层
第二篇:ORACLE数据库开发经验总结
ORACLE数据库开发经验总结
----ORACLE数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大 份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出新的不断努力,一直成 为IT业界瞩目的焦点。岭澳核电站的数据库平台采用了ORACLE7.3作为后端平台,前端选 择了ORACLE公司的DEVELOPER 2000 及DESIGNER 2000作为开发工具,采用了目前流行的
CLIENT/SERVER模式。本人在ORACLE系统的开发中,就ORACLE的整套开发工具提出一些自
己的体会,供同行参考。
----一.ORACLE SQL PLUS 使用技巧:----①查找重复记录:
SELECT DRAWING,DSNO FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以显示所有DRAWING和DSNO相同且重复的记录。----删除重复记录:
DELETE FROM EM5_PIPE_PREFAB WHERE ROWID!=(SELECT MAX(ROWID)FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND EM5_PIPE_PREFAB.DSNO=D.DSNO);----执行上述SQL语句后就可以刪除所有DRAWING和DSNO相同且重复的记录。----② 快速编译所有视图
----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因 为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快 速编译。
SQL >SPOOL ON.SQL SQL >SELECT ‘ALTER VIEW ‘||TNAME||’
COMPILE;’ FROM TAB;SQL >SPOOL OFF 然后执行ON.SQL即可。
SQL >@ON.SQL 当然,授权和创建同义词也可以快速进行,如:
SQL >SELECT ‘GRANT SELECT ON ’ ||TNAME||’ TO USERNAME;’ FROM TAB;SQL >SELECT ‘CREATE SYNONYM
‘||TNAME||’ FOR USERNAME.’||TNAME||’;’ FROM TAB;③ 用外联接提高表连接的查询速度
在作表连接(常用于视图)时,常使用以下方法来查询数据: SELECT PAY_NO, PROJECT_NAME FROM A WHERE A.PAY_NO NOT IN(SELECT PAY_ NO FROM B WHERE VALUE >=120000);----但是若表A有10000条记录,表B有10000条记录,则要用掉30分钟才能查完,主要因 为NOT IN要进行一条一条的比较,共需要10000*10000次比较后,才能得到结果。该用外
联接后,可以缩短到1分左右的时间: SELECT PAY_NO,PROJECT_NAME FROM A,B WHERE A.PAY_NO=B.PAY_NO(+)AND B.PAY_NO IS NULL AND B.VALUE >=12000;----④ 怎样读写文本型操作系统文件
----在PL/SQL 3.3以上的版本中,UTL_FILE包允许用户通过PL/SQL读写操作系统文件。如下: DECALRE FILE_HANDLE UTL_FILE.FILE_TYPE;BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN(‘C:’,’TEST.TXT’,’A’);
UTL_FILE.PUT_LINE(FILE_HANDLE,’ HELLO,IT’S A TEST TXT FILE’);UTL_FILE.FCLOSE(FILE_HANDLE);END;----相关UTL_FILE数据库包详细信息可以参见相关资料。----⑤ 怎样在数据库触发器中使用列的新值与旧值
----在数据库触发器中几乎总是要使用触发器基表的列值,如果某条语句需要某列修改 前的值,使用:OLD就可以了,使用某列修改后的新值,用:NEW就可以了。如:OLD.DEPT_ NO,:NEW.DEPT_NO。
----二.ORACLE DEVELOPER 2000使用技巧:
----① 改变FORM(FMX模块)运行时的Runform4.5的题头:
----DEVELOPER2000中FMX默认题头为:Developer/2000 Forms Runtime for Windows
/ NT 你可以改为自己定义的标题,----1.在Form级触发器中添加触发WHEN-NEW-FORM-INSTANCE----2.在此触发器中写如下代码:
set_window_property(FORMS_MDI_WINDOW,TITLE,'POINT SYSTEM 欢迎使用');----② 如何隐藏菜单中的window选项:
----在创建自己的菜单时,最后选项总有window项,下面介绍如何去掉它,----1.创建一个Menu
----2.在Menu中建立一个Item,命名为WINDOW。----3.设置该Item属性如下:----
Menu Item Type:Magic Command Type:Null Magic Item:Window Lable:为空
----③ 怎样创建动态下拉列表List
----Developer 2000 中的列表是通过设置相关属性而完成数据项的列表设置的,但那
只是静态的,有时你想让某项成为动态的列表,随输入数据的改变而改变,就需要动手 去编个小程序。下面详细介绍怎样去做:----有块EBOP_CABLE_ACCOUNT,下有SPECIFICATION数据项,当一进入该模块时,就将
SPECIFICATION项在数据库中存储的值动态显示出来,先在Form4.5中建立一个PRCEDURE,命名为DYN_LIST: PROCEDURE DYN_LIST IS
CURSOR C1 IS
SELECT DISTINCT(SPECIFICATION)FROM EBOP_CABLE_ACCOUNT;CNT NUMBER;i NUMBER;TNAME EBOP_CABLE_ ACCOUNT.SPECIFICATION%TYPE;BEGIN
CLEAR_LIST('EBOP_CABLE_ ACCOUNT.SPECIFICATION');SELECT COUNT(DISTINCT
(SPECIFICATION))INTO CNT FROM EBOP _CABLE_ACCOUNT;open C1;FOR i IN 1..CNT LOOP
FETCH C1 INTO TNAME;EXIT WHEN C1%NOTFOUND OR C1%NOTFOUND IS NULL;ADD_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',i,TNAME,TNAME);END LOOP;DELETE_LIST_ELEMENT('EBOP_CABLE_ACCOUNT.SPECIFICATION',CNT+1);CLOSE C1;END;然后在FORM的WHEN-NEW
-FORM-INSTANCE触发子中加入一行: DYN_LIST;----这样一进入该FMX,就会动态刷新该列表。除此之外,SPECIFICATION数据项改为列 表项。
----④ 当显示多条记录且数据项特别多时,如何组织录入及显示界面:----如上图所示,PRN代码及设备代码在画布1(CONTENT型)上,其它数据项在画布2(ST ACK型)上,所有数据项为一个表的列或一个块的数据项。在拉动水平滚动条时或用TAB或 敲回车键时,将看到全部数据项。这种排布方法适用于数据项特别多又想显示多条记录 时用。主要制作顺序为:先建立两个画布,画布1(CONTENT型),画布2(STACK型),然后
建立块,选画布时用画布1,这样所有项都显示在画布1上,然后选中除PRN代码及设备代 码之外的所有数据项,选TOOLS菜单下的PROPERTIES选项,将这些数据项的CANVAS属性选
为画布2(STACK型),然后调整整体位置就可以了。----⑤ 如何在FORM的受限触发子中提交保存数据
----在FORM中很多触发子是不能用COMMIT WORK语句的,当你在该触发子中使用了UPDA
TE,DELETE等操作并想立即存盘时,就需要COMMIT WORK语句了。首先在服务器端建立D B_SQL_COMMIT这个过程(采用ORACLE7.3数据库),PROCEDURE DB_SQL_COMMIT IS source_cursor integer;ignore integer;V7 NUMBER :=2;BEGIN
source_cursor:=dbms_sql.open_cursor;dbms_sql.parse(source_cursor,'COMMIT WORK',V7);ignore:=dbms_sql.execute(source_cursor);DBMS_SQL.CLOSE_CURSOR(source_cursor);END;----然后在FORM中该触发子中调用过程DB_SQL_COMMIT;就可以了,当然你可以根据自己
需要将该过程加入参数,这样通过参数可以得到执行DML语句的权限。----⑥ 如何在FORM中实现某数据项自动按记录序号加一操作
----设块名为VO,要操作的数据项为VO_ID,在该块中建立块级触发子WHEN-CREATE-REC
ORD,加入如下代码:
:VO_ID:=:System.Trigger_Record;----这样每当生成新记录时VO_ID就会自动加一了。
----⑦ 如何在一个FORM中调用另一个FORM,或在一个块中调用另一个块时显示特定的 记录有时用户会要求在调用另一个FORM时,只显示相关的记录,举例如下,在一个FORM 的块中有一个按钮,在按钮触发子中加入如下代码: DECLARE PM PARAMLIST;BEGIN
PM:=GET_PARAMETER_LIST('PM');IF NOT ID_NULL(PM)THEN
DESTROY_PARAMETER_LIST('PM');END IF;PM:=CREATE_PARAMETER_LIST('PM');......................ADD_PARAMETER(PM,'THE_WHERE', TEXT_PARAMETER,'EM_NAME=''EM4'' AND EM_PROJECT_NAME=''支架预制''');OPEN_FORM('PAYMENT',ACTIVATE,SESSION,PM);END;
----其中EM_NAME,EM_PROJECT_NAME为本FORM某块的数据项,PAYMENT为要调用的FORM 模块。这样通过传递参数列表就可以得到想要的结果。在FORM PAYMENT.FMB中,建立一 参数THE_WHERE,CHAR型,长1000,然后在PAYMENT.FMB中建立FORM级触发子WHEN-NEW-F ORM-INSTANCE,在该触发子中加入以下语句:
IF :PARAMETER.THE_WHERE IS NOT NULL THEN SET_BLOCK_PROPERTY('PAYMENT', DEFAULT_WHERE,:PARAMETER.THE_WHERE);END IF;----其中PAYMENT为要显示的块,这样通过参数传递就得到想要的某些特定条件的数据 了。
----⑧ 在FORM中当有主从块时,连续输入记录如何避免被不断的提示保存:
----每输入一条主记录和若干条该主记录的从记录后,此时再导航到主块输下一条记录,FORM就会提示你是否要保存记录,而你并不希望FORM提示,让它自动保存,此时你可 以到Program Units中找到过程PROCEDURE Clear_All_Master_Details,然后在这个过程 中找到语句
Clear_Block(ASK_COMMIT);----将其改为Clear_Block(DO_COMMIT);就可以了。----⑨ 在Report开始时选择排序项:
----在报表开始的Parameter Form中选择报表按哪个数据项排序,----1.先在USER PARAMETER 中创建SORT参数,为字符型,长20。
----2.初始值选’责任方’,然后将这四个值输入到DATA SELECTION中,形成列表。----3.然后处理QUERY中的SQL语句: select CHARGER,FCO_NO,EM_NAME,FCO _NO,DESCRIPTION, FCR_POINT from FCR_MAIN ORDER BY DECODE(:SORT,'责任方',CHARGER,'FCO号', FCO_NO,'FCR号',FCR_NO,'FCR号',EM_NAME)----⑩ 在Developer 2000中如何读写操作系统文件
----在用Developer 2000的开发工具开发应用程序时,经常碰到需要读写外部文件的问
题,可以用ORACLE 带的包TEXT_IO来完成这项需求。例如: DECLARE
IN_FILE TEXT_IO.FILE_TYPE;OUT_FILE TEXT_IO.FILE_TYPE;LINE_BUFER VARCHAR2(80);/*若不用IN_FILE,可以将各字段联接在一起赋值给此变量*/
BEGIN
IN_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST1.TXT’,’r’);OUT_FILE:=TEXT_IO.FOPEN(‘C:TEMPTEST2.TXT’,’w+’);
LOOP
TEXT_IO.GET_LINE(IN_FILE,LINE_BUFER);TEXT_IO.PUT(LINE_BUFER);TEXT_IO.NEW_LINE;TEXT_IO.PUT_LINE(OUT_FILE,LINE_BUFER);END LOOP;EXCEPTION
WHEN no_data_found THEN
TEXT_IO.PUT_LINE(‘CLOSING THE FILE ,PLEASE WAITING....’);TEXT_IO.FCLOSE(IN_FILE);TEXT_IO.FCLOSE(OUT_FILE);END;----三.数据库管理
----① 在删除一个表中的全部数据时,须使用TRUNCATE TABLE 表名;因为用DROP TAB
LE,DELETE * FROM 表名时,TABLESPACE表空间该表的占用空间并未释放,反复几次DR OP,DELETE操作后,该TABLESPACE上百兆的空间就被耗光了。----② 数据库文件的移动方法
----当想将数据库文件移动到另外一个目录下时,可以用ALTER DATABASE命令来移动(比ALTER TABLESPACE适用性强):
----1.使用SERVER MANAGER关闭实例.SVRMGR > connect internal;SVRMGR > shutdown;SVRMGR >exit;----2.使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS 2.6).在UNIX中用 mv命令可以把文件移动到新的位置,#mv /ora13/orarun/document.dbf /ora12/orarun----3.装载数据库并用alter database命令来改变数据库中的文件名.SVRMGR > connect internal;SVRMGR > startup mount RUN73;SVRMGR > alter database rename file
> ‘/ ora13/orarun/document.dbf’
> ‘/ ora12/orarun/document.dbf’;----4.启动实例.SVRMGR > alter database open;----ORACLE数据库开发经验总结
第三篇:8年项目开发总结
八年了,我就这么浑浑噩噩的过来了。。
8年前的平安夜,我踏上了南下的列车,和许多人不一样的是,我并没有怀太多的梦想。。4年中专生活,只能用一个字来形容,那就是“混”。。学校就在火车站附近,每次回家都要经过那,我总是很惊讶,这是我呆过4年的地方吗?!怎么我脑海里就没有残留着一点它的美好回忆呢?!。。一直都认为编程是件很高深的事情,从没想过自己这辈子能当上程序员,后来居然误打误撞的干上了,真的觉得挺幸运的,也许是老天对我太眷恋了吧,呵呵。。刚出来那会对自己期望不高,因此也没什么要求,任凭学校把我们送进了深圳一家挺大的厂做员工,那时我们有几个好姐妹都在一起,平时一块上班,周末就一块跑去超市抱一堆零食回来。。到了晚上,我那最最亲爱的老山羊总是会轻轻的哼着催眠曲哄我入睡:“睡吧,睡吧,我亲爱的山羊。。”第1次有了自己的工作,第1次有几个小钱,第1次感受异省他乡的花花世界。。一切都觉得那么新奇,虽然那时工资才几百块,但每天都很开心。。真的很怀念那段无忧无虑的生活,很单纯的快乐,如今的工资虽然已经在后面加了个0了,但这种心境却再也找不回来了。。
在这里呆的时间不长,有件小事情倒是记忆蛮深刻的:我们班长是做了很多年的老油条,对我们同学几个倒是挺照顾的,平常老爱跟我们唠嗑唠嗑,旁边拉的班长是刚毕业的大学生,看上去挺老实的,有1次他们拉的一台机器的零件坏了,找主管换,主管把他狠狠训了一顿:“好好的零件到了你手里就坏了,下次再坏写份检讨上来。。”,那人一个劲的搓着衣角,唯唯喏喏的“是是。。”,感觉怪可怜的。后来我们拉的零件也坏了,班长找到主管,一上去就理直气壮一大堆牢骚:“什么破零件!?用了这么多久了,早该坏了,到现在才坏。。”主管二话不说就给换了,还一脸的笑。。哎,这世道,都尽欺负老实人去了。。
虽觉着自己那时没什么梦想,但终究还是厌倦了那种枯燥的傻瓜式劳动了,或许自己的骨子里本身就有着一股不服输的倔劲吧?!于是不理会班长的一再劝说绝然的离开了那里。学了4年的计算机应用,自信找份文职什么的还是可以的吧?!于是辗转于深圳、东莞、中间还去过清远,差点被同学骗去搞传销了,还好知道打个电话问老妈,表哥在旁边听到了,坚决不让我去(表哥在东莞开了个小厂,老妈在帮他带小孩),幸好没去,不然我的人生又将添上灰暗的一笔了。。广东这鬼天气,大热天的暴晒,搞得个人跟个黑鬼似的,又没经验,找来找去也没什么满意的,累了,泄气了,想妈妈了,于是就回老妈那里了。。成天在表哥那白吃白喝加白住,时间长了,妈妈急了,她就经常会跑出去看看附近有没有什么好公司招人,说来还挺有趣的,老妈还真找了个,就是这个耗费了我7年青春的地方。。面试我的是个香港人,PE部的经理,挺和蔼可亲的,不会说普通话,他给了我一支笔,我们就这样“纸上谈面试”的,感觉聊得挺愉快的,后来我就如愿已偿的进来了。。
刚进来时,我的工作就是登记单啊什么的,挺闲得慌的那种。。那时公司有个电脑部专门开发公司ERP,貌似刚成立不久吧,零零散散的到处写的是小系统。我用的系统是电脑部经理用Access写的,他跟我们经理是好朋友,经常过来,有时间顺带也教教我,我没事也就瞎学学,虽然不懂VBA,但终归还是有一点点编程基础的,再说微软的东西别的不说,帮助文件肯定够好够详细,边学边摸,后来干脆什么要求我都自己改了,再后来我们部门和别的部门的小系统我全包了,什么工资核算,锌版管理,预算表,合同进出口什么的。。直至现在,我们的ERP系统经历到第3代了,6个公司同时在用,遍布了各个部门,但仍有个别部门的小啰啰们还死抱着这些小系统不撒手,害我老得维护,挺郁闷的说。。BTW:提到电脑部经理,那肯定得说说,我的伯乐,是个挺有思想的香港人,特爱画八卦图(流程图),口才极好,特会“忽悠”人,我总是被他的天花乱坠整得一愣一愣的,走路时还老爱一跳一跳的,像个老顽童,特有趣。。是他发现了我有程序员的潜质,他在别的部门也带过其它徒弟,不过貌似只有我是成器的,嘿嘿。。得意的笑一下下。。真的很惭愧,我过来时没多久他就走
了,只知道师哥师姐们都挺崇拜他的。。那时我对技术方面的认知少得可怜,对他的了解几乎是一张白纸,写得没点内容。。不过,我永远都不可能忘记有这么一个人曾经引领着我走上了程序员这条道路,真的很感激他!
就这样,我在一个部门干着另一个部门的事,电脑部经理早有意调我过去,但我们经理却不同意,我有些生气,就提出要辞职,可是我却怎么也说不过人家那一套套的谬论,为了厚待我,给我招了好些个小MM过来,我正式上任管家婆一职。一会要我负责派单,控制做单的进度,一会要我管锌版,一会又要我整别的,还这报表那报表的。。那时我们部门是刚从别的部门分出来的,貌似还参杂了一些部门之间的争斗,感觉干什么都挺头痛。。也不知道我当时是怎么应付过来的?!现在回想起来,简直就是在催残我幼小的心灵嘛!。。给我加工资,开始只加了两百,我嫌少,又再加两百,我还是嫌不够,觉着委屈居然还哭起了鼻子,经理拿我没法子,又给我申请600元的奖金,我这才罢休。。呵,感觉那时的我特别任性、幼稚可爱。。
后来我们经理因为一些原因离开了公司,我也就如愿以偿的调到了电脑部。刚过去时也是打打杂,写写Access。那时感觉特不适应,偌大一个办公室,二十多号人,个个都不吱声,埋头苦敲代码,在以前部门吹水吹多了,一下没人吹了,感觉找不到知己,特郁闷。。但时间长了,慢慢的也融入到了这个团队了,发现程序员其实蛮可爱的。。在学校时,学的都是FOXPRO、PASCAL、C什么的,根本不知道ASP为何物?也不知道SQL是数据库。。那时(2003年)正好招了一批新的开发人员,于是我就跟经理说我也想学,经理同意了,但是如果我学不好,还是要回到原来位置的(我知道其实他是故意激将我的)。为了证明我是可以的,在培训的那一个月时间里,我很努力,后来考核的时候,10个人里头我的成绩排第2。就这样我踏上了我的开发之旅。。
写了1年的ASP,后来改用ASP.NET,考虑到服务器压力方面的问题,V3的时候就改成C/S开发模式。不过还是特别怀念写网页,可以随性的把界面写得很漂亮,呵。。5年多的程序员历程,感触还是挺多的,可是却很难用语言描述出来,总之,有快乐也有辛酸。。程序员真是个很磨炼人的工作,没有人会因为你是女孩,就可以比别人少干一点,相反,我的“苦差事”总是显得比别人要多。。很庆幸我刚接触的时候才20岁,总是很执着的埋头苦干,从不计较太多的得与失,要是到了现在这浮躁的年代,恐怕我是没有那个毅力坚持下去的。。刚开始的时候,天天练习八卦图,画了一段时间开始写界面,记得我的成名作是写工艺路线界面,要实现工序间的自由拖动,还要支持工序的分支合并,对于当时我这样的菜菜菜鸟来说的确是挺难的,总之完成它是花了一番苦功夫的,后来得到了大家的一致好评,都夸我JavaScript写得好,当时心里贼高兴,没料到从此我的“苦日子”就跟随着而来了。。老大无论什么事情不管多难,总是一句话:你做事我放心,给你多少天时间你肯定能做得很好的。。哑巴吃黄连,唯有闷着头苦干,感觉压力挺大的,总是担心交不了差,晚上睡觉满脑子都是代码。。那时的我好象很在乎别人对我的评价,谁说我一点点不好了,我就会难受好几天,哪像现在,说什么都满不在乎的,时不时的还能把人气得够呛的,整个一女流氓(呵,有些夸张,不过也有些类似这方面的气质了)。。BTW:提到老大,就顺便说说,02-03年在SQL版混的应该认识他,在《应用实例》当过一段时间的版主,ID是hjhing,貌似大家都叫他线圈GG吧,是个挺有才气的人,那时他负责带我们开发项目,跟他的头两年还是学了不少东西。我上CSDN的引荐人就是他,可惜的是我来这里没好好学习,天天在这灌水了。。后来香港经理走了,他坐上了经理的位置,成天上海广东飞来飞去,管我们就管得少了,也渐渐的脱离了技术,后来迷上了摄影,相机就成了他老婆,每次美女作品一出来,就叫我们到他Blog上踩踩。。再后来就。。没了。。不说了。。说得不好,不定哪天他老人家心血来潮冒上来看到了,我可就罪过了。。总之,挺感谢他这么多年来对我的信任与栽培,从不过问太
多的细枝末叶,给了我很多自由发挥的空间。。
第1次带项目好象是在05年吧,由于是第1次所以比较难忘,回想起来还是有些辛酸滴。。当时原料管理已经很规范了,成品则很乱,一直都是做的手工帐,那时候销售、产品、生产、仓存、采购等模块都已经步入正轨了,成品的管理势在必行。于是安排我带3个新来的负责开发成品系统,我把每个人负责的界面都画好,表结构也设计好,拿出来安排他们开发时,居然有人说:“你什么都弄好了,那还要我们干什么?!”我一听,犯傻了,幸亏老大在旁边,跟他们说设计的重要性怎么怎么的,才帮我解了围。后来也发生过此类事情,开始因为想法不同吵着吵着就拍起了桌子。。呵,正好都是张狂的年纪,年少气盛。。开发完后,接下来就是推行了,推行的前一天晚上,记得那天正好是我生日,本来是我请好朋友们吃饭的,后来变成了他们做好饭等我回来吃。。那晚我加班到将近11点,把成品仓盘点上来库存资料导到系统,资料乱得不行,想了很多办法,还是有好多在系统中的找不到对应的产品,到了第2天,很多送货单因为没有库存开不了,由于成品跟生产、销售、仓库都有关联,涉及的部门很多,其它人都出去推系统了,我一个呆在办公室处理问题,EMAIL满天飞,电话打爆了,正当我累得筋疲力尽的时候,某部门的老大跑进来(女的),霹头盖脸的责骂我,唾沫横飞。。我就傻傻的瞪着她,脑子里空白得找不着一句话来回她,也不记得她当时说了什么,见我N久没反应,她就自讨没趣走了。。感觉那段时间我成天紧张兮兮的就像一个丢了灵魂的人似的。。
一晃五六年过去了,也许是比较喜欢这里的气氛吧,让我一直沉迷在这里,几乎有些颓废了。。这里招的基本上都是清一色的毕业生,单纯都写在脸上,别人都说我们不象员工更象是学生。。干什么都是集体活动:吃饭时围一堆,叽叽喳喳有说有笑。。上班一有闲情就全跑QQ群里胡吹乱砍一通,当然啦,这群对老大是具有高度保密性滴。。中午休息时凑到一块玩杀人游戏,互相指证杀手,争得面红耳赤,比较遗憾的是偶当杀手的机率太小了,总觉得不过瘾。。下了班经常会一块打打篮球,乒乓球什么的,偶尔出出汗,嘻嘻闹闹的抢下球,一天的烦闷就烟消云散了。。偶尔周末就会来个厨艺大比拼,这里的辣妹子辣伢子比较多,菜系当然是以爆辣为主啦,炒血鸭,剁椒鱼泡,梅菜扣肉,爆炒鸭肠,红烧鱼。。红通通的一片,看得口水直流,广东的同事每次都被我们拖下水,看着他们被辣得满头大汗,我们就在一边贼笑。。
2008感觉是挺沧桑的一年。也许是地震把我从沉睡中震醒了吧?!出来七八年了,我就这么浑浑噩噩的把它过完了,已经荒废了两年多没认真学习了,虽然偶尔会好强下,强过之后就只剩下懒惰了,懒惰算得上是我的一大劣根性了。。更可怕的是发觉自己的心态在一天天的老去,不好的习性也在一天天的滋长。。霸道、没耐心,像个怨妇似的成天发牢骚?!。。有时候都不敢想像再这么下去我会变成什么样?!看着这里的物是人非,难免有些伤感。。考虑了很久,8月份的时候终于鼓起了勇气向老大提出了辞职,他一点也不意外,我们谈了很久,他说了很多难处,新人还没成长起来,希望我能留下来帮忙一段时间,我一心软就答应了,无论如何过完年来一定得闪了。。
呵,就写到这里了,东拉西扯的也不知道都写了些啥?!别人都是1年1篇总结,我8年才写这么1次,能写的东西太少了,总之过得稀里糊涂、糊里糊涂,糊成了一锅粥。。如果说人生最美好的时光是18-25岁,那么我的美好人生真的都被我虚度了。。
最后,希望09年做一个全新的自己,开开心心的过好每一天。。
并祝大家圣诞、元旦快乐!
第四篇:Android项目开发总结
项目开发总结报告
1引言
1.1编写目的
总结开发经验与学习中的不足
1.2背景
以方便用户记录日常学习心得,生活体会为目的,进行主题为“随心笔记”的应用开发
2实际开发结果
2.1产品
2.2主要功能和性能
能够查看笔记的目录,记录笔记完成时间。能够改变主题颜色,目录排版方式,拥有简洁的主题。对于涂鸦功能,插入图片,密码锁等功能未能实现。
3开发工作评价
3.1对产品质量的评价
本应用拥有简单实用的功能,能够满足一般用户的需要
3.3对技术方法的评价
开发中使用了软件工程中的增量开发模型,黑盒测试等技术,使开发逐步向前发展
3.4出错原因的分析
对于部分Android版本支持性不好,不能正常使用安装等
4经验与教训
通过这次开发,我们体验了开发不易,需要很多人员的合作。开发过程中,必须明确整体目标,不能东一榔头,西一棒槌。另外由于学习时间短,对很多东西都不太了解,还好通过CSDN等一些网站能够找到有益的帮助,感谢那些博客,论坛。
第五篇:数据库开发工程师的职责描述
数据库开发工程师的职责描述
职责:
1、负责数据提取与分析工作;
2、负责数据接口设计与开发;
3、负责ETL流程的设计;
4、负责数据建模、数据预处理工作;
5、负责存储过程的编写;
6、负责日常ETL运维等。
任职资格:
1、本科及以上学历,计算机或数据分析相关专业;
2、可以放宽至应届毕业生,具有数据库、ETL、数据分析相关工作(含实习)经验者优先;
3、熟练掌握SQL语言,熟悉存储过程开发;
4、具备较强的责任心,能够承受工作压力;
5、具备MySQL、Oracle开发经验者优先;
6、具备Hadoop、Hive、Pythonk开发经验者优先;
7、具备较强的责任心,上进心、能够承受工作压力。
数据库开发工程师的职责描述2
职责:
1.完善数据库设计文档;表结构,字段定义,引擎选择;
2.优化各项目组目前业务的SQL语句,满足高并发的需求;
3.为开发团队提供数据库相关的技术支持服务,包括SQL编写规范制定、指导、审核等
4.保障数据库系统高效安全及稳定运行
任职资格
___本科及以上学历,计算机,网络,数学等相关专业优先
___年
SQL开发相关经验,熟练掌握存储过程等相关开发
3.熟悉数据库的性能优化、SQL调优,对锁和事务隔离问题有深入理解
.熟悉数据库设计理论,熟悉数据库原理和底层架构
4.精通主从复制原理和实践
数据库开发工程师的职责描述3
职责:
1、参与数据类项目需求分析和总体架构设计,对项目开发工作提出解决方案;
2、根据开发进度和任务分配,完成相应模块软件的开发、编程任务;
3、解决日常开发中遇到的技术问题,根据需要不断修改完善软件;
4、根据公司技术文档规范编写相应的技术文档以及编写相应的说明书。
任职资格:
1、计算机科学、软件工程等相关理工类专业本科/硕士学历;
2、熟悉Teradata、DB2、Oracle等主流数据仓库模型设计之一;
3、熟悉oracle、Mysql等数据库及SQL开发,Teradata、DB2、Oracle等主流数据仓库模型设计之一;
4、熟悉JBOSS、Tomcat、Weblogic、Websphere等一种或多种主流应用服务器;
5、具有良好的沟通交流能力、合作精神及主动学习精神,能够接受全国范围内的出差。
数据库开发工程师的职责描述4
职责:
1.开发和维护基于Oracle关系型数据库的系统。
2.能根据业务需求,独立完成开发设计。
3.能独立完成基于单个业务功能模块的开发工作,并对复杂的业务模型进行准确、高效的程序设计开发工作。
4.建立测试环境,进行相关开发的程序测试工作。
5.完成相关的开发及测试文档。
任职要求:
1.计算机或相关专业全日制本科或以上学历。
2.五年以上基于Oracle数据库的应用系统开发经验。
3.熟悉SQL,能熟练地运用PLSQL开发工具。
4.学习和理解能力强,具有一定的系统分析能力,及独立解决问题的能力。
5.具备良好的团队合作精神和承受压力的能力。
6.有物流、ERP、医疗等系统开发经验者更佳。
数据库开发工程师的职责描述5
职责:
1、负责公司开发平台日常维护、二次开发修改及升级工作;
2、使用后台数据库等工具进行数据分析、整理工作;
3、采用系统维护方案保障系统的稳定运行;
4、使用相关测试工具对系统进行测试并撰写测试报告;
5、为客户提供售前技术咨询讲解答疑并提供专业的软件安装、实施、培训及顾问工作;
6、起草项目实施方案,编制特定用户的系统使用说明手册。
【任职要求】
1、专科及以上学历计算机相关专业;
2、必须熟练掌握SQL
Server
或
MY
SQL
两者中的其中一种(此点不适者勿扰);
3、了解软件架构体系,熟悉Microsoft
SQL等数据库系统的安装、配置和优化设置,熟练操作数据库备份和恢复;
4、能够理解软件设计中的表间关联关系,对常规程序进行的数据库操作有一定认识;
5、有较强的责任心以及团队意识、能够承受一定的工作压力。