将jsp表单中的整数插入数据库表中?

Posted

技术标签:

【中文标题】将jsp表单中的整数插入数据库表中?【英文标题】:Insert integer from a jsp form into a database table? 【发布时间】:2012-06-24 12:52:03 【问题描述】:

在下面查看我的代码...

//connect
//reading params from the form
String name = request.getParameter("name");
String year_prime = request.getParameter("year");
int year = Integer.parseInt(year_prime);

//inserting the params into table Students
stmt.executeUpdate("insert into students(name,year) values('"+name+"', year)");

//close connection

我正在尝试获取year 值,即int,并将其插入数据库表中。但是我收到一个错误,INSERT 方法似乎只适用于Strings。有人可以帮我解决这个问题。

【问题讨论】:

您遇到的错误是什么?我希望您已经知道在 JSP 中创建和使用 jdbc 连接通常不是一个好习惯,请注意。如果您可以提供错误或异常的整个堆栈跟踪,那将会很有帮助。谢谢 【参考方案1】:

您应该使用PreapredStatement。从您的帖子中,我可以看到您对 VALUES() 设置的值不正确。

stmt.executeUpdate("insert into students(name,year) values ('" + name + "'," + year ")");

使用 PreparedStatement 执行数据库操作将变得简单而安全:

String sql="insert into students(name,year) values (?,?)";
PreparedStatement statement=cn.prepareStatement(sql);
statement.setString(1,name);
statement.setInt(2,year);
statement.executeUpdate();

【讨论】:

它使用以下语法:stmt.executeUpdate("insert into students(name,year) values ('" + name + "'," + year ")"); :) 好吧,我在我的代码中只使用了一次这个东西,但我也会注意 PreparedStatement,以防万一。非常感谢!【参考方案2】:

以下链接可能会帮助您了解基础知识以及工作示例:

    http://www.tutorialspoint.com/jdbc/jdbc-statements.htm http://www.tutorialspoint.com/jdbc/statement-object-example.htm

虽然我不会推荐,而且在 JSP 中包含 JDBC 连接代码也不是一般的做法,为什么?这是给你的Servlets and Jsp Best Practices。

希望这会有所帮助。

【讨论】:

我在一个名为 ConnectionsManager.java 的 java 文件中建立了连接。我只是在 JSP 中调用它们。在 JSP 中,我调用 connect 方法,最后调用 close 连接方法(即,我将连接返回到该 ConnectionsManager)。错误是: 我尝试使用 executeQuery():javax.servlet.ServletException: java.sql.SQLException: Can not issue data handling statements with executeQuery()。 @KyupaSuria:编辑您的问题以包含错误,以便其他人也可以看到它。请不要在我的回答中加入例外情况:-)【参考方案3】:

使用PreparedStatement 而不是常规的Statement。另外,请使用executeQuery() 而不是executeUpdate()

【讨论】:

我明白了(我还阅读了您发布的链接-谢谢):如果我的主键(在我的情况下为 ID)不是自动增量,我使用以下语法:stmt.executeUpdate( "插入学生(id,name,year) values(1, '"+name+"', year)"); stmt.executeUpdate("插入学生(id,name,year) values(2, '"+name+"', year)"); .............................我可能会使用循环。如果主键是 AUTO INCREMENT 我使用这个语法: stmt.executeUpdate("insert into students(name,year) values('"+name+"', year)");省略“id” @carlspring: executeUpdate() 是在这种情况下使用的正确方法(请参阅docs.oracle.com/javase/1.5.0/docs/api/java/sql/…),并且建议使用PreparedStatement,因为它有很多好处,但在这种情况下@987654328 @ 也可以。 @PrakashK,虽然您对executeUpdate() 的看法可能确实是对的,虽然我当然同意您可以使用普通的Statement,但使用PreparedStatement 会更合理安全性,因为您将避免可能的 SQL 注入攻击,因为这是一个 JSP 页面,这意味着可以传入恶意设计的未转义值,这可能会危及您的系统。因此,我强烈建议您避免使用 regluar Statements,除非您在内部使用它们,并且在不允许外部世界影响您的价值观的范围内使用它们。 @PrakashK:另外,关于executeQuery() / executeUpdate()——我的 JDBC 知识有点生疏,因为现在我们大多数人都在使用像 Hibernate 这样的框架。 :)

以上是关于将jsp表单中的整数插入数据库表中?的主要内容,如果未能解决你的问题,请参考以下文章

用servlet收集表单数据,然后怎么将收集到的数据插入到数据库中

使用 html 表单将数据插入到 wordpress 表中

使用 Web 表单将数据插入到多个表中

如何将数据插入到mysqli中的表中?

如何更改 SQL 插入语句的目标表?

使用JSP(Eclipse)将数据插入数据库(XAMPP,MySQL)