2010-09-14 106 views
0

开始提供用于在线用户交互的Java Web应用程序。决定使用MySql DB进行数据存储。我已经创建了具有适当/预期数据类型的表格。我的问题是,我一直认为下一步是创建存储过程,如搜索/添加/删除/等等,用户可以从页面中调用。所以在我的Java代码我可以调用程序前:创建Java Web应用程序/ MySql应用程序

CallableStatement cs; 
Try 
{ 
    String outParam = cs.getString(1);  // OUT parameter 

    // Call a procedure with one in and out parameter 
    cs = connection.prepareCall("{call SearchIt(?)}"); 
    cs.registerOutParameter(1, Types.VARCHAR); 
    cs.setString(1, "a string"); 
    cs.execute(); 
    outParam = cs.getString(1);  
} 
catch (SQLException e) { 
} 

,但如果我的应用程序是不是需要的存储过程,因为用户的操作也非常简单,执行简单繁琐的查询。我如何设置我的Java和Sql代码来处理这个问题。我可以在我的代码中使用“选择”或“更新”语句来操纵MySQL数据库中的数据。如果是这样的语法怎么样?

+0

没有直接回答一个例子,但你可能会考虑寻找到使用,而不是Java持久性API(JPA)手工编码与SQL数据库交互。对于实现JPA规范的工具,Hibernate是一个很好的选择。 – 2010-09-14 19:40:03

回答

1

此URL包含有关使用准备好的语句的文档,这些语句是您想要用来避免安全漏洞(SQL注入等)的。

http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html

这里是从页

PreparedStatement updateSales = connection.prepareStatement(
     "UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? "); 
updateSales.setInt(1, 75); 
updateSales.setString(2, "Colombian"); 
updateSales.executeUpdate(): 
0

只要使用Statement或PreparedStatement。

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html

以类似的方式对你做了什么,只要致电:

Statement stm = Connection.createStatement(); 

然后执行SQL:

stm.execute("SELECT * FROM MYTABLE"); 

抢ResultSet和检查出来的结果。

尽管如此 - 就安全性而言这是坏的 - 正如其他人所说的,PreparedStatements是有点更安全,但仍不是100%。老实说,虽然基本的JDBC非常简单,但我真的很讨厌所有围绕代码散布的SQL字符串。如果你想要一些更优雅的东西,可以快速浏览一下休眠模式 - 它隐藏了你的所有琐事,而且安装起来也很容易。

+1

你也应该使用PreparedStatement对象... – atk 2010-09-14 16:25:35

+0

我同意atk,你应该使用PreparedStatement并使用为它提供的“set”方法添加参数。 – 2010-09-14 16:27:04

+0

请注意,hibernate也会受到注入缺陷的影响。它可以增加价值,但它不是一颗银子弹。 – atk 2010-09-14 21:42:51