2016大二第一学期实习体会_第1页
2016大二第一学期实习体会_第2页
2016大二第一学期实习体会_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文章

莲山课件ww

Yk公文

2016大二第一学期实习体会

主要从下到上讲一下项目中一些值得注意的细节。

0.关于数据库字段(实体类属性)设计:

一开始要尽量想得全,想得长远,考虑周到仔细,字段类型都要考虑清楚。

个人觉得这是非常重要的一步,多人商量讨论是最好的。

因为到了后期再要添加、修改一点什么是要花更多的时间的(我大一写一些小项目时就经常这样,吃了很多亏),而往多了想,就算时间不够,要删除一些功能,直接读数据时不读,不写那个字段即可(在此次实训中深有体会)。

1.关于SqL语句,(下面代码只是片段,有删减,select*只是为了减少代码篇幅,不建议在开发中使用)

[java]viewplaincopy

publicListqueryDvdByName(Stringdname){

dname=“‘“+dname+”‘“;

Stringsql=“select*fromDvdwheredname=“+dname;

Listlist=null;

try{

list=operquery(sql,null,);

}catch(Exceptione){

();

}

returnlist;

}

不难发现,我为dname两端加上了‘单引号,不加是会报异常的,这个细节其实我早已发现。

这次实训中发现有好多同学问我问题时都是在这吃了亏,说明好多同学还不知道,这里特别提一下。

[java]viewplaincopy

publicbooleandelDva(intdid){

Stringsql=“deletefromDvdwheredid=“+did;

returnoperUpdate(sql,null);

}

此处为int类型,故不用加,当然double也不需要。

再看代码

[java]viewplaincopy

publicListqueryDvdByName(Stringdname){

Stringsql=“select*fromDvdwheredname=?”;

Listplist=newArrayList();

(dname);

Listlist=null;

try{

list=operquery(sql,plist,);

}catch(Exceptione){

();

}

returnlist;

}

这段程序和第一段几乎一样,不同的是,用?占位符代替参数,再传入填补占位符的plist,也不用加’单引号,而且此方法能有效防止sql注入攻击(我也是百度“如何防止sql注入”时才知道的),经过我的验证,确实不错。

故推荐使用此方法构造sql语句。

2.答辩时发现好多人说自己的程序实现了模糊查询(即简单的在要查询的字符串前面、后面各加一个%),

可是我觉得他们的模糊查询都还差一步,比如:查“从你的全世界路过”,

上述模糊查询输入“从全世界路过”,就会出现查不到的情况,

可是有时候人们就记得“从全世界路过”,所以我认为他们都没有实现真正的模糊查询。

其实只需再加一步即可,如下:

[java]viewplaincopy

publicListqueryDvdByName(Stringdname){//按片名模糊查询

Stringname=“‘%”;

for(inti=0;ilist=null;

try{

list=operquery(sql,null,);

}catch(Exceptione){

();

}

returnlist;

}

/S架构中,使用write()及read()传输络信息时,需传输的类必须实现

Serializable接口,比如publicclassDvdimplementsSerializable{.......}

补上序列号privatestaticfinallongserialVersionUID=7261093218919169833L;

序列号应该是随机的一个码(这个我也不是很清楚,个人觉得是随机生成的)

值得注意的是:服务器端的实体类名,包名,序列号都必须与客户端的保持一致,

不然络传对象时,无法将对象还原成预期所需要的对象(会报找不到XXX类的错)。

连接,分为长连接与短连接(各有优缺点,由于我也是自己百度看的,想了解的可以百度),

在此次项目中用的是长连接。长连接时每次客户端请求、或者接收服务器端的数据后,

显然不能关闭socket(即不能();),要注意的是连由socket得到的输出输入流均不能关闭,

例如InputStreamois=newInputStream(());

不能();

否则报socketisclosed错误。

5.关于分包结构,如下图

这是服务器端客户端

值得注意的是,Dao虽然叫Dao但并不是一个接口,而是一个类,所以放在DaoImpl里面,

答辩时发现有不少组由于这个问题被扣分。

6.关于界面Ui

界面是程序与用户交互的实现,在做到尽量美观之时,更重要的是防止应用户的错误输

入而导致程序崩溃,这样才是一个好的界面。

1)就比如应该要输入整数的地方,用户不小心输入了一个字符串、中文、小数,如果

没有捕获异常,程序是会飘红的。

2)做空值判断,在ui往biz层传数据时,若用户输入信息有空值,就不应当继续往biz传

数据,而应当提示用户输入有误。

3)数值范围判断,上面做了非法字符判断,及空值判断,还是不够的。比如输入一个

同学的成绩,那么用户不小心输入-55,在1)处不会报错,2)处也符合,

若没有加数据范围判断就糟糕了。

当然要防止这些情况,在数据进入数据库之前防止均可,为什么我要在ui防止呢,

当然是为了减轻服务器的负担,否则就无法体现c/S架构的优势所在了,那还不如用B/S架构呢!

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论