我的记录没有插入数据库?

时间:2014-12-20 16:32:22

标签: java mysql jsp servlets

我正在尝试使用Textbox将数据插入数据库,有时它仅使用Internet Explorer插入数据,但不会在Mozilla Firefox中插入数据。

这很奇怪.....

我的数据有时会上传,但只能使用Internet Explorer,有时会停止工作。请帮助那是什么意思?

这是我的代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
<script type="text/javascript" >
$(function() {
    $(".update_button").click(function() {

    var boxval = $("#content").val();
    var dataString = 'content='+ boxval;

    if(boxval=='')
    {
        alert("Please Enter Some Text");
    }
    else
    {
    $.ajax({
        type: "POST",
        url: "demo.jsp",
        data: dataString,
        cache: false
        });
    }
    });
});
</script>

</head>
<body>
    <div>
        <form method="post" name="form" action="">
            <h3>What are you doing?</h3>
            <textarea name="content" id="content" ></textarea><br />
            <input type="submit" value="Update" name="submit" class="update_button" />
        </form>
    </div>

    <%
    try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/poststatus", "root", "1234");
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from messages order by msg_id desc");
            while(rs.next()){
                String msg=rs.getString("msg");
    %>
            <ol id="update" class="timeline"><%=msg %></ol>
<%
            }
    }
    catch(Exception e){
        e.printStackTrace();
    }
%>  

</body>
</html>

这是我的demo.jsp

<%@ page import="java.sql.*" errorPage="" %>

<%
    String content=request.getParameter("content");
    try{
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/poststatus", "root", "1234");
        Statement st=con.createStatement();
        int i=st.executeUpdate("insert into messages(msg) values('"+content+"')");

        }
        catch(Exception e){
        e.printStackTrace();
    }
%>

是的,我可以从数据库中获取数据..你可以看到我的代码。但是我无法插入数据..

当然,我们将非常感谢帮助!

编辑:

这是我创建的表格:

create database if not exists poststatus;
use poststatus;

create table messages(
    msg_id INT auto_increment,
    msg VARCHAR(1000) NOT NULL,
    primary key(msg_id)
);

1 个答案:

答案 0 :(得分:0)

发送AJAX请求的更新按钮也是表单的提交按钮,因此当您单击它时,它会开始提交表单,该表单将导航离开当前页面,在运行AJAX请求之前切断代码。

将点击处理程序的开头修改为:

$(".update_button").click(function(e) {
    e.preventDefault();

在事件上调用preventDefault()会阻止表单提交,从而为您的AJAX函数提供运行的机会。


此外,Java代码存在严重问题;因为该值是使用字符串连接插入的,所以它会创建一个明显的SQL注入漏洞,如果某人无辜地键入撇号,也无法工作。变化:

Statement st=con.createStatement();
int i=st.executeUpdate("insert into messages(msg) values('"+content+"')");

为:

PreparedStatement st = con.prepareStatement("insert into messages(msg) values(?)");
st.setString(1, content);
int i = st.executeUpdate();