鱼C论坛

 找回密码
 立即注册
查看: 446|回复: 3

jap

[复制链接]
发表于 2024-11-8 15:17:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 做个开心的码农 于 2024-11-8 15:22 编辑

创建学生数据库student,创建学生信息表message表(sno,sname,birthday,major)、成绩表score(sno,cno, cname ,sscore)并输入数据。创建java web项目,通过表单提交一个学生的成绩,然后查询所有的学生的成绩数据,输出学生学号、姓名、课程名称、成绩值。
1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写Java代码在jsp里面,连接数据库、
3.在mysql里面创建数据库创建表,在jsp代码里面执行sql语句。
4.对处理的结果进行渲染,最后关闭资源。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-11-8 15:18:22 | 显示全部楼层
要创建学生数据库及相关表,并开发一个简单的Java Web应用程序用于提交和查询学生成绩,您可以按照以下步骤进行:

### 第一步:设置数据库

1. **创建数据库**
  
  1. CREATE DATABASE student;
  2.    USE student;
复制代码


2. **创建学生信息表 `message`**
  
  1. CREATE TABLE message (
  2.        sno INT PRIMARY KEY,
  3.        sname VARCHAR(100),
  4.        birthday DATE,
  5.        major VARCHAR(100)
  6.    );
复制代码


3. **创建成绩表 `score`**
  
  1. CREATE TABLE score (
  2.        sno INT,
  3.        cno INT,
  4.        cname VARCHAR(100),
  5.        sscore FLOAT,
  6.        PRIMARY KEY (sno, cno)
  7.    );
复制代码


4. **插入示例数据**
  
  1. INSERT INTO message (sno, sname, birthday, major) VALUES
  2.    (1, 'Alice', '2000-01-01', 'Computer Science'),
  3.    (2, 'Bob', '1999-05-15', 'Mathematics');

  4.    INSERT INTO score (sno, cno, cname, sscore) VALUES
  5.    (1, 101, 'Java', 85.5),
  6.    (1, 102, 'Database', 90.0),
  7.    (2, 101, 'Java', 88.0),
  8.    (2, 103, 'Calculus', 92.5);
复制代码


### 第二步:创建Java Web项目

1. **项目结构**
   - 创建一个Java Web项目,使用Servlet来处理表单提交和查询。
   - 需要使用JSP来创建表单和显示结果。

2. **添加依赖**
   - 确保项目中配置了连接MySQL数据库的JDBC驱动。

3. **实现表单提交**

   - 创建 `index.jsp` 文件,用于输入学生成绩。
   
  1. <form action="SubmitScoreServlet" method="post">
  2.        Student No: <input type="text" name="sno"><br>
  3.        Course No: <input type="text" name="cno"><br>
  4.        Course Name: <input type="text" name="cname"><br>
  5.        Score: <input type="text" name="sscore"><br>
  6.        <input type="submit" value="Submit Score">
  7.      </form>
复制代码


4. **处理表单提交的 Servlet**
   
   - 创建 `SubmitScoreServlet` 用于处理表单提交。
   
  
  1. import java.io.IOException;
  2.    import javax.servlet.ServletException;
  3.    import javax.servlet.annotation.WebServlet;
  4.    import javax.servlet.http.HttpServlet;
  5.    import javax.servlet.http.HttpServletRequest;
  6.    import javax.servlet.http.HttpServletResponse;
  7.    import java.sql.Connection;
  8.    import java.sql.DriverManager;
  9.    import java.sql.PreparedStatement;

  10.    @WebServlet("/SubmitScoreServlet")
  11.    public class SubmitScoreServlet extends HttpServlet {
  12.        protected void doPost(HttpServletRequest request, HttpServletResponse response)
  13.                throws ServletException, IOException {
  14.            String sno = request.getParameter("sno");
  15.            String cno = request.getParameter("cno");
  16.            String cname = request.getParameter("cname");
  17.            String sscore = request.getParameter("sscore");

  18.            try {
  19.                // 连接数据库
  20.                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "password"); // 请使用您的数据库用户名和密码
  21.                PreparedStatement ps = conn.prepareStatement("INSERT INTO score (sno, cno, cname, sscore) VALUES (?, ?, ?, ?)");
  22.                ps.setInt(1, Integer.parseInt(sno));
  23.                ps.setInt(2, Integer.parseInt(cno));
  24.                ps.setString(3, cname);
  25.                ps.setFloat(4, Float.parseFloat(sscore));
  26.                ps.executeUpdate();
  27.                conn.close();
  28.            } catch (Exception e) {
  29.                e.printStackTrace();
  30.            }

  31.            response.sendRedirect("ShowScoresServlet");
  32.        }
  33.    }
