相关疑难解决方法(0)

PreparedStatement如何避免或阻止SQL注入?

我知道PreparedStatements避免/阻止SQL注入.它是如何做到的?使用PreparedStatements构造的最终表单查询是字符串还是其他?

java sql sql-injection jdbc prepared-statement

111
推荐指数
4
解决办法
10万
查看次数

多次重用PreparedStatement

如果将PreparedStatement与没有任何池的单个公共连接一起使用,我是否可以为每个dml/sql操作重新创建一个实例来保证预处理语句的强大功能?

我的意思是:

for (int i=0; i<1000; i++) {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
    preparedStatement.close();
}
Run Code Online (Sandbox Code Playgroud)

代替:

PreparedStatement preparedStatement = connection.prepareStatement(sql);
for (int i=0; i<1000; i++) {
    preparedStatement.clearParameters();
    preparedStatement.setObject(1, someValue);
    preparedStatement.executeQuery();
}
preparedStatement.close();
Run Code Online (Sandbox Code Playgroud)

我的问题是因为我想把这段代码放到多线程环境中,你能给我一些建议吗?谢谢

java jdbc prepared-statement

95
推荐指数
2
解决办法
10万
查看次数

我们什么时候应该使用PreparedStatement而不是Statement?

我知道使用的优点PreparedStatement,这些都是

  • 查询由数据库服务器重写和编译
  • 防止SQL注入

但我想知道我们何时使用它而不是Statement

java database prepared-statement

27
推荐指数
4
解决办法
3万
查看次数

如何防止JSP中的SQL注入?

就在上周,我正在做一些PHP的东西.我做了一些小的解决方案来防止SQL注入.PHP一直是我的男人,它有3个解决方案可供使用(可能更多).一种是使用stripslashes()函数启用"魔术查询" .另一个(推荐)是使用mysql_real_escape_string()功能.那个简单,我的问题就解决了.但是,当谈到JSP时,事情似乎并不那么简单.我搜索并没有找到任何内置函数来删除斜杠或做那些事情(我相信这样的功能可以使用基本的JAVA函数实现,但......).

请帮我保护我的数据库.我听说过PreparedStatement,但真的无法理解我的脑袋?(我觉得新手的真正含义).

java jsp sql-injection jdbc prepared-statement

9
推荐指数
1
解决办法
1万
查看次数

什么时候使用Statement over Prepared Statement?

何时使用语句而不是预备语句.我假设语句用于没有参数的查询,但为什么不使用预准备语句?对于没有参数的查询,哪一个更快.

java database jdbc

9
推荐指数
1
解决办法
7976
查看次数

JDBC - Statement,PreparedStatement,CallableStatement和缓存

我想知道有什么区别,何时使用Statement,PreparedStatementCallableStatement.

使用这些方法的最佳实践和典型方案是什么?

java mysql sql postgresql jdbc

8
推荐指数
1
解决办法
9928
查看次数

与Statement相比,使用Preparedstatement是否有任何缺点

我正想通过JDBC Statement和PreparedStatement之间的差异,看到如此多的优势在这里,并在这里与报表比较的PreparedStatement.

我的一些同事问我们为什么仍然需要Statement以及为什么不考虑PreparedStatement的优点而弃用它.

那么我们还有什么理由在JDBC API中使用Statement吗?

java jdbc prepared-statement

7
推荐指数
1
解决办法
1362
查看次数

PreparedStatement 如何在 Java 内部工作:SQL 的编译和缓存如何工作

我在互联网上阅读了它,但我无法得到某些查询的答案。

一季度。据说在执行PreparedStatement时,DBMS可以直接运行PreparedStatement SQL语句,无需先编译。我的问题是当preparedStetement.execute() 被调用时会发生什么?(我的理解:没有任何参数的sql被发送到DBMS,由DBMS编译和缓存以备将来使用。然后发送参数&DBMS用占位符替换它们&执行。)

Q2。如果下次我使用相同的 sql 执行 PreparedStetement.execute() 那么会发生什么?(我的理解:DBMS 将 sql 与之前的 sql 进行比较,如果匹配则采用编译后的 sql,替换参数并执行。)

Q3。如果我偶尔调用数据库,那么准备好的语句不会帮助我提高性能,因为在此期间数据库缓存将被清除。所以每次都会编译sql。对?

java sql database jdbc prepared-statement

6
推荐指数
1
解决办法
4091
查看次数

重用PreparedStatement

我在我们的代码库上运行了findbugs,它指出还有两个语句仍然需要关闭.在我们运行的代码的这一部分中:

preparedStatement = connection.prepareStatement(query);
Run Code Online (Sandbox Code Playgroud)

对于3个不同的查询,重用prepareStatement.在finally块中,我们关闭资源:

finally{
   try{
      if (resultSet != null) 
         resultSet.close();
   } catch (Exception e) {
      exceptionHandler.ignore(e);
   }
   try {
      if (preparedStatement != null) 
         preparedStatement.close();
   } catch(Exception e) {
      exceptionHandler.ignore(e);
   }
Run Code Online (Sandbox Code Playgroud)

语句是否应在下一个connection.prepareStatement(query)之前关闭; 或者这个发现者是否谨慎?

java findbugs prepared-statement

4
推荐指数
1
解决办法
3768
查看次数

当我的应用程序失去连接时,我应该如何恢复它?

我有一个应用程序,我正在连接到MySQL数据库.它在半夜失去连接,然后喷出null连接,JDBC在X秒内没有收到消息.

getConnection()在我做任何需要与SQL服务器通信的事情之前,我打电话.

这是我的getConnection()方法:

private Connection getConnection() {
    try {
        if (connection != null) {
            if (connection.isClosed() || !connection.isValid(10000)) {
                this.initializeRamsesConnection();
            }
        } else {
            this.initializeRamsesConnection();
        }
    } catch (Exception e) {
        debug("Connection failed: " + e);
    }
    return connection;
}
Run Code Online (Sandbox Code Playgroud)

initializeRamsesConnection()方法中,我将密码等信息放入字符串中,然后以标准JDBC方式创建连接.

然后我称这个方法:

private Connection getConnectionFromConnectionString() {
    Connection con = null;
    String driver = "com.mysql.jdbc.Driver";
    try {
        Class.forName(driver);//jdbc sorcery
        //if there is no connection string
        if (getConnectionString() == null) {
            HMIDatabaseAdapter.debug("No connection string");
        } …
Run Code Online (Sandbox Code Playgroud)

java database-connection jdbc

4
推荐指数
1
解决办法
7693
查看次数