做个开心的码农 发表于 2024-11-8 15:17:57

jap

本帖最后由 做个开心的码农 于 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.对处理的结果进行渲染,最后关闭资源。

FishC 发表于 2024-11-8 15:18:22

要创建学生数据库及相关表,并开发一个简单的Java Web应用程序用于提交和查询学生成绩,您可以按照以下步骤进行:

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

1. **创建数据库**
   CREATE DATABASE student;
   USE student;

2. **创建学生信息表 `message`**
   CREATE TABLE message (
       sno INT PRIMARY KEY,
       sname VARCHAR(100),
       birthday DATE,
       major VARCHAR(100)
   );

3. **创建成绩表 `score`**
   CREATE TABLE score (
       sno INT,
       cno INT,
       cname VARCHAR(100),
       sscore FLOAT,
       PRIMARY KEY (sno, cno)
   );

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

   INSERT INTO score (sno, cno, cname, sscore) VALUES
   (1, 101, 'Java', 85.5),
   (1, 102, 'Database', 90.0),
   (2, 101, 'Java', 88.0),
   (2, 103, 'Calculus', 92.5);

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

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

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

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

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

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

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

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

         response.sendRedirect("ShowScoresServlet");
       }
   }

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

   - 创建 `ShowScoresServlet` 用于查询和展示所有学生的成绩。
   
   import java.io.IOException;
   import javax.servlet.ServletException;
   import javax.servlet.annotation.WebServlet;
   import javax.servlet.http.HttpServlet;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import java.io.PrintWriter;
   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.ResultSet;
   import java.sql.Statement;

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

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

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

               conn.close();
         } catch (Exception e) {
               e.printStackTrace();
         }
       }
   }

6. **部署并运行**

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

做个开心的码农 发表于 2024-11-8 15:21:52

1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写Java代码在jsp里面,连接数据库、
3.在mysql里面创建数据库创建表,在jsp代码里面执行sql语句。
4.对处理的结果进行渲染,最后关闭资源。

FishC 发表于 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`:

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

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

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

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

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

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

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

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

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

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

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

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

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

            out.println("<tr>");
            out.println("<td>" + sno + "</td>");
            out.println("<td>" + sname + "</td>");
            out.println("<td>" + cname + "</td>");
            out.println("<td>" + sscore + "</td>");
            out.println("</tr>");
      }
      out.println("</table>");

      // 完成后关闭
      rs.close();
      stmt.close();
      conn.close();
    } catch(SQLException se) {
      // 处理 JDBC 错误
      se.printStackTrace();
    } catch(Exception e) {
      // 处理 Class.forName 错误
      e.printStackTrace();
    } finally {
      // 关闭资源
      try {
            if(stmt != null) stmt.close();
      } catch(SQLException se2) {
      }
      try {
            if(conn != null) conn.close();
      } catch(SQLException se) {
            se.printStackTrace();
      }
    }
%>

### 注意事项

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: jap