转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
在信息系统中使用Java访问SQLServer数据库         

在信息系统中使用Java访问SQLServer数据库

作者:闵涛 文章来源:闵涛的学习笔记 点击数:3435 更新时间: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]  下一页


[电脑应用]用C#动态创建Access数据库  [Web开发]asp 在线备份与恢复sqlserver数据库代码详解
[电脑应用]教你如何远程管理MSSQL数据库  [其他]手工升级ACCESS到SQLSERVER方法详解
[其他]关于数据库优化查询计划的方法总结  [电脑应用]Linux数据库大比拚
[Web开发]asp+sqlserver 分页方法(不用存储过程)  [JAVA开发]Java连接各种数据库的实例
[聊天工具]QQ IP数据库Build 0825 纯真版__天极Yesky  [系统软件]利用crontab系统每天定时备份MySQL数据库
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

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

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

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

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台