使用JSP和JavaScript更新mysql表

Updating mysql table with JSP and JavaScript

本文关键字:mysql 更新 JavaScript JSP 使用      更新时间:2023-09-26

我是JSP的新手。我正在创建一个显示通知批准的表。它的功能是显示管理员是否批准记录。但是,当我单击Accept按钮时,没有任何更改(页面和数据库都保持为0)。我的代码有错误吗??请帮忙。提前谢谢。

我的JSP文件中的Javascript:

<script language="JavaScript">
function submitaccept(){
    String connectionURL = "jdbc:mysql://localhost/ams";
    Connection connection =null;
    PreparedStatement pstatement = null;
    var sqlstr = "UPDATE notification SET ack_flag = 1 WHERE notification_id = 001;";
    connection = DriverManager.getConnection(connectionURL, "root", "");
    pstatement =connection.prepareStatement(sqlstr);
    pstatement.executeUpdate();
    location.reload(true);
}

我的JSP文件的调用函数:

    <c:choose>
        <c:when test="${row.ack_flag=='0'}">
        <a href="javascript:submitaccept()" >
            Approve</a> | 
        <a href="notification.jsp" > 
            Reject </a>
        </c:when>
        <c:when test="${row.ack_flag=='1'}">
            Approved
        </c:when>
        <c:otherwise>
            Rejected
        </c:otherwise>
    </c:choose>

您的连接有问题。您正在使用javascript连接到数据库,并且已经编写了JDBC的连接代码。

您可以在这里找到如何使用javascript连接到数据库服务器

您不需要在更新语句中提供;,它会将值视为001;而不是001,并将其删除

var sqlstr = "UPDATE notification SET ack_flag = 1 WHERE notification_id = 001";

我从未做过这样的事情,但我认为每当我尝试使用javascript和服务器脚本(如jsp或php)时

我总是使用ajax

所以我的概念就像这个

每当你按下这个按钮,它就会调用javascript函数如您的案例"submitaccept()"

如果我是你,我会尝试像这个一样使用ajax

function submitaccept(){
    //code for getting the notificationid you would like to update
    notifId = document.getElementById('..').value;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var x = xmlhttp.responseText;
            //whatever you want to do after your update is done , where x is the response from updateNotif.jsp
        }
    }
    xmlhttp.open("GET","updateNotif.jsp?notif="+notifId,false);
    xmlhttp.send();
}

然后,我将制作updateNotif.jsp

request.getResponse("notif")

并使用您的代码进行更新

希望它能帮助你:)

虽然您已经收到了问题的答案,但我想指出,您是从java脚本代码中进行DB连接的。这意味着包含连接参数的代码将被发送到客户端,而客户端可能不是您想要存档的。

相反,请确保有一个Servlet被调用,并在那里完成数据库工作。JSP通常应该只获取数据,将其交给servlet,然后接收数据以显示它,但不包含像数据库连接这样的业务逻辑代码。

虽然我还没有验证这个例子:http://www.java-samples.com/showtutorial.php?tutorialid=619我想这会让你有可能尽快归档你想做的事情,而不会把你的连接参数转移到客户端。

我不知道你的JSP,它与我的风格不同,所以你需要从我的中更改它

让我用我的为你做一个新的

试着把它复制到你的新项目中,学习这个概念,这样你就可以解决你的问题

我给你做两页

index.jsp

<html>
<head>
<script> function change(ackFlag){
    var notifId = document.getElementById('myNotifId').value;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var x = xmlhttp.responseText;
            document.getElementById('myNotification').value = x;
        }
    }
    xmlhttp.open("GET","updateNotif.jsp?af="+ackFlag+"&notif="+notifId,false);
    xmlhttp.send();  } </script>
</head>
<body>
    <% String notifID = "001"; String ackFlag = "1"; %>
    <input type='hidden' value='<% out.print(notifID); %>' id='myNotifId' />
    <input id='myNotification' value='<% if(ackFlag.equals("1"))out.print("Accepted");else out.print("Rejected") %>' />
    <input type='button' value='Accept' onclick='change(1)' />
    <input type='button' value='Reject' onclick='change(0)' />
</body>
</html>

updateNotif.jsp

<%
    String notifID = request.getParameter("notif");
    String af = request.getParameter("af");
    //this is the start of your code, i just copied from your code 
    String connectionURL = "jdbc:mysql://localhost/ams";
    Connection connection =null;
    PreparedStatement pstatement = null;
    var sqlstr = "UPDATE notification SET ack_flag = "+af+" WHERE notification_id = " + notifID;
    connection = DriverManager.getConnection(connectionURL, "root", "");
    pstatement =connection.prepareStatement(sqlstr);
    pstatement.executeUpdate();
    //this is the end of your code, once again, this is from your code
    if(af.equals("1"))
        out.print("Accepted");
    else
        out.print("Rejected");
%>

哦,顺便说一句,我甚至还没有编译它,所以如果你对我的代码有任何问题,就把它再次发布在这里,但我很确定它会起作用,所以玩得开心:)