用Java实现数据库应用系统

基于java实现的数据库管理系统.7z # MySQL 大二下学期,用Java的javadbf4.1jar包辅助开发的数据库管理系统课程设计,模仿了Java的 从.java到.class再到类加载执行的过程对SQL语句进行先编译再执行,时间有限,,只有一 星期时间,细节方面没考虑很多,代码也没怎么重构,看起来有点凌乱。。。 1.执行过程思路:先根据sql语法把sql字符串切割成各个有效部分,把其相应的封装到运行时实体中, 相当于把.java编译成了.class,再读取dbf文件,执行实体对dbf文件内容进行相应的操作,相当于 类加载执行,实现sql语句的解析执行的过程。 2.实现了create,insert,update,delete,select,多表查询,排序等简单操作和建表约束,界面采用Swing实现。 3.目录下的data存放了系统运行时的相应的dbf文件,logs目录下存放了系统运行日志。 未完成漏洞: 生成的可执行jar因为不存在数据库目录文件夹而无法运行,会提示表不存在 建议在Eclipse下运行,使用JDK1.7 create和between...and...操作由于可能在不需要抛出异常的部分抛出了MyException自定义异常从而 导致这两个部分当前无法执行,由于时间原因未能去查出并修改错误。 立即下载

连接工厂,实现了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
*/
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;
}
catch (Exception e) {
return false;
}
}
}

 

来源:http://blog.youkuaiyun.com/chensheng913/archive/2004/07/11/39256.aspx

Java实现一个简单的数据库系统 Java实现简单数据库 功能:select、 insert(插入后排序)、create、delete等 立即下载

相关推荐

java实现的数据库

java实现的数据库,代码4000多行,供大家参考,四周时间做出来的

Java实现自己的数据库(MeSQL)

一、MeSQL数据库效果 B站视频 Java自己写的数据库MeSQL MeSQL数据库分包图 MeSQL数据库运行图 二、MeSQL数据库涉及知识 MeSQL运用了 IO、网络、面向对象、异常、sql语句 等内容 sql语句规范 1.增加一条数据sql语句 insert into student values(1,‘张三’,18) 2.删除一条数据sql语句 delete from

每天一个前端小知识~ 5288

使用Java实现数据库编程第六章项目.sql

使用Java实现数据库编程第六章案例银行ATM存取款机系统,可供初学者参考

Java 数据库应用系统的实现

Java 语言是Sun MicroSystems 公司于1995年正式命名并推出的一种面向对象的编程语言-OOP(abbr.Object Oriented Programming)。Sun 公司说:Java 程序设计语言被设计成是 by programmers for programmers,其随着 Internet 的发展而广为流行。用它开发的系统“一次开发,到处运行”的特色以及程序开发设计时所

技术资料收集站 1676

使用java实现文章发布系统(含数据库).rar

基本功能包括:网站信息、基础信息、系统管理、个人信息等。本系统结构如下: (1)网站信息: 网站介绍 文章管理:实现添加文章,查询文章功能 文章评论管理:实现根据评论信息查询功能 联系我们:实现对公司信息的修改功能 网站公告:实现对网站公告的修改功能 留言板:实现对留言的回复、删除功能 (2)基础信息: 会员管理:实现对会员的显示、查询功能 文章类别管理:实现对文章类别的增加、删除、修改、查询功能 (3)系统管理: 添加管理员:实现管理员的添加功能 管理员维护:实现对管理员的修改、删除、查询功能 (4)个人信息: 基本资料管理:实现对个人资料的修改功能 修改登陆密码

(ZOS-API)Matlab控制ZEMAX软件调整光学系统某镜面位姿

所用软件的版本:MatlabR2022a, Zemax OpticStudio2024R1交互扩展功能,Zemax和可以同时打开,操作会比较方便在ZEMAX软件中,调整次镜位置通常有两种方法:1.在次镜前后各添加一个坐标间断面,并修改其“偏心X”“偏心Y”等参数来调整次镜的位姿;2.或者直接在次镜属性选项中设置相关数值。这两种方法对Zernike系数的采集结果无显著影响。

ecilifurt的博客 911

使用Java实现数据库编程

事务、试图、索引、备份和恢复

m0_59317114的博客 1221

DSP28377内存不够用?手把手教你合并RAM/FLASH块,解决CCS20链接器报错

本文详细介绍了在CCS20开发环境中解决DSP28377内存不足问题的方法,通过合并RAM/FLASH块优化CMD文件配置,有效解决链接器报错。文章包含内存布局对比、改写步骤、FreeRTOS集成注意事项及调试技巧,帮助开发者提升内存利用率与项目性能。

weixin_42524762的博客 143

Java开发之数据库基本原理

在现代的程序开发中,大量的开发都用到了数据库。使用数据库可以方便地实现数据的存储及查询,以下对Java的数据库操作技术——JDBC进行学习。 一、JDBC概述 1)JDBC(Java Database Connectivity,Java数据库连接),提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便地实现多种关系数据库的统一操作,它由一组用Java语句编写的类和接口组成。

Second的专栏 2465

Android:Google三方库之Adjust集成详细步骤

Android为APP添加google adjust功能