复制代码


5. **查询成绩的Servlet**

   - 创建 `ShowScoresServlet` 用于查询和展示所有学生的成绩。
   
  
  1. import java.io.IOException;
  2.    import javax.servlet.ServletException;
  3.    import javax.servlet.annotation.WebServlet;
  4.    import javax.servlet.http.HttpServlet;
  5.    import javax.servlet.http.HttpServletRequest;
  6.    import javax.servlet.http.HttpServletResponse;
  7.    import java.io.PrintWriter;
  8.    import java.sql.Connection;
  9.    import java.sql.DriverManager;
  10.    import java.sql.ResultSet;
  11.    import java.sql.Statement;

  12.    @WebServlet("/ShowScoresServlet")
  13.    public class ShowScoresServlet extends HttpServlet {
  14.        protected void doGet(HttpServletRequest request, HttpServletResponse response)
  15.                throws ServletException, IOException {
  16.            response.setContentType("text/html;charset=UTF-8");
  17.            PrintWriter out = response.getWriter();

  18.            try {
  19.                // 连接数据库
  20.                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "password");
  21.                Statement stmt = conn.createStatement();
  22.                String sql = "SELECT m.sno, m.sname, s.cname, s.sscore FROM message m JOIN score s ON m.sno = s.sno";
  23.                ResultSet rs = stmt.executeQuery(sql);

  24.                out.println("<table border='1'><tr><th>Student No</th><th>Name</th><th>Course</th><th>Score</th></tr>");
  25.                while (rs.next()) {
  26.                    out.println("<tr><td>" + rs.getInt("sno") + "</td><td>" + rs.getString("sname") + "</td><td>" +
  27.                            rs.getString("cname") + "</td><td>" + rs.getFloat("sscore") + "</td></tr>");
  28.                }
  29.                out.println("</table>");

  30.                conn.close();
  31.            } catch (Exception e) {
  32.                e.printStackTrace();
  33.            }
  34.        }
  35.    }
复制代码


6. **部署并运行**

   - 将项目部署到支持Java Web的应用服务器(如Apache Tomcat)。
   - 访问 `index.jsp` 页面,输入学生成绩并提交,查看提交和查询是否正确显示。

以上步骤可以帮助您创建并运行一个简单的Java Web应用程序来管理学生成绩。如果有其他问题,请随时问我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-8 15:21:52 | 显示全部楼层
1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写Java代码在jsp里面,连接数据库、
3.在mysql里面创建数据库创建表,在jsp代码里面执行sql语句。
4.对处理的结果进行渲染,最后关闭资源。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-8 15:22:10 | 显示全部楼层
做个开心的码农 发表于 2024-11-08 15:21
1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写 ...


要在JSP中直接连接数据库并执行SQL语句,以下是一个简单的例子。这个例子会展示如何连接MySQL数据库,创建数据库和表,插入数据,并查询数据。请注意,在实际项目中,直接在JSP中写JDBC代码不是最佳实践。这通常是在Java Servlet或Java类中完成的,但为了简单起见,这里演示在JSP中。

### 准备工作

1. 确保在项目中添加MySQL JDBC驱动(`mysql-connector-java.jar`)。
2. 确保MySQL服务正在运行,并可以通过正确的用户名和密码进行访问。

### JSP示例代码

