将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表单中的整数插入数据库表中?的主要内容,如果未能解决你的问题,请参考以下文章