【问题标题】:Error while inserting data in MySQL在 MySQL 中插入数据时出错
【发布时间】:2012-04-04 17:31:36
【问题描述】:

当我在 db 表中执行插入时,出现异常,它说:

Data truncation error in mySQL while inserting data..

在:->

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'branchname' at row 1

列类型为varchar

JSP:

<form action="BranchServlet" method="post">
<table align="center">
<tr>
<td align="center" colspan="2"><hr>Add Branch Details<hr></td>
</tr>


<tr>
<td align="left">Branch Name</td>
<td align="center"><input type="text" name="branchname"></td>
</tr>
<tr>
<td align="left">Branch Code</td>
<td align="center"><input type="text" name="branchcode"></td>
</tr>
<tr>
<td align="center">

</td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit" Value="Submit"></td>
</tr>
</table>
</form>

小服务程序:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    {

        String bname = request.getParameter("branchname");
        String bcode = request.getParameter("branchcode");

        BranchModel bm = new BranchModel();
        BranchDAO bd = new BranchDAO();

        bm.setBranchcode(bcode);
        bm.setBranchname(bname);

        bd.insert(bm);

        response.sendRedirect("branches.jsp");
    }

DAO 方法:

public void insert(BranchModel m)
    {
        try{
            Class.forName(driver);
            con = DriverManager.getConnection(url+db,"root","root");
            Statement st = con.createStatement();

            st.executeUpdate("insert into branches values('"+m.getBranchcode()+"','"+m.getBranchname()+"')");
            System.out.println("record inserted");
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

【问题讨论】:

  • 我不想不友善,但发布 HTML 以解决 SQL 数据截断错误似乎无关紧要。在您的帖子中添加紧急信息对您没有好处,这是一个志愿者网站。此外,您的代码可能会受到 SQL 注入攻击。
  • 而且使用像 guyzplz 这样的奇怪词也不会改善感知
  • @RedFilter,仅当Little Bobby Tables 正在使用他的网站时。
  • @a_horse_with_no_name,我是新来的,也没有你这样的经验。
  • @SohelKhalifa:为什么这意味着您不必使用正确的英语单词?您期待免费帮助,因此您至少可以礼貌地使用体面的语言

标签: mysql jakarta-ee servlets


【解决方案1】:

您说该列是 varchar 类型,但不是 varchar 的大小。这似乎是你问题的根源。我没有看到任何对文本输入大小进行限制的验证。输入验证需要将输入大小限制为相应 varchar 列的大小。

【讨论】:

  • 就像 RedFilter 说的,这很容易被注入。
  • 是的,你是对的.. 问题在于字段的大小,而不是它的类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2017-09-26
  • 2013-04-25
相关资源
最近更新 更多