log1

以后遇到的问题,以及解决思路都要坚持记载下来!这是第一篇!

Q1、我负责处理java程序中与数据库交互的问题。今天在实现管理员的登录认证类

LoginCertify 时,注意到客户端程序一旦运行就离不开数据库,那么就很有必要保持java程序与数据库的连接,因为加载驱动和建立连接也是一个相当耗时的过程,如果能够做到一次连接、多次查询、修改、插入,就大大提高了程序的效率。

我决定将加载驱动、建立连接和其他操作分离开来,专门有一个类负责加载驱动和建立连接。连接的关闭在管理员退出时执行。

Q2、我在做加载驱动和建立连接时,发现又一个弊端:我的程序只能在sqlserver 2005上运行。

经过与其他成员的讨论,决定让用户自定义机器上安装的数据库类型。然而,我们不能把建立数据库、建表这样繁琐的工作交给用户,即使用户乐意这样做也会导致程序无法运行,因为数据库中的表名以及列名都已经定下来了。那么,建立数据库、建表的工作应该交给程序来做,而数据库的版本、数据库的名称、数据库的驱动要用户来选择。并且这种选择必须作为初始配置,即用户只需要在第一次使用本软件时做正确的配置。这时,我发现必须将信息存入配置文件了,每次启动软件首先要做的就是检查这个配置文件。如果以前做过配置,则直接载入配置信息;否则,强制用户做配置,别忘了这个软件离不开数据库!

Q3、突然想到以后的JSP页面需要的“热书推荐”功能,数据库中少了一列必需的数据来表示书的热度,赶紧加上!还有图书信息库中有一列数据是图书编号,初步方案是让它自动生成并递增以防止重复,并没有考虑过具体实现,但是在真正建表时才发现在数据库中这叫做标识列,而且只有数据类型是int时才可以设置它的标识属性!

这个专门负责加载驱动和建立连接的类实现代码如下:

package cn.pdsu.rjgc4.six.function; import java.sql.*; public class LinkDatabase { private static String drive = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private static String sqlUser = "sa"; private static String sqlPsd = ""; private static String url = "jdbc:microsoft:sqlserver://localhost:1433;" + "DatebaseName=BooksManagement"; private static Connection connect; private PreparedStatement prestat; private ResultSet resSet; public LinkDatabase() { /* * Constructs a LinkDatabase with tolerant parameters. * these tolerant parameters are: * the Drive of SQLServer is "com.microsoft.jdbc.sqlserver.SQLServerDriver", * the login name of SQLServer administrator is "sa", * the password of SQLServer administrator is "" and * the url of SQLServer is "jdbc:microsoft:sqlserver://localhost:1433; * DatebaseName=BooksManagement" */ /* * 使用默认参数构造 LinkDatabase 。 * 默认参数有:连接数据库的驱动,不设置时默认为"com.microsoft.jdbc.sqlserver.SQLServerDriver"、 * 数据库登录名 "sa"、登录密码 ""、连接的url "jdbc:microsoft:sqlserver://localhost:1433; * DatebaseName=BooksManagement" */ connectToDatabase(); } public LinkDatabase(String sqlDrive, String sqlUserName, String sqlPassword, String url) { /* * Constructs a LinkDatabase with tolerant parameters. */ /* * 使用自定义参数构造 LinkDatabase 。 */ setSQLDrive(sqlDrive); setSQLUser(sqlUserName); setSQLPassword(sqlPassword); setSQLUrl(url); connectToDatabase(); } private void connectToDatabase(){ try { Class.forName(drive); } catch (ClassNotFoundException ne) { System.out.println("sqlserver驱动加载失败!"); ne.printStackTrace(); } try { connect = DriverManager.getConnection(url, sqlUser, sqlPsd); } catch (SQLException se) { System.out.println("数据库访问失败!"); se.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static void setSQLDrive(String sqlDrive) { /* * set the Drive of SQLServer, and it is * "com.microsoft.jdbc.sqlserver.SQLServerDriver" by default */ /* * 设置连接数据库的驱动,不设置时默认为"com.microsoft.jdbc.sqlserver.SQLServerDriver" */ drive = sqlDrive; } public static void setSQLUser(String sqlUserName) { /* * set the login name of SQLServer administrator, * and it is "sa" by default */ /* * 设置连接数据库的登录名,不设置时默认为"sa" */ sqlUser = sqlUserName; } public static void setSQLPassword(String sqlPassword) { /* * set the password of SQLServer administrator, * and it is blank by default */ /* * 设置连接数据库的密码,不设置时默认为空 */ sqlPsd = sqlPassword; } public static void setSQLUrl(String linkUrl) { /* * set the url of SQLServer, * and it is "jdbc:microsoft:sqlserver://localhost:1433; * DatebaseName=BooksManagement" by default */ /* * 设置连接数据库的url,不设置时默认为"jdbc:microsoft:sqlserver:// * localhost:1433;DatebaseName=BooksManagement" */ url = linkUrl; } public static void setConnect(Connection connect) { /* * Rebuild the link to database */ /* * 重建到数据库的连接 */ LinkDatabase.connect = connect; } public Connection getConnect() { /* * Return a link to database */ /* * 返回一个到数据库的连接 */ return connect; } public void setPrestatement(PreparedStatement prestat) { /* * Rebuild a SQL language sentence */ /* * 重设SQL语句 */ this.prestat = prestat; } public PreparedStatement getPrestatement(String sql) { /* * Return a object of PreparedStatement */ /* * 返回一个 PreparedStatement 对象 */ try { setPrestatement(connect .prepareStatement(sql)); } catch (SQLException e) { e.printStackTrace(); } return prestat; } public void setResultSet(ResultSet resSet) { /* * Rebuild a object of ResultSet */ /* * 重设 ResultSet 对象 */ this.resSet = resSet; } public ResultSet getResultSet() { /* * Return a object of ResultSet */ /* * 返回一个 ResultSet 对象 */ return resSet; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值