【发布时间】:2022-12-12 18:22:43
【问题描述】:
因此,我必须将播放器添加到列表中,同时将其添加到我的 SQL Server 数据库中,但是表中的添加没有发生,即使列表中的添加没问题。
public class PlayerRepositoryJDBC {
private Connection connection;
private ArrayList<Player> allPlayers = new ArrayList<>();
public ArrayList<Player> getAllPlayers() {
return allPlayers;
}
public void setAllPlayers(ArrayList<Player> allPlayers) {
this.allPlayers = allPlayers;
}
public PlayerRepositoryJDBC() throws SQLException {
String connectionURL = "jdbc:sqlserver://localhost:52448;databaseName=MAP;user=user1;password=1234;encrypt=true;trustServerCertificate=true";
try {
System.out.print("Connecting to the server......");
try (Connection connection = DriverManager.getConnection(connectionURL)) {
System.out.println("Connected to the Server.");
Statement select = connection.createStatement();
ResultSet resultSet = select.executeQuery("SELECT * FROM PlayerMAP");
int count = 0;
while (resultSet.next()) {
count++;
}
if (count > 0) {
ResultSet result = select.executeQuery(" SELECT * FROM PlayerMAP");
while (result.next()) {
Player player = new Player
(result.getString("id"), result.getString("firstName"), result.getString("lastName"), result.getInt("age"), result.getString("nationality"), result.getString("position"), result.getInt("marketValue"));
allPlayers.add(player);
}
} else {
String insert_string = "INSERT INTO PlayerMAP(id, firstName, lastName, age, nationality, position, marketValue) VALUES ('P1','Dan','Mic',18,'Romania','Forward',1250)";
Statement insert = connection.createStatement();
insert.executeUpdate(insert_string);
Player player=new Player("P1","Dan","Mic",18,"Romania","Forward",1250);
allPlayers.add(player);
}
//System.out.println(allPlayers.size());
} catch (Exception e) {
System.out.println("I am not connected to the Server");
e.printStackTrace();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void add(Player entity) throws SQLException {
allPlayers.add(entity);
String id=entity.getId();
String firstName=entity.getFirstName();
String lastName=entity.getLastName();
int age = entity.getAge();
String nationality= entity.getNationality();
String position=entity.getPosition();
int marketValue=entity.getMarketValue();
String insert_string = "INSERT INTO PlayerMAP(id, firstName, lastName, age, nationality, position, marketValue) VALUES ('"+id+"', '"+firstName+"', '"+lastName+"', '"+age+"', '"+nationality+"', '"+position+"', '"+marketValue+"')";
Statement insert = this.connection.createStatement();
insert.executeUpdate(insert_string);
}
那是代码...
所以我希望我的程序在我的列表 allPlayers 中添加一个 Player 类型的对象,它也应该添加到我的数据库中的 PlayerMAP 表中。但是当我检查 SSMS 时,我的表 PlayerMAP 没有任何变化。
【问题讨论】:
-
try (Connection connection定义了一个局部变量,因此您的类变量connection为空。 -
看看at this,它涵盖了在 java 中使用准备好的语句插入 sql 以帮助防止 SQL 注入,它确实提到了 PostgreSQL,但代码与 SQL Server 相同
-
遍历所有玩家来计算他们的效率不是很高:你可以做
SELECT COUNT(1) FROM PlayerMAP。此外,当您只能使用带参数的PreparedStatement时,构建 SQL 语句是一个非常糟糕的主意。 -
事实上,您甚至不需要玩家的数量:您只需要知道是否存在玩家即可。
标签: java sql sql-server