需要的联系QQ:2248557717(收费的)
项目演示地址:演示地址【已经过期,没钱续费】
这是我们javaweb的课程设计,历时2周完成
设计思想
该系统采用了B/S架构,Tomcat9.0作为运行服务yanshi器,基于javaEE标准,以IntelliJ IDEA作为开发环境,数据库采用了MySQL8.0。开发过程利用了MVC开发模式和JSP+JavaBean+Servlet开发模式,该模式便于开发人员设计代码和后期维护,且这三个逻辑可以同时进行,提高了效率,节省了时间,层次分明,结构清晰。
登陆界面
主界面
核心代码
SQLUtil类
package DBUtil;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class SQLUtil {
//执行非查询语句(delete、update、insert)
public static int executeNonQuery(String sqlCmd, Object[] objList) {
Connection conn = null;//数据库连接对象
Statement sm = null;//可执行sql语句的Statement对象
int result = -1;//返回结果,-1为数据操作失败,非-1为操作成功
try {
conn = DBUtil.ConnectionFactory.getConnection();//获取数据库连接对象
if (objList != null)//判断是否有传入参数(也就是判断 Object[] objList 是否为空)
{
PreparedStatement pStatement = conn.prepareStatement(sqlCmd);//创建可执行带参数SQL命令 pStatement对象
//对参数进行赋值
for (int i = 0; i < objList.length; i++) {
pStatement.setObject(i + 1, objList[i]);//获取传入参数的值
}
result = pStatement.executeUpdate();//执行相应命令
} else {//采用字符串拼接方式
conn = DBUtil.ConnectionFactory.getConnection();//获取数据库连接对象
sm = conn.createStatement();//创建可执行sql语句的Statement对象
result = sm.executeUpdate(sqlCmd);//执行相应sql命令,返回更新的条数
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.CloseFactory.close(conn, sm);//关闭相应资源
return result;//如果操作成功,返回的是被影响的行数,否则返回-1,操作失败
}
}
@SuppressWarnings("finally")
//执行查询操作 返回List型的数据集合 (如select *from table/select name,age from table)
public static List<Object> executeQuery(String sqlCmd, Object[] objList) {
Connection conn = null;
Statement sm = null;
ResultSet rSet = null;
List<Object> list = new ArrayList<Object>();
try {
conn = DBUtil.ConnectionFactory.getConnection();//获取数据库连接对象
if (objList != null)//判断是否有参数传入
{
PreparedStatement pStatement = conn.prepareStatement(sqlCmd);//生成PreparedStatement,用于执行T-SQL命令
for (int i = 0; i < objList.length; i++) {
pStatement.setObject(i + 1, objList[i]);//填充占位符
}
rSet = pStatement.executeQuery();//执行查询命令,返回ResultSet
ResultSetMetaData rsmdData = rSet.getMetaData();//得到结果集的结构信息
int column = rsmdData.getColumnCount();//获取返回的单条数据的字段数目
while (rSet.next()) {
Object[] object = new Object[column];//对象数值,用于作为获取单条数据的载体
for (int i = 1; i <= column; i++) {
object[i - 1] = rSet.getObject(i);
}
list.add(object);//将获取的数据添加到集合中
}
} else {
System.out.println("我进入空的之中了");
//conn=DBUtil.ConnectionFactory.getConnection();//获取数据库连接对象
sm = conn.createStatement();//创建Statement对象
rSet = sm.executeQuery(sqlCmd);//执行查询查询命令
System.out.println("rSet =" + rSet);
ResultSetMetaData rsmdData = rSet.getMetaData();
int column = rsmdData.getColumnCount();//获取单条数据中属性个数(如 select name,age from employee)属性为:name,age
while (rSet.next()) {
Object[] object = new Object[column];
for (int i = 1; i <= column; i++) {
object[i - 1] = rSet.getObject(i);
}
list.add(object);//将相应数据添加到集合中
}
}
} catch (Exception e) {
e.printStackTrace();
list = null;
} finally {
DBUtil.CloseFactory.close(conn, sm, rSet);
return list;
}
}
//执行标量操作,返回首行首列的数据 select count(*) from table/select name from table
public static Object excuteScalar(String sqlCmd, Object[] objList) {
Connection conn = null;
Statement sm = null;
ResultSet rSet = null;
Object obj = null;
try {
conn = DBUtil.ConnectionFactory.getConnection();
if (objList != null) {
PreparedStatement pStatement = conn.prepareStatement(sqlCmd);
for (int i = 0; i < objList.length; i++) {
pStatement.setObject(i + 1, objList[i]);//给SQL语句的占位符赋值的,
}
rSet = pStatement.executeQuery();
while (rSet.next()) {
obj = rSet.getObject(1);
break;
}
} else {
conn = DBUtil.ConnectionFactory.getConnection();
sm = conn.createStatement();
rSet = sm.executeQuery(sqlCmd);
while (rSet.next()) {
obj = rSet.getObject(1);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
CloseFactory.close(conn, sm, rSet);
return obj;
}
}
}
ConnectionFactory类
package DBUtil;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
public class ConnectionFactory {
private static String user;
private static String pwd;
private static String url;
private static String driver;
static {
InputStream iStream = ConnectionFactory.class.getClassLoader().getResourceAsStream("DBUtil/db.properties");//读取db.properties配置文件
Properties prop = new Properties();
try {
prop.load(iStream);
user = prop.getProperty("user");//获取配置文件中的user对应的值
pwd = prop.getProperty("pwd");//获取配置文件中的pwd对应的值
url = prop.getProperty("url");//获取配置文件中的url对应的值
driver = prop.getProperty("driver");//获取配置文件中的driver对应的值
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName(driver);//数据库驱动注册
conn = DriverManager.getConnection(url, user, pwd);//获取数据库链接对象
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
CloseFactory类
package DBUtil;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
//方法重载
public class CloseFactory {
//关闭Connection conn,Statement sm
public static void close(Connection conn, Statement sm) {
close(conn);
close(sm);
}
//关闭Connection conn,Statement sm,ResultSet rs
public static void close(Connection conn, Statement sm, ResultSet rs) {
close(conn);
close(sm);
close(rs);
}
//关闭数据库链接对象
public static void close(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭Statement对象
public static void close(Statement sm) {
try {
if (sm != null) {
sm.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭ResultSet对象
public static void close(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
db.properties保存用于数据库连接的文件
user=root
pwd=1855010107
url=jdbc:mysql://127.0.0.1:3306/park_car?serverTimezone=GMT%2B8
driver=com.mysql.cj.jdbc.Driver
数据库设计
用户表:存储用户信息。
角色表:存储角色信息。‘
车位管理表:管理车位信息和车位状态。
车辆记录表:记录车辆进出信息和消费记录。