用jsp更新数据库

update database with jsp

本文关键字:数据库 更新 jsp      更新时间:2023-09-26

我尝试使用以下方法从jsp更新mysql数据库中的表:

<form >
<input class="form-control" id="ex1" type="text" name="bt2">
<input type="submit" value="Skicka Tips" onclick="a()">
</form>
<script> function a(){
try
{
  // create a java mysql database connection
  String myDriver = "com.mysql.jdbc.Driver";
  String myUrl = "jdbc:mysql://localhost:3306/studentEnrollment";
  Class.forName(myDriver);
  Connection conn = DriverManager.getConnection(myUrl, "root", "12");
  // create the java mysql update preparedstatement
  String query = "update etudiants set dv_o_math = ? where first_name = ?";
  PreparedStatement preparedStmt = conn.prepareStatement(query);
  preparedStmt.setInt(1, 15);
  preparedStmt.setString(2,request.getParameter("bt2"));
  // execute the java preparedstatement
  preparedStmt.executeUpdate();
  conn.close();
}catch (Exception )
{ }
}

但仍然不起作用。我如何修复代码以获得结果。

Rq:我确实导入了java.sql.*

标记内部编写的代码由客户端机器上的浏览器执行例如:执行客户端验证的JavaScript代码。要连接到数据库,代码必须在服务器上执行,而不是在使用JSP(服务器端脚本语言)的客户端机器上执行。

使用scriptlet标记<%%>以编写在网页被发送到客户端机器/浏览器之前必须在服务器上执行的代码。

您似乎是JSP的初学者。建议您浏览一些在线JSP和Servlet教程。

现在,请尝试使用以下代码:a.html

<form action="FetchData.jsp">
<input class="form-control" id="ex1" type="text" name="bt2" >
<input type="submit" value="Skicka Tips">
</form>

FetchData.jsp

<%@ page import="java.sql.*" %>
<%
try
{
  // create a java mysql database connection
  String myDriver = "com.mysql.jdbc.Driver";
  String myUrl = "jdbc:mysql://localhost:3306/studentEnrollment";
  Class.forName(myDriver);
  Connection conn = DriverManager.getConnection(myUrl, "root", "12");
  // create the java mysql update preparedstatement
  String query = "update etudiants set dv_o_math = ? where first_name = ?";
  PreparedStatement preparedStmt = conn.prepareStatement(query);
  preparedStmt.setInt(1, 15);
  preparedStmt.setString(2,request.getParameter("bt2"));
  // execute the java preparedstatement
  preparedStmt.executeUpdate();
  conn.close();
}catch (Exception e){ }
%>
<h3> The data is successfully updated</h3>

设置onclick="a()"的事实是等待您执行一个Javascript函数,该函数将在客户端而不是服务器端执行,因此在您的情况下,此代码永远不会像您预期的那样工作试着处理这个问题,所以不要把java代码放在标签之间,试着把它放在一个简单的<% "your java code here" %>上,这里是一个开始,试着处理它

<form >
<input class="form-control" id="ex1" type="text" name="bt2">
<input type="submit" value="Skicka Tips" name="a">
</form>

在同一个文件中,你把你的java代码放在一个像这样的涂鸦之间

    <%
    if(request.getParameter("a")!=null){ // this is to avoid null pointer exception
      try{
      // create a java mysql database connection
      String myDriver = "com.mysql.jdbc.Driver";
      String myUrl = "jdbc:mysql://localhost:3306/studentEnrollment";
      Class.forName(myDriver);
      Connection conn = DriverManager.getConnection(myUrl, "root", "12");
      // create the java mysql update preparedstatement
      String query = "update etudiants set dv_o_math = ? where first_name = ?";
      PreparedStatement preparedStmt = conn.prepareStatement(query);
      preparedStmt.setInt(1, 15);
      preparedStmt.setString(2,request.getParameter("bt2"));
      // execute the java preparedstatement
      preparedStmt.executeUpdate();
      conn.close();
    } 
}catch(Exception e ){
e.getMessage();
}
%>

尽管可以从JSP执行数据库操作(正如Shubhi224所展示的),但这并不是您真正想要做的事情。这种方法被称为"模型1"体系结构,会导致显示逻辑("视图")、业务逻辑("模型")和数据库访问代码("存储库")之间出现不希望有的紧密耦合。

正如Java类应该遵守单一责任原则(类应该只有一个更改的原因)一样,JSP也应该只有一项责任:呈现视图。

开发"Model 2"体系结构是为了应对JSP承担过多责任的局限性。模型2也被称为MVC(它实际上是适用于基于http/浏览器的Web架构的MVC)。

我强烈建议研究MVC,以便学习如何正确地分离应用程序中的职责。MVC还经常与控制器服务存储库模式一起使用,通过这种模式,数据库访问代码在存储库类中执行。我建议研究一下这种设计模式。