下面的代码可以放在一个JSP文件中,比如`database.jsp`:

  1. <%@ page import="java.sql.*" %>

  2. <%
  3.     // JDBC驱动名及数据库 URL
  4.     String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
  5.     String DB_URL = "jdbc:mysql://localhost:3306/";

  6.     // 数据库的用户名与密码,需要根据自己的设置
  7.     String USER = "root";
  8.     String PASS = "password";

  9.     Connection conn = null;
  10.     Statement stmt = null;
  11.     try {
  12.         // 注册 JDBC 驱动
  13.         Class.forName(JDBC_DRIVER);

  14.         // 打开连接
  15.         conn = DriverManager.getConnection(DB_URL, USER, PASS);

  16.         // 执行创建数据库
  17.         stmt = conn.createStatement();
  18.         String sql = "CREATE DATABASE IF NOT EXISTS student";
  19.         stmt.executeUpdate(sql);

  20.         // 选择数据库
  21.         stmt.execute("USE student");

  22.         // 创建学生信息表
  23.         sql = "CREATE TABLE IF NOT EXISTS message ("
  24.                 + "sno INT PRIMARY KEY, "
  25.                 + "sname VARCHAR(100), "
  26.                 + "birthday DATE, "
  27.                 + "major VARCHAR(100) )";
  28.         stmt.executeUpdate(sql);

  29.         // 创建成绩表
  30.         sql = "CREATE TABLE IF NOT EXISTS score ("
  31.                 + "sno INT, "
  32.                 + "cno INT, "
  33.                 + "cname VARCHAR(100), "
  34.                 + "sscore FLOAT, "
  35.                 + "PRIMARY KEY (sno, cno))";
  36.         stmt.executeUpdate(sql);

  37.         // 插入示例数据
  38.         sql = "INSERT INTO message (sno, sname, birthday, major) VALUES "
  39.                 + "(1, 'Alice', '2000-01-01', 'Computer Science'), "
  40.                 + "(2, 'Bob', '1999-05-15', 'Mathematics') "
  41.                 + "ON DUPLICATE KEY UPDATE sname=VALUES(sname)";
  42.         stmt.executeUpdate(sql);

  43.         sql = "INSERT INTO score (sno, cno, cname, sscore) VALUES "
  44.                 + "(1, 101, 'Java', 85.5), "
  45.                 + "(1, 102, 'Database', 90.0), "
  46.                 + "(2, 101, 'Java', 88.0), "
  47.                 + "(2, 103, 'Calculus', 92.5) "
  48.                 + "ON DUPLICATE KEY UPDATE sscore=VALUES(sscore)";
  49.         stmt.executeUpdate(sql);

  50.         // 查询数据并显示结果
  51.         sql = "SELECT m.sno, m.sname, s.cname, s.sscore FROM message m "
  52.             + "JOIN score s ON m.sno = s.sno";
  53.         ResultSet rs = stmt.executeQuery(sql);

  54.         out.println("<table border='1'>");
  55.         out.println("<tr><th>Student No</th><th>Name</th><th>Course</th><th>Score</th></tr>");
  56.         while(rs.next()) {
  57.             int sno = rs.getInt("sno");
  58.             String sname = rs.getString("sname");
  59.             String cname = rs.getString("cname");
  60.             float sscore = rs.getFloat("sscore");

  61.             out.println("<tr>");
  62.             out.println("<td>" + sno + "</td>");
  63.             out.println("<td>" + sname + "</td>");
  64.             out.println("<td>" + cname + "</td>");
  65.             out.println("<td>" + sscore + "</td>");
  66.             out.println("</tr>");
  67.         }
  68.         out.println("</table>");

  69.         // 完成后关闭
  70.         rs.close();
  71.         stmt.close();
  72.         conn.close();
  73.     } catch(SQLException se) {
  74.         // 处理 JDBC 错误
  75.         se.printStackTrace();
  76.     } catch(Exception e) {
  77.         // 处理 Class.forName 错误
  78.         e.printStackTrace();
  79.     } finally {
  80.         // 关闭资源
  81.         try {
  82.             if(stmt != null) stmt.close();
  83.         } catch(SQLException se2) {
  84.         }
  85.         try {
  86.             if(conn != null) conn.close();
  87.         } catch(SQLException se) {
  88.             se.printStackTrace();
  89.         }
  90.     }
  91. %>
复制代码


### 注意事项

1. **错误处理**:建议把JDBC代码移到Java类中,用更好的方式处理异常。
2. **SQL注入**:在生产级应用中,使用PreparedStatement而不是Statement,以防止SQL注入。
3. **资源管理**:确保数据库连接等资源在使用后正确关闭。
4. **项目结构**:通常,JSP负责显示视图,实际的业务逻辑放在Servlet或后端Java类中。

此示例旨在展示基本功能,不适合于实际中的可维护、规范的Java Web应用开发,请根据业务需求进行合理架构设计和优化。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 17:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表