请以java和mysql做一个”管理码头系统“
时间: 2024-01-11 12:03:56 浏览: 29
好的,我可以给你提供一个简单的示例代码,用Java和MySQL实现一个简单的管理码头系统。由于没有具体的需求,所以这个系统只是一个基础的框架,你可以在此基础上进行修改和扩展。
首先,我们需要建立一个MySQL数据库,用于存储码头系统的数据。假设我们已经创建了一个名为"port_management"的数据库,包含两个表:"ship"和"berth",分别用于存储船只和停泊位的信息。以下是这两个表的DDL语句:
```sql
CREATE TABLE ship (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
cargo VARCHAR(50) NOT NULL,
berth_id INT(11) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (berth_id) REFERENCES berth(id)
);
CREATE TABLE berth (
id INT(11) NOT NULL AUTO_INCREMENT,
number INT(11) NOT NULL,
capacity INT(11) NOT NULL,
PRIMARY KEY (id)
);
```
接下来,我们需要创建一个Java项目,并添加MySQL驱动程序。在这个项目中,我们将创建两个类:"Ship"和"Berth",分别对应数据库中的两个表。这两个类都包含一些基本的属性和方法,用于对船只和停泊位进行管理。
Ship类的实现如下:
```java
import java.sql.*;
public class Ship {
private int id;
private String name;
private String cargo;
private int berthId;
public Ship(int id, String name, String cargo, int berthId) {
this.id = id;
this.name = name;
this.cargo = cargo;
this.berthId = berthId;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getCargo() {
return cargo;
}
public int getBerthId() {
return berthId;
}
public void setBerthId(int berthId) {
this.berthId = berthId;
}
public static Ship[] getAllShips() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/port_management", "root", "password");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM ship");
int count = getRowCount(rs);
Ship[] ships = new Ship[count];
int i = 0;
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String cargo = rs.getString("cargo");
int berthId = rs.getInt("berth_id");
ships[i++] = new Ship(id, name, cargo, berthId);
}
return ships;
} catch (SQLException e) {
e.printStackTrace();
return null;
} finally {
closeResultSet(rs);
closeStatement(stmt);
closeConnection(conn);
}
}
public static Ship getShipById(int id) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/port_management", "root", "password");
stmt = conn.prepareStatement("SELECT * FROM ship WHERE id = ?");
stmt.setInt(1, id);
rs = stmt.executeQuery();
if (rs.next()) {
String name = rs.getString("name");
String cargo = rs.getString("cargo");
int berthId = rs.getInt("berth_id");
return new Ship(id, name, cargo, berthId);
} else {
return null;
}
} catch (SQLException e) {
e.printStackTrace();
return null;
} finally {
closeResultSet(rs);
closeStatement(stmt);
closeConnection(conn);
}
}
public void save() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/port_management", "root", "password");
if (id == 0) {
stmt = conn.prepareStatement("INSERT INTO ship (name, cargo, berth_id) VALUES (?, ?, ?)", Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, name);
stmt.setString(2, cargo);
stmt.setInt(3, berthId);
stmt.executeUpdate();
rs = stmt.getGeneratedKeys();
if (rs.next()) {
id = rs.getInt(1);
}
} else {
stmt = conn.prepareStatement("UPDATE ship SET name = ?, cargo = ?, berth_id = ? WHERE id = ?");
stmt.setString(1, name);
stmt.setString(2, cargo);
stmt.setInt(3, berthId);
stmt.setInt(4, id);
stmt.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeResultSet(rs);
closeStatement(stmt);
closeConnection(conn);
}
}
public void delete() {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost/port_management", "root", "password");
stmt = conn.prepareStatement("DELETE FROM ship WHERE id = ?");
stmt.setInt(1, id);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeStatement(stmt);
closeConnection(conn);
}
}
private static int getRowCount(ResultSet rs) throws SQLException {
int rowCount;
int currentRow = rs.getRow();
if (currentRow == 0) {
rs.last();
rowCount = rs.getRow();
rs.beforeFirst();
} else {
rowCount = currentRow;
}
return rowCount;
}
private static void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeStatement(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
Berth类的实现与Ship类类似,这里不再赘述。
最后,我们需要创建一个包含main方法的类,用于测试这些类的功能。以下是一个简单的示例:
```java
public class Main {
public static void main(String[] args) {
Ship[] ships = Ship.getAllShips();
for (Ship ship : ships) {
System.out.println(ship.getName() + " is currently at berth " + ship.getBerthId());
}
Ship ship1 = new Ship(0, "Cargo Ship 1", "Oil", 2);
ship1.save();
Ship ship2 = Ship.getShipById(1);
ship2.setBerthId(3);
ship2.save();
Ship ship3 = Ship.getShipById(2);
ship3.delete();
}
}
```
这个示例程序会输出当前所有船只的信息,并进行一些简单的添加、修改和删除操作。当然,这只是一个简单的示例,实际应用中可能需要更多的功能和安全性措施。