我们在做信息系统的时候,都要访问数据库,我最近接手一个项目,项目组决定使用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; } } |
| 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 */ if (port < 0) { port = 1433; } this.port = port; } public void setDatabaseName(String databaseName) { this.databaseName = databaseName; } } 使用"sun.jdbc.odbc.JdbcOdbcDriver"连接数据库的连接工厂 package skydev.modules.data; public class JdbcOdbcConnectionFactory extends ConnectionFactory { private final static String driveName = "sun.jdbc.odbc.JdbcOdbcDriver"; private String odbcName; public JdbcOdbcConnectionFactory() { super.setDriverName(driveName); } /** *使用指定的Odbc数据源连接数据库服务器 * @param odbcName */ public JdbcOdbcConnectionFactory(String odbcName) { super.setDriverName(driveName); setOdbcName(odbcName); } public void setOdbcName(String odbcName) { this.odbcName = odbcName; this.setUrl("jdbc:odbc:" + odbcName); } } |
上一页 下一页






