我尝试使用以下方法从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。*
答案 0 :(得分:1)
标记内写的代码由客户端计算机上的浏览器执行Eg:用于执行客户端验证的JavaScript代码。要连接到数据库,代码必须在服务器上执行,而不是在您使用JSP的客户机上执行,JSP是服务器端脚本语言。
使用scriptlets标签&lt; %%&gt;编写在将网页发送到客户端计算机/浏览器之前必须在服务器上执行的代码。
好像你是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>
答案 1 :(得分:0)
设置onclick="a()"
的事实正等着你执行一个Javascript函数,它将在客户端而不是服务器端执行,因此在你的情况下,这段代码永远不会像你期望的那样工作
尝试解决这个问题,所以不要把这个java代码放在标签之间,而是试着把它放在scriplet <% "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代码放在像这样的scriplet
之间 <%
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();
}
%>
答案 2 :(得分:0)
虽然可以从JSP执行数据库操作(如Shubhi224所示),这不是你真正想做的事情。这种方法被称为“模型1”体系结构,导致显示逻辑(“视图”),业务逻辑(“模型”)和数据库访问代码(“存储库”)之间不希望的紧密耦合。 / p>
正如您的Java类应遵循单一责任原则(类应该只有一个更改原因),您的JSP也应该只有一个责任:呈现视图。
“模型2”体系结构的开发是为了响应JSP执行过多职责的局限性。模型2也称为MVC(它实际上是适用于基于http /浏览器的Web架构的MVC)。
我强烈建议您研究MVC,以了解如何正确分离应用程序中的职责。 MVC还经常与Controller-Service-Repository模式一起使用,从而在您的Repository类中执行数据库访问代码。我也建议研究这种设计模式。