学习就是我的个性 4473

用Java实现森林冰火人游戏

g.drawString("游戏结束", CELL_SIZE * COLS / 2 - 100, CELL_SIZE * ROWS / 2);g.drawString("难度级别: " + difficultyLevel, 10, CELL_SIZE * ROWS + 60);g.drawString("生命值: " + playerHealth, 10, CELL_SIZE * ROWS + 20);setTitle("森林冰火人");

2401_82778412的博客 1734

[转载]Java 数据库应用系统的实现

Java 数据库应用系统的实现Java 语言是Sun MicroSystems 公司于1995年正式命名并推出的一种面向对象的编程语言-OOP(abbr.Object Oriented Programming)。Sun 公司说...

congji3817的博客 1300

告别手写代码!用Simulink给TI F28335 DSP自动生成C代码(保姆级环境配置)

本文详细介绍了如何利用Simulink为TI F28335 DSP自动生成C代码,告别传统手写代码的低效与错误。通过保姆级环境配置指南和实战案例,帮助开发者快速掌握模型驱动开发方法,大幅提升嵌入式开发效率,特别适合需要频繁修改算法参数或团队协作的工程师。

weixin_30388677的博客 416

《数据库应用系统实践》------ 屈臣氏数据管理系统

可以对用户信息、会员信息、部门信息、商品信息、供应商信息、购买信息、供应信息、销售信息进行查询以及增删改查的操作。.基本要素(符号介绍说明)① 矩形:表示实体。② 椭圆形:表示属性,即实体的属性。③ 菱形:表示联系。④ 连线:该连线为没有方向的线段,分为连接实体与属性(矩形与椭圆形之间的连线)和连接实体与联系名(矩形与菱形之间的连线);实体与联系名的连线旁需标注联系的类型,如1:1、1:n、m:n。(可选,200字左右的小结,包括(1)完成情况和不足之处(2)心得体会。

葫芦娃的博客 1044

一文快速教你如何下载国自然模版

5. 成功进入“相关文件查看”页面后,点击左侧的“项目申请文件“,如果你此次申请的是“面上项目”,选择对应的下拉框,找到对应的模版下载即可。6. 🫑们发现,在当前页面点击“青年科学基金项目”,左侧出现的是“原国家杰出青年科学基金项目”。7. 进入下一页后,点击“青年科学基金项目”,便可以在右侧找到🫑们要找的模版啦。2. 成功登陆后,点击1处的“首页”,在首页界面,再点击2处的“项目批准”。8. 点击上图3处的“文件详情”,就可以找到可以下载的模版啦(如下图)。3. 从“项目批准”进入后,点击“管理”。

薰珞婷紫小亭子的博客 2396

【ComfyUI】Wan2.2 Animate 动作迁移重绘视频生成

本文介绍了一个基于ComfyUI的Wan2.2 Animate视频生成工作流,通过动作迁移和视频重绘技术实现高质量视频创作。该系统融合视频帧重建、动作迁移、图像重绘和音频合成等多种AI技术,核心采用Wan2.2 Animate 14B_fp8模型配合专属VAE解码器和LoRA微调模块。工作流程包含输入预处理、模型加载、特征提取、动作采样生成、解码输出和资源清理六个阶段,通过WanVideo系列节点实现从图像/视频输入到最终视频输出的完整处理。系统支持对参考图像进行视觉特征提取和嵌入生成,结合文本/动作嵌入进

Mr数据杨 2444

应用Java技术实现数据库应用系统(收藏)

应用Java技术实现数据库应用系统                                                          本文详细介绍了Java数据库编程的JDBC API及java.sql包。并以 Java 技术设计、开发、实践的一个数据库应用管理系统案例为模板,结合 Java2 平台程序进行说明 Java 面向对象的语言的开发思路、语言特色、安全机制以及案例

水之轮回 1316

Android系统开机时间分析与优化指南

本文系统阐述了Android开机时间优化的全流程技术方案。首先详细解析了从电源键按下到桌面显示的完整启动流程及关键事件序列,然后介绍了秒表计时、日志分析和自动化脚本三种测量方法。重点从底层和上层两个维度提出了具体优化措施:底层包括编译器优化、内核驱动裁剪和日志精简;上层涵盖系统服务参数调整、应用预优化和功能组件精简。最后提供了验证工具和方法,并强调优化需要在性能、功耗和功能间取得平衡。通过这套系统化方案,可有效提升Android设备的开机速度与用户体验。

学无止境 350

应用Java技术实现数据库应用系统

[内容提要] 本文详细介绍了Java数据库编程的JDBC API及java.sql包。并以 Java 技术设计、开发、实践的一个数据库应用管理系统案例为模板,结合 Java2 平台程序进行说明 Java 面向对象的语言的开发思路、语言特色、安全机制以及案例的具体实现步骤、方法及过程等。相信通过本文的介绍,广大的开发者会领略 Java 面向对象语言的风采,深深体会 Java 的开发思想。从而为广大用

taocsdn的专栏 2544

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 论坛收藏整理:C#
下一篇: 用C#轻松地在DOTNET中实现缩略图
bineon
博客等级 码龄24年 5粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值