打印本文 打印本文 关闭窗口 关闭窗口
在信息系统中使用Java访问SQLServer数据库
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3434  更新时间:2007/11/14 11:00:54  文章录入:mintao  责任编辑:mintao

在信息系统中使用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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口