创建了一个Java Web应用程序/MySql应用程序
开始设计一个用于在线用户交互的java web应用程序。决定使用MySql数据库进行数据存储。我已经创建了具有正确/预期数据类型的表。我的问题是,我一直认为下一步应该是创建存储过程,如Search/Add/Delete/等。。用户可以从该页面取消订阅。因此,在我的java代码中,我可以调用以下过程:创建了一个Java Web应用程序/MySql应用程序,java,mysql,Java,Mysql,开始设计一个用于在线用户交互的java web应用程序。决定使用MySql数据库进行数据存储。我已经创建了具有正确/预期数据类型的表。我的问题是,我一直认为下一步应该是创建存储过程,如Search/Add/Delete/等。。用户可以从该页面取消订阅。因此,在我的java代码中,我可以调用以下过程: CallableStatement cs; Try { String outParam = cs.getString(1); // OUT parameter // Call a
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代码来处理这个问题。我可以在代码中使用“Select”或“Update”语句来操作MySQL数据库中的数据吗。如果是这样的话,语法会是什么样子?只需使用Statement或PreparedStatement 与您所做的类似,只需调用:
Statement stm = Connection.createStatement();
然后执行SQL:
stm.execute("SELECT * FROM MYTABLE");
抓取结果集并查看结果
但要小心——就安全性而言,这是很糟糕的——正如其他人所提到的,PreparedStatements更安全一些,但仍然不是100%
老实说,虽然基本JDBC非常简单,但我真的很讨厌代码中乱七八糟的SQL字符串。如果您想要更优雅一点的东西,请快速查看hibernate-它对您隐藏了所有的黑客行为,而且安装起来也非常简单。此URL提供了有关使用准备好的语句的文档,这正是您希望使用这些语句来避免安全缺陷(SQL注入等) 下面是该页面中的一个示例
PreparedStatement updateSales = connection.prepareStatement(
"UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");
updateSales.setInt(1, 75);
updateSales.setString(2, "Colombian");
updateSales.executeUpdate():
我同意atk,您应该使用PreparedStatement,并使用为其提供的“set”方法添加参数。请注意,hibernate也存在注入缺陷。它可以增加价值,但它不是一个银弹。不是直接的答案,但是你可以考虑使用java持久化API(JPA)来代替手工编码SQL与数据库的交互。对于实现JPA规范的工具来说,Hibernate是一个很好的选择。