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.对处理的结果进行渲染,最后关闭资源。
要创建学生数据库及相关表,并开发一个简单的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 小助理,如未能正确解答您的问题,请继续追问。 1.首先我们连接数据库需要导入jdbc的驱动包。
2.编写Java代码在jsp里面,连接数据库、
3.在mysql里面创建数据库创建表,在jsp代码里面执行sql语句。
4.对处理的结果进行渲染,最后关闭资源。
做个开心的码农 发表于 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]