【问题标题】:Updating mysql table with JSP and JavaScript使用 JSP 和 JavaScript 更新 mysql 表
【发布时间】:2013-09-04 07:33:11
【问题描述】:

我是 JSP 的新手。我正在创建一个显示通知批准的表。 它的功能是显示管理员是否批准记录。 但是,当我单击“接受”按钮时,没有任何变化(页面和数据库都保持为 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>

【问题讨论】:

    标签: java javascript mysql jsp


    【解决方案1】:

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

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

    【讨论】:

    • 答案中 Initial Catalog= 是什么意思
    • 初始目录表示您的数据库名称。这个例子是 SQL Server 的。
    • 所以对我来说,它应该是 var connectionstring="Data Source=jdbc:mysql://localhost;Initial Catalog=ams;User ID=root;Password=;Provider=SQLOLEDB";是吗?
    • 您无法使用 javascript 连接到 mysql db,只能连接到 mssql。你必须使用jsp或servlet来连接mysql。
    • 哦,是吗,抱歉愚蠢。但是,您有什么解决方案可以在 JSP 中创建一个超链接来完成更新 mysql 数据库和刷新页面的任务吗?
    【解决方案2】:

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

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

    【讨论】:

    • 已更改但不是解决方案。不过,还是感谢您的帮助
    【解决方案3】:

    我从来没有做过这样的事情,但我想每当我尝试使用像jsp或php这样的javascript和服务器脚本时

    我总是使用 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")

    并使用您的代码更新它

    希望对你有帮助:)

    【讨论】:

    • 这段代码对我来说有点难,你介意根据我的情况改一下吗。我想要的只是将 ack_flag 更改为 1 并刷新页面。
    【解决方案4】:

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

    而是确保有一个 Servlet 被调用并在后面处理您的数据库工作。您的 JSP 通常应该只获取数据,将其交给 servlet 并重新接收数据以显示它,但不包含诸如数据库连接之类的业务逻辑代码。

    虽然我还没有验证这个例子:http://www.java-samples.com/showtutorial.php?tutorialid=619 我认为它可以让你尽可能快地归档你想做的事情,并且不会将你的连接参数传输到客户端。

    【讨论】:

    • 我已经在 J​​SP 中完成了检索记录的工作,但我不知道如何通过简单的单击按钮来更新记录和刷新页面。
    • 您的 JSP 将与任何指向它的请求一起呈现。所以我不知道您当前的状态是什么,但是如果您单击一个按钮来触发您的 JSP 的呈现,那么服务器的相应响应(将包含 Java 脚本代码但没有 JSP 代码)应该包含更新的状态。不幸的是,我从来没有遇到过没有 servlet 的 JSP。所以一般来说,你会有一个请求,你首先在 Servlet 类中使用,这是你更新数据库的地方,然后将任何新数据或消息或其他任何东西转发到 JSP。
    • 您可以快速完成本教程(很遗憾,我没有时间验证它是否有效)。创建一个新项目来执行此操作可能很有意义。我还建议您同时完成这两个部分,这样您就有了第 1 部分,这几乎就是您现在所处的位置,第 2 部分将让您了解如何使用数据库并在之后向浏览器显示新状态(在此教程)删除或添加一行。然后将学到的知识适应您当前的项目,我敢打赌您会在不到 2 小时的时间内完成 :) zetcode.com/tutorials/jeetutorials/mysqldatabase
    【解决方案5】:

    我不知道你的 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");
    %>
    

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

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      相关资源
      最近更新 更多