鱼C论坛

 找回密码
 立即注册
查看: 103|回复: 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.对处理的结果进行渲染,最后关闭资源。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-8 15:21:52 | 显示全部楼层
1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写Java代码在jsp里面,连接数据库、
3.在mysql里面创建数据库创建表,在jsp代码里面执行sql语句。
4.对处理的结果进行渲染,最后关闭资源。
想知道小甲鱼最近在做啥?请访问 -> 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`:
<%@ 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-21 21:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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