黑狐家游戏

java数据库操作实验报告,javaweb数据库访问技术实验报告

欧气 7 0

本文目录导读:

  1. 实验目的
  2. 实验环境
  3. 实验结果

《JavaWeb数据库访问技术实验报告》

实验目的

1、掌握在JavaWeb环境下连接数据库的基本方法。

2、熟练运用JDBC(Java Database Connectivity)对数据库进行增、删、改、查操作。

java数据库操作实验报告,javaweb数据库访问技术实验报告

图片来源于网络,如有侵权联系删除

3、理解数据库事务处理的概念和实现方式。

4、能够构建简单的JavaWeb应用,实现与数据库的交互功能。

实验环境

1、操作系统:Windows 10

2、开发工具:Eclipse IDE for Java EE Developers

3、数据库管理系统:MySQL 8.0

4、JDBC驱动:mysql - connector - java - 8.0.26

(一)数据库连接

1、在MySQL中创建一个名为testdb的数据库,并创建一个名为users的表,表结构如下:

```sql

CREATE TABLE users (

id INT AUTO_INCREMENT PRIMARY KEY,

username VARCHAR(50),

password VARCHAR(50)

);

```

2、在Java项目中导入JDBC驱动包。

3、编写数据库连接代码:

```java

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DatabaseConnection {

private static final String URL = "jdbc:mysql://localhost:3306/testdb?useSSL = false&serverTimezone = UTC";

private static final String USERNAME = "root";

private static final String PASSWORD = "your_password";

public static Connection getConnection() throws SQLException {

return DriverManager.getConnection(URL, USERNAME, PASSWORD);

}

}

```

(二)数据查询操作

1、编写查询users表中所有用户信息的方法:

```java

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class UserQuery {

public static void queryAllUsers() {

try (Connection connection = DatabaseConnection.getConnection();

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {

while (resultSet.next()) {

int id = resultSet.getInt("id");

String username = resultSet.getString("username");

String password = resultSet.getString("password");

System.out.println("ID: " + id + ", Username: " + username + ", Password: " + password);

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

```

(三)数据插入操作

1、编写向users表中插入新用户的方法:

```java

java数据库操作实验报告,javaweb数据库访问技术实验报告

图片来源于网络,如有侵权联系删除

public class UserInsert {

public static void insertUser(String username, String password) {

try (Connection connection = DatabaseConnection.getConnection();

Statement statement = connection.createStatement()) {

String sql = "INSERT INTO users (username, password) VALUES ('" + username + "', '" + password + "')";

int rowsAffected = statement.executeUpdate(sql);

if (rowsAffected > 0) {

System.out.println("User inserted successfully.");

} else {

System.out.println("Insertion failed.");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

```

(四)数据更新操作

1、编写更新users表中用户密码的方法:

```java

public class UserUpdate {

public static void updatePassword(int id, String newPassword) {

try (Connection connection = DatabaseConnection.getConnection();

Statement statement = connection.createStatement()) {

String sql = "UPDATE users SET password = '" + newPassword + "' WHERE id = " + id;

int rowsAffected = statement.executeUpdate(sql);

if (rowsAffected > 0) {

System.out.println("Password updated successfully.");

} else {

System.out.println("Update failed.");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

```

(五)数据删除操作

1、编写删除users表中用户的方法:

```java

public class UserDelete {

public static void deleteUser(int id) {

try (Connection connection = DatabaseConnection.getConnection();

Statement statement = connection.createStatement()) {

String sql = "DELETE FROM users WHERE id = " + id;

int rowsAffected = statement.executeUpdate(sql);

if (rowsAffected > 0) {

System.out.println("User deleted successfully.");

} else {

System.out.println("Deletion failed.");

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

```

java数据库操作实验报告,javaweb数据库访问技术实验报告

图片来源于网络,如有侵权联系删除

(六)事务处理

1、假设要实现一个转账功能,从一个用户账户转移一定金额到另一个用户账户,这涉及到两个更新操作(一个账户余额减少,另一个账户余额增加),需要在一个事务中完成。

```java

import java.sql.Connection;

import java.sql.SQLException;

import java.sql.Statement;

public class TransactionExample {

public static void transferMoney(int fromUserId, int toUserId, double amount) {

Connection connection = null;

try {

connection = DatabaseConnection.getConnection();

connection.setAutoCommit(false);

Statement statement = connection.createStatement();

// 减少转出账户余额

String sql1 = "UPDATE accounts SET balance = balance - " + amount + " WHERE id = " + fromUserId;

statement.executeUpdate(sql1);

// 增加转入账户余额

String sql2 = "UPDATE accounts SET balance = balance + " + amount + " WHERE id = " + toUserId;

statement.executeUpdate(sql2);

connection.commit();

System.out.println("Transfer successful.");

} catch (SQLException e) {

if (connection!= null) {

try {

connection.rollback();

} catch (SQLException ex) {

ex.printStackTrace();

}

}

e.printStackTrace();

} finally {

if (connection!= null) {

try {

connection.setAutoCommit(true);

connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

}

```

实验结果

1、通过运行UserQuery类中的queryAllUsers方法,可以成功查询到users表中的用户信息。

2、运行UserInsert类的insertUser方法,能够向表中插入新的用户记录,并得到相应的成功或失败提示。

3、执行UserUpdate类的updatePassword方法可以正确更新用户密码,UserDelete类的deleteUser方法也能成功删除指定用户。

4、在TransactionExample类的transferMoney方法测试中,当转账操作正常时,数据库中的账户余额能够正确更新;当出现异常(如模拟数据库连接中断等情况)时,事务能够回滚,保证数据的一致性。

1、收获

- 通过本次实验,深入理解了JDBC在JavaWeb中的重要性和基本使用方法,能够熟练地使用JDBC连接数据库,执行各种SQL操作,这为开发更复杂的JavaWeb应用奠定了基础。

- 掌握了数据库事务处理的概念和实现方式,事务处理在保证数据一致性和完整性方面具有关键作用,尤其是在涉及多个数据库操作时,如转账操作中的余额增减操作。

- 在编写代码过程中,对Java的异常处理机制有了更深入的理解,合理地处理数据库操作中的异常,可以提高应用的稳定性和可靠性。

2、不足与改进

- 在代码编写方面,目前的SQL语句是直接拼接字符串的方式,这种方式存在SQL注入的风险,在实际应用中,应该采用预编译语句(PreparedStatement)来避免SQL注入攻击。

- 在处理数据库连接时,目前的代码没有很好地实现连接池技术,在高并发的应用场景下,频繁地创建和关闭数据库连接会影响性能,未来可以引入数据库连接池框架,如C3P0或Druid,来优化数据库连接管理。

- 对于事务处理,如果涉及到分布式数据库或者多个数据源的情况,目前的本地事务处理方式将不再适用,需要学习和研究分布式事务处理技术,如基于XA协议的事务处理或者使用Seata等分布式事务框架。

标签: #Java #数据库操作 #JavaWeb

黑狐家游戏
  • 评论列表

留言评论