ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:18.16KB ,
资源ID:9395829      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9395829.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(用Java实现数据库应用系统.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

用Java实现数据库应用系统.docx

1、用Java实现数据库应用系统我们在做信息系统的时候,都要访问数据库,我最近接手一个项目,项目组决定使用Java编写,我负责数据层的设计和编码,为了提高代码的重用性和提高项目的开发效率。我们开发了一个通用的数据库连接和完成基本操作的类库,个人认为这个类在做MIS系统时还是有一定的价值,所以总结出来,介绍给大家。 连接工厂,实现了DataSource接口 package skydev.modules.data; import java.sql.*; import javax.sql.DataSource; import java.io.PrintWriter; public class Conne

2、ctionFactory 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.con

3、nection = 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() re

4、turn 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.driverN

5、ame = 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) /没有设置连接则创建一个连接 ge

6、tNewConnection(); 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)

7、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.

8、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 数据库名称 * pa

9、ram 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

10、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 =

11、 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 voi

12、d 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 pr

13、ivate 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(o

14、dbcName); 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 Connect

15、ion 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() dataSou

16、rce=null; connection=null; public DatabaseObject(ConnectionFactory connectionFactory) this.setConnectionFactory(connectionFactory); this.dataSource=connectionFactory;/ConnectionFactory实现了DataSource接口 /* * 执行查询 * param sql 要执行的Sql语句 * return返回查询的结果集 ,查询失败返回null */ public ResultSet getResultSet(String

17、 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

18、(ResultSet resultSet) ResultSetMetaData resultSetMetaData = null; try resultSetMetaData = resultSet.getMetaData(); catch (SQLException e) e.printStackTrace(); resultSetMetaData = null; finally return resultSetMetaData; /* * 获取最近一次设置或者返回的ResultSet的ResultMetaData数据, * 比方说调用了:getResultSet(sql)方法,然后调用ge

19、tResultSetMetaData方法 * 可以获得相应的ResultSetMetaData数据。 * return */ public ResultSetMetaData getResultSetMetaData() return this.getResultSetMetaData(this.resultSet); /* * 执行存储过程 * param spName 存储过程名称 * return */ public ResultSet Execute(String spName) /对此数据库执行一个 SQL 查询 ResultSet resultSet = null; try / P

20、reparedStatement stmt = (PreparedStatement) connection.createStatement(); resultSet = statement.executeQuery(spName); catch (Exception e) System.out.println(execute error + e.getMessage(); return resultSet; /* * 设置数据库连接工厂,对此类的所有操作之前,必须调用该方法, * 设置数据库连接工厂。 * param connectionFactory 数据库连接工厂ConnectionFa

21、ctory 类对象以及 * 派生类对象。 */ public void setConnectionFactory(ConnectionFactory connectionFactory) this.connectionFactory = connectionFactory; connection = connectionFactory.getConnection(); try statement = connection.createStatement(); catch (SQLException ex) System.err.println(ex); public Connection ge

22、tConnection() 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.Jd

23、bcOdbcDriver; public DbObject() super(new SqlServerConnectionFactory(localhost, 1433, TheSchool, sa,); public DbObject(ConnectionFactory connectionFactory) super(connectionFactory); 在项目中的数据库层中的数据库访问类都从DatabaseObject类派生,这样只需要在一个地方设置数据连接,其他地方都不需要涉及数据库访问的具体连接代码。 如:User类专门负责Users组的权限控制等,只需要简单的代码就可以连接并访问

24、数据库了。这里具体实 现与此文章无关,只举一两个模块做例子。 public class User extends DbObject public User() /子类也可以覆盖基类的访问方式,在单机调式时有用。 / super(new SqlServerConnectionFactory(localhost, 1433, TheSchool, sa,); super();/调用基类的数据库访问代码。 /* 在做信息系统时为了提高客维护性,我们一般使用存储过程返回和修改数据,在数据库层代码不使用 Select语句直接检索数据,做到数据库层代码的最大的灵活性和可维护性。一旦发现需要修改数据库中的

25、代码,只需要修改村年初过程即可以。 下面介绍Java使用SqlServer StoreProcedure的方法。 存储过程的参数使用“?”代替,下面的代码有一定的代表性,存储过程有输入参数,输出参数。 存储过程的基本功能为:检测userID和encPassword是否和数据库存储的一致,返回UserID,如果不一 致返回-1。 */ /测试数据库中存储的已经加密的密码和用户传入的加密的密码是否一致。 public boolean testPassword(int userID, byte encPassword) Connection con = this.getConnection(); C

26、allableStatement 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; catch (Exception e) return false; 以上只是我在学习和工作中的一点体会,写出来的目的使为了和大家交流,错误之处希望大家提出宝贵的意见,以便把该模块的功能做得更完善一点。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1