用Java实现数据库应用系统.doc_第1页
用Java实现数据库应用系统.doc_第2页
用Java实现数据库应用系统.doc_第3页
用Java实现数据库应用系统.doc_第4页
用Java实现数据库应用系统.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用Java实现数据库应用系统(2) 实现连接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 */ 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论