如何写出高效 规范 可读性高的代码 (JDBC部分)?

问题描述

关于此问题,我查了很多资料。大多都是概念性的总结,没有具体的代码实现。本人的目的是通过学习高效的jdbc代码 封装一个高效的工具包。请各位多多指教。下面贴出本人写的jdbc代码,请指出不足之处。package com.win37.user.idlimp;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import com.win37.common.JsonUtil;import com.win37.common.Dao.PageDaoTwo;import com.win37.common.idlimp.PageTwoImp;import com.win37.db.DBManager;import com.win37.user.dao.Friend;import com.win37.user.dao.FriendComment;import com.win37.user.dao.HomeAricle;import com.win37.user.dao.HomeUser;import com.win37.user.dao.LetterMessage;import com.win37.user.dao.News;import com.win37.user.dao.Notice;import com.win37.user.idl.IHomePage;public class HomePageImp implements IHomePage{Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;/** * * @return 数据库连接对象 没用使用连接池 */public Connection getConn(){DBManager dbmanager=new DBManager();try{conn=dbmanager.GetConnction();}catch(SQLException e){System.out.println("获得连接失败");e.printStackTrace();}if(conn==null)System.out.println(".................");return conn;}public void close(){if(rs!=null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(ps!=null){try {ps.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}} /** * 根据用户编号查询 用户爱好的运动 * * @param userid * @return */public String[] queryCatalogidByUserid(String userid){String sql="select *from run37_RSS where userid='"+userid+"'";//System.out.println(sql);String catalogid="",RSSmessage="";String [] a ={"",""};conn=this.getConn();try {ps=conn.prepareStatement(sql);rs=ps.executeQuery();while(rs.next()){catalogid=rs.getString("catalogid");RSSmessage=rs.getString("RSSmessage");}a[0]=catalogid;a[1]=RSSmessage;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{close();}return a;}/** * 根据类别名查询 新闻文章 * @param catalogname 类别名 * @return 返回包含HomeAricle的List */public List aircleListQuery( String catalogid ){//类别名String sql1="select top 10 * from new_aricle where catalogid='"+catalogid+"' order by createtime DESC";//String sql1="select top 10 *from new_aricle where catalogid=(select catalogid from new_catalog where catalogname='"+catalogname+"')";//String order=" order by createtime DESC";//限制条件 便于以后修改//sql1+=order; //System.out.println(sql1);List l=new ArrayList();conn=this.getConn();try {ps=conn.prepareStatement(sql1);rs=ps.executeQuery();while(rs.next()){HomeAricle ha=new HomeAricle();ha.setAricleid(rs.getInt(1));ha.setAricletitle(rs.getString("aricletitle"));ha.setAriclecontent(rs.getString("ariclecontent"));l.add(ha);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{close();}return l;}/** * 开通新闻平台 * @param userid * @return */public boolean userPlatformIsvalidateUpdate(String userid){ String sql="update run37_user set userPlatformIsvalidate=1 where userid=?"; int i=0; boolean b=false; conn=this.getConn(); try {ps=conn.prepareStatement(sql); ps.setString(1, userid); i=ps.executeUpdate(); if(i>0){ b=true; }} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{close();} return b; }/** * 投稿注册 * @param userid * @return */public boolean newsRegist(String userid){int i=0; boolean b=false;String sql="insert into run37_news_user(nsuserId,nsuserNickname,nsuserCountScore,nsuserCountHanzhu,nsuserType,nsuserlocalTime,newsCountArticle,newsCountComment,newsCountSuccess) values(?,?,?,?,?,?,?,?,?)";conn=this.getConn();try {ps=conn.prepareStatement(sql);ps.setString(1, userid);ps.setString(2, "昌群");//昵称默认ps.setInt(3, 0);ps.setInt(4, 0);ps.setInt(5, 1);ps.setString(6, this.getDate());ps.setInt(7, 0);ps.setInt(8, 0);ps.setInt(9, 0);i=ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{close();}if(i>0){b=true;}return b;}/** * 获取当前时间 * @return */public String getDate(){DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime=df.format(new Date()); return nowTime;}public int addFriendMessage(FriendComment friendComment) { String sql="insert into run37_news_friend_comment(userid,commenterid,content,createtime,positionid) values(?,?,?,?,?)"; conn=this.getConn(); int i=0; try {ps=conn.prepareStatement(sql);ps.setString(1, friendComment.getUserid());ps.setString(2, friendComment.getCommenterid());ps.setString(3, friendComment.getContent());ps.setString(4, friendComment.getCreatetime());ps.setString(5,friendComment.getPositionid());i=ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{close();} return i;}public int delMessageById(String commenterid) {int i=0; String sql="delete from run37_news_friend_comment where commentid=?";conn =this.getConn();try {ps=conn.prepareStatement(sql);ps.setString(1, commenterid);i=ps.executeUpdate();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{this.close();}// TODO Auto-generated method stubreturn i;} public FriendComment getFriendMessageSingleBean(FriendComment friendComment) {FriendComment fc=new FriendComment(); //不同的留言 时间应该不同 此处根据时间来查询String sql="select c.*,u.username,u.userimgUrl from run37_user u,run37_news_friend_comment c where c.commenterid=u.userid and c.positionid=? and c.createtime=? order by createtime DESC";conn=this.getConn();try {ps=conn.prepareStatement(sql);ps.setString(1, friendComment.getPositionid());ps.setString(2, friendComment.getCreatetime());rs=ps.executeQuery();if(rs.next()){ fc.setCommentid(rs.getInt("commentid"));fc.setUserid(rs.getString("userid"));fc.setCommenterid(rs.getString("commenterid"));fc.setContent(rs.getString("content"));fc.setCreatetime(rs.getString("createtime"));fc.setPositionid(rs.getString("positionid"));fc.setUsername(rs.getString("username"));fc.setUserimgUrl(rs.getString("userimgUrl")); }} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{this.close();}return fc; }public List getFriendListByUserId(int count,String userid) { List l=new ArrayList(); //不同的留言 时间应该不同 此处根据时间来查询String sql="select top "+count+" f.*,u.username,u.userimgUrl,u.userlocalAddressIP from run37_user u,run37_friends f where f.newsUFriendsId=u.userid and f.newsuserid=? order by newsUserfriendsid DESC";conn=this.getConn();try {ps=conn.prepareStatement(sql);ps.setString(1, userid); rs=ps.executeQuery();while(rs.next()){Friend f=new Friend();f.setNewsUserfriendsid(rs.getInt("newsUserfriendsid"));f.setNewsUFriendsId(rs.getString("newsUFriendsId"));f.setNewsUserid(rs.getString("newsUserid"));f.setNewUFriendState(rs.getInt("newUFriendState")); f.setUserlocalAddressIP(rs.getString("userlocalAddressIP"));f.setUsername(rs.getString("username"));f.setUserimgUrl(rs.getString("userimgUrl"));l.add(f);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{this.close();}return l; } } 问题补充:beneo 写道

解决方案

statement是共享的话你一个方法调用结束,close的过程中,另外一个方法在等待statement的返回两个方法都是用同样的statement,就会出现问题
解决方案二:
DAO就是DAO,JDBC就是JDBC,不要把你的DAO说成JDBC,一个JDBC就是一种规范,封装了,其他人其他项目都可以共用,你弄那么多的写死的表名字段名,明明就是DAO,不要JDBC,所以其他的就不用说了,整体不要谈什么搞笑了,根本就不好。你的DAO写的也不那么好,楼上的那几位说了,Connection的问题是一个,况且不谈,你的代码写的不是那么的漂亮,sql语句,既然用了PrepareSatement ,你干嘛还把sql用字符串加起来,用?代替难道不好吗、
解决方案三:
写一个工厂专门来生产Connection 再加上线程同步 还有你的操作数据库的方法不要贴在里面,建议写一个抽象类 以后不断地往里加,这样扩展性很强,每次跟新你的Jar类库的时候很方便你说的都不是jdbc的部分了,都是整个dao框架了....我的sql不是很多的情况,几个jdbc就能搞定,简单就是美
解决方案四:
写一个工厂专门来生产Connection 再加上线程同步 还有你的操作数据库的方法不要贴在里面,建议写一个抽象类 以后不断地往里加,这样扩展性很强,每次跟新你的Jar类库的时候很方便
解决方案五:
引用1. 不要共享connection,connection应该从数据库获取 我说错了,从链接池获得。。。笔误
解决方案六:
看看Spring的JdbcTemplate
解决方案七:
1. 不要共享connection,connection应该从数据库获取2. close的方法不对3. 不要共享引用 Connection conn=null; PreparedStatement ps=null; ResultSet rs=null;会有线程安全问题直接贴我写的jdbc吧 public long insertClusterInfo(ClusterInfo info) throws SQLException { String sql = "INSERT INTO ClusterInfo (GenDate, Count, SampleContent, ClusterInfo.From, ClusterInfo.Status) VALUES(?, ?, ?, ?, ?)"; Connection connection = getConnection(); PreparedStatement pstmt = null; ResultSet resultSet = null; try { pstmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, info.getGenDate()); pstmt.setInt(2, info.getCount()); pstmt.setString(3, toGBK(info.getSampleContent())); pstmt.setString(4, toGBK(info.getFrom())); pstmt.setInt(5, info.getStatus()); pstmt.executeUpdate(); resultSet = pstmt.getGeneratedKeys(); resultSet.next(); return resultSet.getLong(1); } finally { try { if (resultSet != null) resultSet.close(); } finally { try { if (pstmt != null) pstmt.close(); } finally { connection.close(); } } } }

时间: 2024-10-25 20:48:02

如何写出高效 规范 可读性高的代码 (JDBC部分)?的相关文章

写出高效jquery代码的19条指南

 讨论jQuery和javascript性能的文章并不罕见.然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码.好的代码会带来速度的提升.快速渲染和响应意味着更好的用户体验 首先,在脑子里牢牢记住jQuery就是javascript.这意味着我们应该采取相同的编码惯例,风格指南和最佳实践. 首先,如果你是一个javascript新手,我建议您阅读 <给JavaScript初学者的24条最佳实践> ,这是一篇高质量的javascript教程

写出高效jquery代码的19条指南_jquery

首先,在脑子里牢牢记住jQuery就是javascript.这意味着我们应该采取相同的编码惯例,风格指南和最佳实践.首先,如果你是一个javascript新手,我建议您阅读 <给JavaScript初学者的24条最佳实践> ,这是一篇高质量的javascript教程,接触jQuery之前最好先阅读.当你准备使用jQuery,我强烈建议你遵循下面这些指南:1.缓存变量DOM遍历是昂贵的,所以尽量将会重用的元素缓存. 复制代码 代码如下: // 糟糕 h = $('#element').heigh

如何写出高效的JavaScript JS性能优化窍门

本文我们来讨论一下JavaScript性能优化. Firefox拥有目前最快的JavaScript解析器 SpiderMonkey,有各种各样的让JavaScript的速度更快的努力,其中一个是asm.js. Asm.js是JavaScript是由Emscripten产生的一个子集,它为C/C++编绎成的JavaScript代码做了很多优化,编译型后的代码很难看,这就是为什么你不能自己写优化后的代码,但它运行非常快.我建议你阅读一下这篇文章 好了,我们的目标是写速度更快的JavaScript代码

C#如何写出备份和恢复sqlserver的代码

问题描述 最好是无bug的,我在网上找了很多都不知道写的什么意思,在此,恳请大侠们留个善心,帮小弟一把. 解决方案 解决方案二:直接通过C#调用操作系统命令进行SQLSERVER的备份.解决方案三:一样通过sql,你发来查询跟踪器,然后在管理器中操作备份和回复,跟踪器中就会看到执行的语句解决方案四: 解决方案五:该回复于2014-08-20 18:30:18被版主删除解决方案六:我花大好几千一个月雇人开发都不好意思说"请你给我写无bug的代码",lz你好大的口气.解决方案七:不好意思,

一般的企业网站如何写出好的原创文章

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现如今大家在做优化时都知道"内容为王,外链为皇",今天就内容为王来说下怎么样充实网站的内容建设,如何写出好的原创文章,有的同学在编辑网站内容时喜欢从网上随便找条信息,去去前头后尾改下内容就提交了,实际上包括百度为首的搜索引擎对内容建设方面的防范机制已经很完善了,很容易判断出你的文章不是搜索引擎喜欢的东东,属于低质量内容并且

邮箱-使用VS2010写出程序实现增删改查

问题描述 使用VS2010写出程序实现增删改查 代码已经求人写好了,但是不会建项目 各位大神帮我调试好了发到我邮箱吧~861236126@qq.com代码在下面 建立数据库的代码 CREATE TABLE [dbo].Table NOT NULL, [姓名] NVARCHAR (20) NOT NULL, [性别] BIT NOT NULL, [出生日期] DATETIME NOT NULL, [工作年限] INT NOT NULL, [电话号码] NVARCHAR (20) NOT NULL,

编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]

原文:编写高质量代码改善C#程序的157个建议[为泛型指定初始值.使用委托声明.使用Lambda替代方法和匿名方法] 前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们

如何写出高质量原创文章?

  提到高质量文章,首先让人想到的是原创,这种原创是100%的原创,是凭着自己的经验一点一点积累起来的.其次则是文章的可读性,即使原创,如果没有可读性也不能称之为一篇高质量原创文章,顶多只是凑数字的烂文而已.下面小编就以路饭网为例,讲解何为高质量原创文章? 从事SEO的人员,没有不知道原创文章的重要性,时至今日,很多网站甚至催生出了一个新的行业---原创文章代写.我们在很多SEO论坛或网站上都看过这样的广告,代写原创文章,每篇2元等等,这足以说明原创文章的重要性和唯一性.在我看来,好的原创文章必

总结分享:新手如何写出高质量的原创文章

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 面对如今层出不穷的百度算法,更多站长朋友们从原先的追求高质量外链,逐步转向优质可读性强的内容上来,如何创作出更多的原创性文章,以及对众多读者能够产生更多的共鸣,是如今众多站长朋友在不断苦思冥想的.特别是对于刚刚迈入SEO这一行业大门的新手朋友们,何为原创.如何原创.该把握哪些方面技巧,已经成为大家是否能够真正掌握SEO这门艺术的重要三方面.