转至繁体中文版     | 网站首页 | 文章中心 | 下载中心 | 图片中心 | 笑话频道 | 教程频道 | 会员中心 | 雁过留声 | 
最新公告:     "MinTao学以致用网"欢迎您的光临,你的支持便是我们的动力,欢迎广大网友和各界人士亲临指导,你们的一个小小的建议便是我们发展的开路石!  [MinTao  2007年9月5日]        
您现在的位置: MinTao学以致用网 >> 文章中心 >> 电子课堂 >> 数据库 >> Sql Server >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
sqlserver 2005 如何创建
通过OLEDB读取SQLSERVER
.Net下调用SqlServer2k存
仿递归算法,得到当前部
sqlserver 存储过程、存
[C#]log4net写SQLServer
SQLServer 工具箱(脚本
重建 SQLServer 索引的重
SQLServer 日志文件处理
返回服务器登陆的时间,
更多内容
在信息系统中使用Java访问SQLServer数据库         
在信息系统中使用Java访问SQLServer数据库
作者:qs1976 文章来源:不详 点击数: 更新时间:2007-11-14 11:00:54
bsp;  */
    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);
  }
}

数据基本操作类,使用连接工厂连接数据库。
package skydev.modules.data;
import java.sql.*;
import java.sql.PreparedStatement;
import javax.sql.DataSource;

public abstract class DatabaseObject {
  protected Connection connection = null;
  protected ResultSet resultSet = null;
  protected ResultSetMetaData resultSetMetaData = null;
  private ConnectionFactory connectionFactory = null;
  private java.sql.Statement statement=null;
  private javax.sql.DataSource dataSource;//=new Statement();

  public DatabaseObject(){
    dataSource=null;
    connection=null;
  }

  public DatabaseObject(ConnectionFactory connectionFactory) {
    this.setConnectionFactory(connectionFactory);
    this.dataSource=connectionFactory;//ConnectionFactory实现了DataSource接口
  }

  /**
   * 执行查询
   * @param sql 要执行的Sql语句
   * @return 返回查询的结果集 ,查询失败返回null
   */
  public ResultSet getResultSet(String sql) {
    try {
      this.resultSet = statement.executeQuery(sql); //保留内部指针
    }
    catch (SQLException e) {
      e.printStackTrace();
      this.resultSet = null;
    }
    finally {
      return this.resultSet;
    }
  }

  /**
   * 获取外部指定ResltSet的ResultSetMetaData数据
   * @param resultSet 要获取的ResultSet
   * @return 失败返回null
   */
  public ResultSetMetaData getResultSetMetaData(ResultSet resultSet) {
    ResultSetMetaData resultSetMetaData = null;
    try {
      resultSetMetaData = resultSet.getMetaData();
    }
    catch (SQLException e) {
      e.printStackTrace();
      resultSetMetaData = null;
    }
    finally {
      return resultSetMetaData;
    }
  }

  /**
   * 获取最近一次设置或者返回的ResultSet的ResultMetaData数据,
   * 比方说调用了:getResultSet(sql)方法,然后调用getResultSetMetaData方法
   * 可以获得相应的ResultSetMetaData数据。
   * @return
   */
  public ResultSetMetaData getResultSetMetaData() {
    return this.getResultSetMetaData(this.resultSet);
  }

  /**
   * 执行存储过程
   * @param spName 存储过程名称
   * @return
   */
  public ResultSet Execute(String spName) {
    //对此数据库执行一个 SQL 查询
    ResultSet resultSet = null;
    try {
      // PreparedStatement stmt = (PreparedStatement) connection.createStatement();
      resultSet = statement.executeQuery(spName);
    }
    catch (Exception e) {
      System.out.println("execute error" + e.getMessage());
    }
    return resultSet;
  }

  /**
   * 设置数据库连接工厂,对此类的所有操作之前,必须调用该方法,
   * 设置数据库连接工厂。
   * @param connectionFactory 数据库连接工厂ConnectionFactory 类对象以及
   * 派生类对象。
   */
  public void setConnectionFactory(ConnectionFactory connectionFactory) {
    this.connectionFactory = connectionFactory;
    connection = connectionFactory.getConnection();
    try {
      statement = connection.createStatement();
    }
    catch (SQLException ex) {
      System.err.println(ex);
    }
  }

  public Connection getConnection() {
    return connection;
  }

  public java.sql.Statement getStatement() {
    return statement;
  }
  public javax.sql.DataSource getDataSource() {
    return dataSource;
  }
}


具体项目的数据库访问基类
package skydev.modules.data;
public class DbObject extends DatabaseObject {
 // private final static String driveName = "sun.jdbc.obdc.JdbcOdbcDriver";
  public DbObject() {
    super(new SqlServerConnectionFactory("localhost", 1433, "TheSchool", "sa",""));
  }

  public DbObject(ConnectionFactory connectionFactory) {
    super(connectionFactory);
  }
}

在项目中的数据库层中的数据库访问类都从DatabaseObject类派生,这样只需要在一个地方设置数据连接

,其他地方都不需要涉及数据库访问的具体连接代码。
如:User类专门负责Users组的权限控制等,只需要简单的代码就可以连接并访问数据库了。这里具体实

现与此文章无关,只举一两个模块做例子。
public class User extends DbObject {
  public User() {
    //子类也可以覆盖基类的访问方式,在单机调式时有用。
    // super(new SqlServerConnectionFactory("localhost", 1433, "TheSchool", "sa",""));
    super();//调用基类的数据库访问代码。
  }
/*
   在做信息系统时为了提高客维护性,我们一般使用存储过程返回和修改数据,在数据库层代码不使用

Select语句直接检索数据,做到数据库层代码的最大的灵活性和可维护性。一旦发现需要修改数据库中的

代码,只需要修改村年初过程即可以。
    下面介绍Java使用SqlServer StoreProcedure的方法。
    存储过程的参数使用“?”代替,下面的代码有一定的代表性,存储过程有输入参数,输出参数。
    存储过程的基本功能为:检测userID和encPassword是否和数据库存储的一致,返回UserID,如果不一

致返回-1。
*/
//测试数据库中存储的已经加密的密码和用户传入的加密的密码是否一致。
public boolean testPassword(int userID, byte[] encPassword) {
    Connection con = this.getConnection();
    CallableStatement cs = null;
    try {
      cs = con.prepareCall("{?=call sp_Accounts_TestPassword(?,?)}");
      cs.setInt(2, userID);
      cs.setBytes(3, encPassword);
      cs.registerOutParameter(1, Types.INTEGER); //@UserID
      cs.execute();
      if (cs.getInt(1) == 1) { //密码合格
        return true;
      }
      else {
        return false;
      }
    }
    catch (SQLException ex) {
      return false;
    }
  

上一页  [1] [2] [3] 下一页

文章录入:mintao    责任编辑:mintao 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007 MinTao学以致用网(www.mintao.net) Inc All Rights Reserved.
    QQ:543098146有事请Q我! QQ:261561092有事请Q我 QQ:179647303有事请Q我 MSN:min906@126.com
    站长:MinTao 信息产业部ICP备案号:鄂ICP备07500065号

    学以致用是我们学习者的至高境界和不懈追求,[MinTao学以致用网]与大家共同学习,共同进步……
    信息产业部备案
    *鄂ICP备07500065号