package comoadaoimpl; import javasqlConnection; </SPAN></li>import javasqlPreparedStatement; </SPAN></li>import javasqlResultSet; </SPAN></li>import javasqlSQLException; </SPAN></li>import javasqlStatement; </SPAN></li>import javautilList; </SPAN></li>import javautilMap; </SPAN></li> import orgapachecommonsloggingLog; </SPAN></li>import orgapachecommonsloggingLogFactory; </SPAN></li> import comoacoreDynaForm; </SPAN></li>import comoadaoDao; </SPAN></li>import comoajdbcConnectionFactory; </SPAN></li>import comoajdbcDaoAccessException; </SPAN></li>import comoajdbcDybaBean; </SPAN></li>import comoajdbcJdbcPage; </SPAN></li>import comoajdbcPage; </SPAN></li>import comoajdbcRowsDynaClass; </SPAN></li> / </SPAN></li> 基类DAO,实现一些基本共有方法 @author Gao_wx Mar 26, 2008 / public class BaseDao implements Dao { </SPAN></li> protected Log logger = LogFactorygetLog(BaseDaoclass); </SPAN></li> // 获取数据库链接 </SPAN></li> protected Connection getConnection() { </SPAN></li> return ConnectionFactorygetConnection(); </SPAN></li> } // 在此链接上,根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(Connection conn, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> Statement st = conncreateStatement( ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); ResultSet rs = stexecuteQuery(sql); return getList(rs); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据Result获取List </SPAN></li> protected List<DybaBean> getList(ResultSet rs) throws SQLException { </SPAN></li> RowsDynaClass rsdc = new RowsDynaClass(rs); </SPAN></li> return rsdcgetRows(); </SPAN></li> } // 根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return getList(conn, sql); </SPAN></li> } // 在此连接上,根据sql语句,id加载一条记录 </SPAN></li> protected DybaBean loadById(Connection conn, String sql, int id) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> ResultSet rs = pstexecuteQuery(); List list = getList(rs); if (listsize() > 1) { </SPAN></li> loggerwarn("加载了2条以上的记录,请检查sql:" + sql); </SPAN></li> } if (listsize() == 0) { </SPAN></li> loggerwarn("数据库没有此记录!"); </SPAN></li> return null; </SPAN></li> } else { </SPAN></li> return (DybaBean) listget(0); </SPAN></li> } } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据sql语句,id,加载一条记录 </SPAN></li> protected DybaBean loadById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return loadById(conn, sql, id); </SPAN></li> } // 在此连接上,根据Sql和id删除一条记录,返回影响行数 </SPAN></li> protected int deleteById(Connection conn, String sql, int id) </SPAN></li> throws SQLException { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> int del = pstexecuteUpdate(); </SPAN></li> return del; </SPAN></li> } // 根据sql语句,id删除一条记录 </SPAN></li> protected int deleteById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); try { </SPAN></li> int del = deleteById(conn, sql, id); </SPAN></li> return del; </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } protected Page getPage(DynaForm form, String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); Page page = getPage(conn, form, sql); return page; </SPAN></li> } // 获取分页对象 </SPAN></li> protected Page getPage(Connection conn, DynaForm form, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> int p = formgetInt("p"); </SPAN></li> if (p < 1) { </SPAN></li> p = 1; </SPAN></li> } int size = formgetInt("size"); </SPAN></li> if (size < 10) { </SPAN></li> size = 10; </SPAN></li> } Page page; try { </SPAN></li> page = new JdbcPage(conn, sql, p, size); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } return page; </SPAN></li> } }
就我个人的经验来说,数据库虽然在设计上确实需要有一定的经验,但是它并不是最难的。
对于数据的设计其实是对于现实中业务的一种抽象。
就我的习惯的话,我会先对于现实中的业务场景、业务的角色进行分析。
就拿一般的进销存系统来举例吧。
我有一个对于物料管理的仓库,我需要对我的物料的进销存进行管理。
那么我们就需要分析,没有系统的时候,人与人之间的业务是怎么流转的,他们都是通过哪些表单来进行流转的,上下级之间的消息传递和反馈都是怎么进行的。
当知道了业务以后,我们的数据库无非就是对于现实中的业务的一种具现。
对于业务的设计完成以后,就是针对角色的了。
例如:业务的传递都是在业务人员之间的,我们已经整理表单的传递,那角色其实就已经在这些传递中存在了。
但是,业务的角色是业务的角色,我们还要包括财务的角色,那对于财务来说,他需要在哪些环节看到这些业务的单据?并且需要怎么处理?财务的处理结果又包括哪些?不同的处理结果对于下一步的 *** 作又有什么影响。
当我们把这一切的逻辑整理完成后,我们对于数据库的功能上就已经满足了。
接下来的就是抽象数据的分类了。
例如:我们需要对不同的表进行一个分类,我个人喜欢把表分成三种,一种是基础数据表,一种是过程表,一种是结果表。
怎么解释呢?
基础数据表:顾名思义,就是对于基础数据的维护,哪些可以成为基础数据呢?就是我们的业务发生的各个过程中,这些数据都是可以参与其中的,这就是基础数据。
例如:货物的信息,客户的信息。
过程表:就是仅仅在一个过程中使用的表,当这个过程结束了,这个表就没用了。
例如:订单表,付款单表。他们表示的仅仅是订单从下单到最后关闭的这个过程,关闭以后,这个订单表其实我们就不会再去使用它了。
结果表:这个表的数据有一个特点,只允许添加,不允许删除和修改,这个表的数据本身就是对于一种最终结果的表现。
例如:日志表、账单表。
那我们在进行数据库设计的时候,就需要将这些使用情况考虑进去,将不同功能的表进行分离,尽量降低耦合,让相互表的修改不会影响使用。
例如:收款单,我们需要收一笔款的时候,就会生成这个收款单,当款收到后,这个收款单的功能就结束了。
但现实的情况中,可能财务收到了这笔钱,结束了收款单流程后,他发现填错了,本来应该收100,结果收款单写的110。
但是,收款单表示的是过程,当这个过程结束了,我们就不会再需要上一个收款单了,所以,按照我们业务的处理流程,我们应该先生成一笔冲抵的收款单,例如收到-110,然后再生成新的100的收款单。
我们每个月还会有财务统计报表,财务报表因为和现实中的财务账有关,是绝对不允许变动的,因此,这个财务报表就是一个结果表,我们会按月通过批处理程序,将收款单的明细和统计数据放到另一张表中,感觉好像比较冗余,但是这个确实非常必要的。
因为我曾经就遇到过一个情况,我们直接用过程表来进行数据的统计,然后11月30日有一笔收款已经完成了,结果发现收错了,就重新做了个收款单,结果本来已经出了11月结果的账单发生了变化,导致财务实际的处理出现了问题。
因此,数据的冗余有时候是有必要的,我们需要根据不同表的类型进行一些冗余的设计。
对于数据库设计的考虑点还有很多,可能一时半会儿也说不完,大家如果有什么好的思路,也可以在下方评论或关注我给我留言。
import javasqlConnection;
import javasqlDriverManager;
import javasqlResultSet;
import javasqlStatement;
/
@author dell
/
public class Data {
/
@param args
/
public static void main(String[] args) {
try {
//首先说明:
//1我连接的数据库是SQLserver
//2连接数据库需要相应的驱动,这个你可以在网上找
ClassforName("commicrosoftsqlserverjdbcSQLServerDriver");//注册驱动,
Connection conn = DriverManagergetConnection(
"jdbc:sqlserver://localhost:1434;databaseName=bms", "sa","123" );//1434表示数据库端口号,SQLserver默认是1433,这两个值你都试一下
//"sa"和"123"是数据库登录名和密码
//bms表示你在SQLserver中创建的数据库名
Statement smt = conncreateStatement();
ResultSet result = smtexecuteQuery("select from bookInfo");//执行查询
while(resultnext()){
Object str=resultgetObject(1); //接受返回结果
}
} catch (Exception e) {
eprintStackTrace();
}
}
}
ODBC 连接数据库也不分J2EE ,JSEE啊?????
无论是J2EE还是JSEE都可以用ODBC连接数据库啊。
区别是有的,
J2EE是做Web程序的,他面对的是大量的用户同时访问服务器而且可能同时 *** 作数据库,如果你使用ODBC连接数据库,所有的用户都用同一个连接,频繁的创建销毁资源,这样导致速度很慢,效率低,所以WEB开发一半采用连接池技术,用架构做,现在常用的是Hibernate。
我要是没记错的话
JSEE开发桌面应用程序多,这样可能同时 *** 作的人少,一般一个桌面程序也就一个人在 *** 作,所以用ODBC也就足够了,可是虽然解决了效率的问题但是没有解决面向对象与面向关系的良好沟通。
J2EE ,JSEE后台的数据库连接技术是通用的不分j2ee和JSEE吧
以上就是关于JSPWeb开发中一个关于数据库 *** 作类该这么写,类中要带有查询,增删改,以及关闭数据库 *** 作方法,请高手指全部的内容,包括:JSPWeb开发中一个关于数据库 *** 作类该这么写,类中要带有查询,增删改,以及关闭数据库 *** 作方法,请高手指、对于小白来说web开发最难的部分是数据库的设计吗,数据库的设计有什么技巧、Java web 网页 怎么用 servlet 加 数据库 增删查改音乐 和 视频等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)