没有合适的资源?快使用搜索试试~ 我知道了~
在本教程中,我们将深入探讨如何使用Java、MyEclipse和Tomcat来实现Servlet和DAO(数据访问对象)模式下的数据库操作,特别是针对增删改查(CRUD)功能。我们需要理解整个项目的结构。
项目结构遵循DAO设计模式,其中`bean`文件夹包含了业务实体类,例如`TrainManage.java`,它封装了与数据库表`TrainManage`相关的属性和getter、setter方法。`DAO`文件夹包含了对应的DAO类,如`TrainManageDAO.java`,负责处理与`TrainManage`表的数据库交互。`util`文件夹则包含`JDBCConnect.java`,这是用于建立和管理数据库连接的工具类。`servlet`部分则处理HTTP请求,尤其是POST请求,用于接收和处理用户表单提交的数据。
在开始数据库操作之前,需要确保MySQL数据库已初始化。这包括创建数据库`ManageTrain`,并使用该数据库。接着,创建车次信息管理表`TrainManage`,定义了车次ID、出发地、目的地、行车时间、硬座票价、软座票价、硬卧票价、软卧票价以及车辆路线等字段。为了防止乱码,所有字符集应设置为`utf-8`。
在完成数据库表结构后,我们可以通过DAO实现简单的查询操作。例如,`TrainManageDAO`可以包含一个查询所有车次的方法,返回`TrainManage`对象列表。这通常涉及到打开数据库连接,执行SQL查询(如`SELECT * FROM TrainManage`),将结果集转换为业务对象列表,然后关闭连接。
在MyEclipse中,创建一个新的Web Project,命名为“TrainDatabase”。项目中应该包含Servlet来处理用户请求,这些Servlet会调用DAO方法来获取、更新、插入或删除数据。例如,一个Servlet可能会接收POST请求,解析表单数据,然后调用`TrainManageDAO`的相应方法来执行数据库操作。
运行项目后,用户可以通过Web界面看到火车车次的查询结果,这可能是通过JSP页面展示的。每个车次的信息(如车次ID、出发地、目的地等)会被传递到JSP页面上,并以表格形式呈现。
值得注意的是,虽然这个示例提供了一个基础的数据库操作框架,但它并没有涵盖高级特性,如事务处理、触发器、存储过程或并发控制。此外,也没有涉及流行的Java Web开发框架,如Struts、Hibernate和Spring,这些框架能够简化数据库操作和业务逻辑的实现。不过,对于初学者来说,这个基础已经足够理解基本的JSP网站开发流程和数据库操作。通过这个系列的文章,读者应该能够构建一个简单的基于数据库操作的JSP应用程序,为更复杂的项目打下坚实的基础。
Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作
置顶
Eastmount
32231
收藏
14
2015-05-24 05:16:55
展开
此篇文章主要讲述DAO、Java Bean和Servlet实现操作数据库,把链接数据库、数据库操作、前端界面显示分模块
化实现。其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述。参考前文:
Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门
Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
Java+MyEclipse+Tomcat (四)Servlet提交表单和数据库操作
Java+MyEclipse+Tomcat (五)DAO和Java Bean实现数据库和界面分开操作
免费资源下载地址:
http://download.csdn.net/detail/eastmount/8733385
PS:这篇文章可以认为是对前面五篇文章的一系列总结和应用,同时我认为理解该篇文章基本就能简单实现一个基于
数据库操作的JSP网站,对你的课程项目或毕设有所帮助!但同时没有涉及事务、触发器、存储过程、并发处理等数据库
知识,也没有Struts、Hibernate、Spring框架知识,它还是属于基础性文章吧!希望对你有所帮助~
一. 项目结构
该项目的结构如下图所示:
这是典型的DAO模式,其中bean文件夹中TrainManage.java类封装了数据库表TrainManage中的属性和get/set操
作;DAO文件夹中TrainManageDAO.java是对类TrainManage(或火车表)的数据库增删改查操作;
util中
JDBCConnect.java主要是连接数据库MySQL的操作;servlet主要是POST方法请求表单。
Python+TensorFlow人工智能
该专栏为人工智能入门专栏,采用Python3和TensorFlow实现人工智能相关算法。前期介绍安装流程、基础语法、
Eastmount
¥9.90
订阅
第1页 共29页
二. 数据库初始化操作
打开MySQL,输入默认超级root用户的密码,然后数据库的操作如下代码:
注意:上面操作在MySQL黑框中输出增删改查的SQL语言就可以,不要把中文注释也执行。同时设置所有编码方式
都统一为utf-8防止乱码,数据库表结构如下图所示:
三. 简单查询操作DAO方法
新建Web Project,项目名为“TrainDatabase”,对火车车次数据库的增删改查。
运行效果如下图所示:
--
创建数据库
create
database
ManageTrain;
--
使用数据库
use
ManageTrain;
--
创建表 车次信息管理表 主键
:
车次
--
属性:车次 出发地 目的地 行车时间 硬座票价 软座票价 硬卧票价 软卧票价 车辆路线
create
table
TrainManage(
trainid
varchar
(
20
) primary
key
,
start
varchar
(
20
),
end
varchar
(
20
),
time
varchar
(
20
),
yzprice
decimal
(
10
,
1
),
rzprice
decimal
(
10
,
1
),
ywprice
decimal
(
10
,
1
),
rwprice
decimal
(
10
,
1
),
root
varchar
(
200
)
);
--
插入数据
insert
TrainManage (trainid,
start
,
end
,
time
,yzprice,rzprice,ywprice,rwprice,root)
values
(
"T87"
,
"Beijing"
,
"Guiyang"
,
"28小时"
,
"278"
,
"320"
,
"464.5"
,
"550"
,
"Beijing Shijiazhuang Guiyang"
);
insert
TrainManage (trainid,
start
,
end
,
time
,yzprice,rzprice,ywprice,rwprice,root)
values
(
"T87"
,
"Guiyang"
,
"Beijing"
,
"28小时"
,
"278"
,
"320"
,
"464.5"
,
"550"
,
"Guiyang Shijiazhuang Beijing"
);
--
查询数据
select
*
from
TrainManage;
第2页 共29页
1.
在src下新建文件夹util,然后添加类JDBCConnect.java。代码如下:
主要是调用getConnection(url, userName, password)方法进行连接数据库操作,数据库的名称为TrainManage,
默认的连接对象为root,密码为123456。同时定义两个函数executeUpdate()执行无参数的SQL语句操作和有参数的SQL
语句操作。
package
util;
import
java.sql.*;
import
com.mysql.jdbc.Driver;
public
class
JDBCConnect
{
//
获取默认数据库连接
public
static
Connection
getConnection
()
throws
SQLException
{
return
getConnection(
"ManageTrain"
,
"root"
,
"123456"
);
//
数据库名 默认用户 密码
}
//
连接数据库
参数
:
数据库名
root
登录名 密码
public
static
Connection
getConnection
(String dbName, String userName,
String password)
throws
SQLException {
String url =
"jdbc:mysql://localhost:3306/"
+ dbName
+
"?characterEncoding=utf-8"
;
//
连接
MySQL"com.mysql.jdbc.Driver"
DriverManager.registerDriver(
new
Driver());
return
DriverManager.getConnection(url, userName, password);
}
//
设置
PreparedStatement
参数
public
static
void
setParams
(PreparedStatement preStmt, Object... params)
throws
SQLException {
if
(params ==
null
|| params.length ==
0
)
return
;
for
(
int
i =
1
; i <= params.length; i++) {
Object param = params[i -
1
];
if
(param ==
null
) {
preStmt.setNull(i, Types.NULL);
}
else
if
(param
instanceof
Integer) {
preStmt.setInt(i, (Integer) param);
}
else
if
(param
instanceof
String) {
preStmt.setString(i, (String) param);
}
else
if
(param
instanceof
Double) {
preStmt.setDouble(i, (Double) param);
第3页 共29页
2.
在src下新建文件夹bean,然后添加类TrainManage.java。代码如下:
}
else
if
(param
instanceof
Long) {
preStmt.setDouble(i, (Long) param);
}
else
if
(param
instanceof
Timestamp) {
preStmt.setTimestamp(i, (Timestamp) param);
}
else
if
(param
instanceof
Boolean) {
preStmt.setBoolean(i, (Boolean) param);
}
else
if
(param
instanceof
Date) {
preStmt.setDate(i, (Date) param);
}
}
}
//
执行
SQL
,返回影响的行数 异常处理
public
static
int
executeUpdate
(String sql)
throws
SQLException
{
return
executeUpdate(sql,
new
Object[] {});
}
//
带参数执行
SQL
,返回影响的行数 异常处理
public
static
int
executeUpdate
(String sql, Object... params)
throws
SQLException {
Connection conn =
null
;
PreparedStatement preStmt =
null
;
try
{
conn = getConnection();
preStmt = conn.prepareStatement(sql);
setParams(preStmt, params);
return
preStmt.executeUpdate();
//
执行
SQL
操作
}
finally
{
if
(preStmt !=
null
)
preStmt.close();
if
(conn !=
null
)
conn.close();
}
}
}
package
bean;
public
class
TrainManage
{
private
String trainid;
//
车次
private
String start;
//
出发地
private
String end;
//
目的地
private
String time;
//
行车时间
private
float
yzprice;
//
硬座票价
private
float
rzprice;
//
软座票价
private
float
ywprice;
//
硬卧票价
private
float
rwprice;
//
软卧票价
private
String root;
//
车辆路线
public
String
getTrainid
()
{
return
trainid; }
public
String
getStart
()
{
return
start; }
public
String
getEnd
()
{
return
end; }
public
String
getTime
()
{
return
time; }
public
Float
getYzprice
()
{
return
yzprice; }
public
Float
getRzprice
()
{
return
rzprice; }
public
Float
getYwprice
()
{
return
ywprice; }
public
Float
getRwprice
()
{
return
rwprice; }
public
String
getRoot
()
{
return
root; }
第4页 共29页
3.在src下新建文件夹DAO,然后添加类StudentDAO.java。代码如下:
通常DAO(Data Access Object)数据访问对象是负责与数据库连接,主要功能执行对数据表的CUDR操作(创
建、更新、删除、查询)。
每个数据表都定义一个DAO接口或类实现,实现对此表的读写操作。换句话说,就是在域名.
项目.模块.dao文件夹下创建个DAO类即可。
public
void
setTrainid
(String str)
{
this
.trainid = str; }
public
void
setStart
(String str)
{
this
.start = str; }
public
void
setEnd
(String str)
{
this
.end = str; }
public
void
setTime
(String str)
{
this
.time = str; }
public
void
setYzprice
(Float price)
{
this
.yzprice = price; }
public
void
setRzprice
(Float price)
{
this
.rzprice = price; }
public
void
setYwprice
(Float price)
{
this
.ywprice = price; }
public
void
setRwprice
(Float price)
{
this
.rwprice = price; }
public
void
setRoot
(String str)
{
this
.root = str; }
}
package
DAO;
import
java.sql.Connection;
import
java.sql.PreparedStatement;
import
java.sql.ResultSet;
import
java.sql.Statement;
import
java.util.ArrayList;
import
java.util.List;
import
bean.TrainManage;
import
util.JDBCConnect;
public
class
TrainManageDAO
{
//
插入车次
public
static
int
insert
(TrainManage train)
throws
Exception
{
String sql =
"INSERT INTO TrainManage
(trainid,start,end,time,yzprice,rzprice,ywprice,rwprice,root) "
+
"VALUES ('"
+ train.getTrainid() +
"','"
+ train.getStart() +
"','"
+
train.getEnd() +
"','"
+ train.getTime() +
"','"
+ train.getYzprice() +
"','"
+ train.getRzprice()
+
"','"
+ train.getYwprice() +
"','"
+ train.getRwprice() +
"','"
+ train.getRoot()
+
"');"
;
System.out.println(sql);
return
JDBCConnect.executeUpdate(sql);
/**
*
总是报错
No value specified for parameter 5
*
很多原因是
insert into train (?,?,?) values (?,?,?)
前面不应该是问号
*
但我的怀疑是参数过多使用
executeUpdate(sql,?,?,?...)
方法是错误
*
* String sql = "INSERT INTO TrainManage
(trainid,start,end,time,yzprice,rzprice,ywprice,rwprice,root) VALUES (?,?,?,?,?,?,?,?,?);";
* System.out.println(sql);
* return JDBCConnect.executeUpdate(sql, train.getTrainid(), train.getStart(),
train.getEnd(),
* train.getTime(), train.getYzprice(), train.getRzprice(), train.getYwprice(),
* train.getRwprice(), train.getRoot());
*/
}
//
更新车次
public
static
int
update
(TrainManage train)
throws
Exception
{
String sql =
"UPDATE TrainManage SET start = ?, end = ? WHERE trainid = ? "
;
return
JDBCConnect.executeUpdate(sql, train.getStart(), train.getEnd(), train.getTrainid());
}
//
删除操作
public
static
int
delete
(String id)
throws
Exception
{
String sql =
"DELETE FROM TrainManage WHERE trainid = ? "
;
第5页 共29页
剩余28页未读,继续阅读
资源推荐
资源评论
5星 · 资源好评率100%
5星 · 资源好评率100%
5星 · 资源好评率100%
5星 · 资源好评率100%
5星 · 资源好评率100%
117 浏览量
2016-06-12 上传
2009-11-22 上传
161 浏览量
2018-11-06 上传
2022-08-03 上传
5星 · 资源好评率100%
2017-08-03 上传
186 浏览量
5星 · 资源好评率100%
2011-03-04 上传
125 浏览量
2022-11-23 上传
2022-08-03 上传
165 浏览量
181 浏览量
5星 · 资源好评率100%
5星 · 资源好评率100%
101 浏览量
资源评论
Xhinking
- 粉丝: 29
- 资源: 320
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功