Java课程设计报告-设备管理系统

设备管理系统
数据库技术
JDBC
SQL语句
1.
项目总体规划
随着社会生产活动中自动化水平越来越高,设备的监控及其数据的存储越来越重要。数据库技术已经成为现代信息技术的重要组成部分,是现在计算机信息系统和计算机应用系统的基础和核心。对于任何一个企业来说,数据是企业重要的资产,如何有效利用这些数据,对于企业发展起着极其重要的作用。随着我国市场经济的迅速发展,在工厂中,为了有效管理各种设备及其在运作过程中产生的数据,开发一个方便高效的管理软件是非常必要的。本系统使用JAVA
语言,结合实际编写了该设备管理系统,可以实现对数据库的准确操作,完成用户的登录、修改密码、添加用户、删除用户,及设备的添加和删除,设备数据的添加、删除和查询等一系列功能。
本系统开始运行时首先进入登陆界面,用户输入正确的用户名及密码后进入主窗体,然后通过点击主窗体的各项菜单进入各项功能。
2.
系统需求分析
2.1用户管理基本功能分析
系统中用户需要正确的密码才能获得能录权限,登录之后可以进行一系列数据操作。
其功能定义如图1所示。
修改密码
删除用户
用户管理
添加用户
图1
2.2设备管理基本功能分析
设备管理可以实现对设备的添加和删除,其功能定义如图2所示。
设备列表
删除设备
添加设备
设备管理
图2
2.3数据管理基本功能分析
数据管理室系统的核心,可以实现对数据的添加、删除及查询,其功能定义如图3所示。
数据管理
查询数据
删除数据
添加数据
图3
3.数据库设计
本系统使用微软公司的ACCESS数据,数据源名称为”
shebei”。根据系统的需求,
经过详细的分析设计,本系统数据库中各个数据表的字段定义和说明如下。
users(用户信息表),存放注册用户的信息,如表1.
表1
users
字段名称
数据类型
大小
描述
username
文本
50
用户名
password
文本
50
密码
shebeilist(设备列表),存放设备列表,如表2.
表2
shebeilist
字段名称
数据类型
大小
描述
id
数字(自动编号)
4
ID号
shebeiname
文本
50
设备名称
shebei1(设备信息表),名为shebei1
的设备的各项数据(程序中每台设备建一个数据表),如表3.
表3
shebei1
字段名称
数据类型
大小
描述
id
数字(自动编号)
4
ID号
dianya
数字
4
电压值
dianliu
数字
4
电流值
zhuangtai
文本
50
状态
guzhangcs
数字
4
故障次数
4.
关键技术和难点
4.1数据库连接
JDBC(Java
Data
Base
Connectivity,java数据库连接)是一种用于执行SQL语句的Java
API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC访问ACCESS有两种方式,一种是JDBC-ODBC桥接式,另一种是ODBC直接方式。本系统使用的是ODBC直接方式。ODBC直接连接方式采用了JDBC直接连接思想。他是在程序中直接指出需要使用的ODBC驱动程序,从而免去了配置数据源的麻烦,提高程序的可移植性。
首先需要加载驱动程序,代码如下:
try
{
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);
}
catch
(ClassNotFoundException
e)
{
System.out.println(“加载驱动程序错误!“+e);
}
然后就可以通过数据源连接到数据库,关键代码如下:
Connection
conn;
Statement
stmt;
ResultSet
rs;
String
url=“jdbc:odbc:Driver={MicroSoft
Access
Driver
(*.mdb)};DBQ=shebei.mdb“;
conn=DriverManager.getConnection(url,““,““);
stmt=conn.createStatement();
rs=stmt.executeQuery(“SELEC*
FROM
users
where
username=“+““+t_name.getText()+““);
rs.close();
stmt.close();
conn.close();
4.2
SQL语句的使用
系统开发过程中关键部分是SQL语句的使用。SQL(Structured
Query
Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。SQL语言包含4个部分:
数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。
数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
数据查询语言(DQL),例如:SELECT语句。
数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。
SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的
SQL接口。它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出。
例如程序中用到的有:
“INSERT
INTO
“+
s
+
“(dianya,dianliu,zhuangtai,guzhangcs)
VALUES
(“+s1+“,“+s2+“,“+s3+“,“+s4+“)““CREATE
TABLE
“+
s
+
“(
id
COUNTER(1,1),dianya
varchar(50),dianliu
varchar(50),zhuangtai
varchar(50),guzhangcs
INTEGER
)““DROP
TABLE
“+
s
“DELETE
FROM
users
WHERE
username
=“+s1
“SELECT
FROM
users
where
username=“+““+t_name.getText()+“““UPDATE
users
SET
password=“+s3+“WHERE
username
=“+s2
5
系统详细设计与实现
5.1用户管理设计与实现
用户管理中最重要的登陆,此时要核对用户名和密码是否一致。关键代码如下:
conn=DriverManager.getConnection(url,““,““);
stmt=conn.createStatement();
rs=stmt.executeQuery(“SELECT
FROM
users
where
username=“+““+t_name.getText()+““);
while(rs.next())
{sname=rs.getString(1);
spass=rs.getString(2);
if(t_name.getText().equals(sname)
t_name.setText(““);
t_pass.setText(““);
myframe
=new
MyFrame();
this.dispose();
break;
}
else
{
l_error.setText(“用户名或密码错误“);
until++;
}
}
5.2设备管理设计与实现
设备管理模块中添加设备实际上是在数据库中新建一个表,删除设备实质上是删除一个表。添加设备关键代码如下:
conn=DriverManager.getConnection(url,““,““);
stmt=conn.createStatement();
rs=stmt.executeQuery(“SELECT
FROM
shebeilist
where
shebeiname=“+““+t_name.getText()+““);
if(rs.next())
{
a1.setText(“设备已经存在,添加失败!“);
}
else
{
String
temp=“INSERT
INTO
shebeilist
(shebeiname)
VALUES
(“+
s1
+
“)“;
stmt.executeUpdate(temp);
String
temp1=“CREATE
TABLE
“+
s
+
“(
id
COUNTER(1,1),dianya
varchar(50),dianliu
varchar(50),zhuangtai
varchar(50),guzhangcs
INTEGER
)“;
stmt.execute(temp1);
a1.setText(“设备添加成功!“);
}
rs.close();
stmt.close();
conn.close();
5.3数据管理设计与实现
此模块是对数据库中某个设备的某一条数据进行操作,添加、删除或查询,其中查询功能关键代码如下:
conn=DriverManager.getConnection(url,““,““);
stmt=conn.createStatement();
if
(s1.equals(“ID“))
{
rs=stmt.executeQuery(“SELECT
FROM
“+
s
+
“WHERE
id
LIKE
“+““+t_guanjian.getText().trim()+““);
}
else
if
(s1.equals(“电压“))
{
rs=stmt.executeQuery(“SELECT
FROM
“+
s
+
“WHERE
dianya
LIKE
“+““+t_guanjian.getText().trim()+““);
}
else
if
(s1.equals(“状态“))
{
rs=stmt.executeQuery(“SELECT
FROM
“+
s
+
“WHERE
zhuangtai
LIKE
“+““+t_guanjian.getText().trim()+““);
}
else
if
(s1.equals(“故障次数“))
{
rs=stmt.executeQuery(“SELECT
FROM
“+
s
+
“WHERE
guzhangcs
LIKE
“+““+t_guanjian.getText().trim()+““);
}
else
if
(s1.equals(“电流“))
{
rs=stmt.executeQuery(“SELECT
FROM
“+
s
+
“WHERE
dianliu
LIKE
“+““+t_guanjian.getText().trim()+““);
}
6
项目测试
本系统在运行调试的过程中遇到很多错误并进行了大量的调试和改正。
1.
连接数据库出错,程序中定义了String
url=“jdbc:odbc:Driver={MicroSoft
Access
Driver
(*.mdb)};DBQ=shebei.mdb“;而我的数据库access使用的是2007版本的,access后缀为accdb,后缀改为mdb后数据库连接正常。
2.
使用组件JPasswordField的方法getPassword用于比较识别用户密码是否正确是出错,原因是该方法返回值为cha[],与数据库中密码数据类型(String)不匹配,比较不出来,把JPasswordField换为TextField使用方法getText后问题解决。
3.
点击菜单后对话框不显示,加入语句setVisible(true)之后问题解决。
4.
程序中sql语句中表名为变量,语句“CREATE
TABLE
s
(
id
COUNTER(1,1),dianya
varchar(50),dianliu
varchar(50),zhuangtai
varchar(50),guzhangcs
INTEGER
)“有错,改为“CREATE
TABLE
“+
s
+
“(
id
COUNTER(1,1),dianya
varchar(50),dianliu
varchar(50),zhuangtai
varchar(50),guzhangcs
INTEGER
)“后问题解决,因为sql语句事实上为一个字符串,变量不能写到引号里,应用加号拼接。
5.
程序中sql语句中数据类型不匹配,如“SELECT
FROM
“+
s
+
“where
id=“+
t_id.getText(),id数据类型为数字,而t_id.getText()为字符串,改为“SELECT
FROM
“+
s
+
“where
id=“+Integer.valueOf(t_id.getText()).intValue()),即把String转换为Integer。
6.
程序中用到下拉菜单,下拉菜单中内容为设备名,可功能中有添加设备的功能,为实现下拉菜单的动态显示,新建了一个表即设备列表,来保存已有的设备名,每次打开下拉菜单是从数据库中读取设备名。
7
参考文献
1.
《Java毕业设计指南与项目实践》
孙更新等
编著.
科学出版社.
2008.3
2.
《Java基础与实例精解》
宾春清
李建瑜
编著.
北京航空航天大学出版社.2009.7
3.
《Java2实用教程》
耿祥义
张跃平
编著.
清华大学出版社.
2006.8
