Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建了一个Java Web应用程序/MySql应用程序_Java_Mysql - Fatal编程技术网

创建了一个Java Web应用程序/MySql应用程序

创建了一个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

开始设计一个用于在线用户交互的java web应用程序。决定使用MySql数据库进行数据存储。我已经创建了具有正确/预期数据类型的表。我的问题是,我一直认为下一步应该是创建存储过程,如Search/Add/Delete/等。。用户可以从该页面取消订阅。因此,在我的java代码中,我可以调用以下过程:

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是一个很好的选择。