Precisa entrar em contato com QQ: 2248557717 (cobrado)
Endereço de demonstração do projeto: endereço de demonstração [expirou, não há dinheiro para renovar]
Este é o design do nosso curso javaweb, que levou 2 semanas para ser concluído
Idéias de design
O sistema adota a arquitetura B / S, Tomcat9.0 é usado como servidor de execução, baseado no padrão javaEE, IntelliJ IDEA é usado como ambiente de desenvolvimento e o banco de dados usa MySQL8.0. O processo de desenvolvimento usa o modelo de desenvolvimento MVC e o modelo de desenvolvimento JSP + JavaBean + Servlet, que é conveniente para os desenvolvedores projetarem código e pós-manutenção, e essas três lógicas podem ser realizadas ao mesmo tempo, o que melhora a eficiência, economiza tempo , e tem uma hierarquia e uma estrutura claras.
Interface de login
Interface principal
Código do núcleo
Classe 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;
}
}
}
Classe 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;
}
}
Classe 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 salva o arquivo usado para conexão de banco de dados
user=root
pwd=1855010107
url=jdbc:mysql://127.0.0.1:3306/park_car?serverTimezone=GMT%2B8
driver=com.mysql.cj.jdbc.Driver
Design de banco de dados
Tabela do usuário: armazena informações do usuário.
Tabela de funções: armazena informações de funções. '
Tabela de gerenciamento de espaço de estacionamento: gerencie as informações e o status do espaço de estacionamento.
Tabela de registro de veículos: registra informações de entrada e saída de veículos e registros de consumo.