|
在信息系统中使用Java访问SQLServer数据库 曾青松 zengqingsong@sohu.com QICQ:36951970 2004-2-3
我们在做信息系统的时候,都要访问数据库,我最近接手一个项目,项目组决定使用Java编写,我负
责数据层的设计和编码,为了提高代码的重用性和提高项目的开发效率。我们开发了一个通用的数据库连
接和完成基本操作的类库,个人认为这个类在做MIS系统时还是又一定的价值,所以总结出来,介绍给大
家。
连接工厂,实现了DataSource接口 package skydev.modules.data; import java.sql.*; import javax.sql.DataSource; import java.io.PrintWriter; public class ConnectionFactory implements DataSource { private String userName; private String password; private String driverName; private String url; private java.sql.Connection connection;
/** * 根据设置的连接参数创建一个新的连接实例 * @return */ private Connection getNewConnection() { try { this.connection.close(); //试图关闭连接 } finally { this.connection = null; //释放连接 try { Class.forName(this.driverName); //加载驱动程序 //DriverManager.registerDriver(driver); try { this.connection = DriverManager.getConnection(this.url, this.userName, this.password); } catch (SQLException e) { throw e; } } finally { return this.connection; //返回新建立的连接 } } }
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName = userName; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getDriverName() { return driverName; }
public void setDriverName(String driverName) { this.driverName = driverName; }
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
public java.sql.Connection getConnection() { if (connection != null) { try { if (connection.isClosed()) { connection = null; getNewConnection(); } } catch (SQLException ex) { } } if (connection == null) { //没有设置连接则创建一个连接 getNewConnection(); } return connection; }
public Connection getConnection(String userName, String password) throws SQLException { this.setUserName(userName); this.setPassword(password); return getConnection(); }
public PrintWriter getLogWriter() { return null; }
public void setLogWriter(PrintWriter printWriter) { }
public void setLoginTimeout(int int0) { }
public int getLoginTimeout() { return 0; } }
实现连接SQLServer的连接工厂,这里因为我们的项目使用SQLServer2000所以只实现了
SqlServerConnectionFactory。 package skydev.modules.data; public final class SqlServerConnectionFactory extends ConnectionFactory { private final String dbDriver ="com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String host;//主机 private int port;//端口 private String databaseName;//Sql数据库名称
public SqlServerConnectionFactory() { super.setDriverName(dbDriver); }
/** * * @param host 数据库所在的主机名:如"localhost" * @param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可 * @param databaseName 数据库名称 * @param userName 用户名 * @param password 口令 */ public SqlServerConnectionFactory(String host, int port, String databaseName, String userName, String password) { this.setHost(host); this.setPort(port); this.setDatabaseName(databaseName); this.setUserName(userName); this.setPassword(password); init(); }
private void init() { super.setDriverName(dbDriver); super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" + new Integer(port).toString() + ";DatabaseName=" + databaseName.trim()); //super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"); }
public void setHost(String host) { //处理主机名称 if ( (host == null) || (host.equals("")) || (host.equals(".")) || (host.equals("local"))) { host = "localhost"; } int index = host.indexOf("//", 0); if (index == 0) { host = host.substring(2); //去掉前面的"//" } index = host.indexOf("//", 0); if (index >= 0) { try { throw new Exception("SQL Server主机名参数错误!"); } catch (Exception ex) { } } this.host = host; }
public void setPort(int port) { /** * 缺省端口1433 &n [1] [2] [3] 下一页 [电脑应用]用C#动态创建Access数据库 [Web开发]asp 在线备份与恢复sqlserver数据库代码详解 [电脑应用]教你如何远程管理MSSQL数据库 [其他]手工升级ACCESS到SQLSERVER方法详解 [其他]关于数据库优化查询计划的方法总结 [电脑应用]Linux数据库大比拚 [Web开发]asp+sqlserver 分页方法(不用存储过程) [JAVA开发]Java连接各种数据库的实例 [聊天工具]QQ IP数据库Build 0825 纯真版__天极Yesky [系统软件]利用crontab系统每天定时备份MySQL数据库
|