小编nib*_*012的帖子

公用事业类应该是静态的吗?

如果我必须设计一个Utility类(例如ByteUtils或StreamUtils或StringUtils),那么它们的最佳设计选择是什么.

  • 它们应该是静态类(因为我没有任何状态存储)
  • 它们应该是非静态类(如果不使用对象,它们将被gc'd)

PS:通过静态类,我的意思是一个带有静态方法的类(而不是内部静态类)

请就此设计选择提出建议?

java

70
推荐指数
5
解决办法
4万
查看次数

如何设计DAO类?

什么应该是设计DAO类的最佳方法?

方法#1:将 DAO类设计为对象.

class Customer {
//customer class
}

class CustomerDAO {
  public void saveCustomer(Customer customer) {
  //code
  }

  public Customer getCustomer(int id) {
  //code
  }
}

//Client code
class client {
  public static void main(String[] args) {

   CustomerDAO customerDAO = new CustomerDAO();
   Customer customer = new Customer();
   customerDAO.saveCustomer(customer);
  }
}
Run Code Online (Sandbox Code Playgroud)

方法#2: 使用静态方法设计DAO类(又名静态类)

class Customer {
//customer class
}

class CustomerDAO {
  public static void saveCustomer(Customer customer) {
  //code
  }

  public static Customer getCustomer(int id) {
  //code
  } …
Run Code Online (Sandbox Code Playgroud)

java

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

准备好的语句会阻止sql注入攻击吗?

考虑一个假设的情况,我必须根据userId从数据库中检索一些细节,下面给出了示例代码

private String getpassword(String username) {

PreparedStatement statement = null;
ResultSet resultSet = null;
Connection conn = null;

final String selectQuery = "SELECT password FROM " + "users WHERE username=?";
try {
    conn = dataSource.getConnection();
    statement = conn.prepareStatement(selectQuery);
    statement.setString(1, username);
    resultSet = statement.executeQuery();
    if (resultSet.next()) {
        }

} catch (SQLException e) {
 // log it
}
//return
}
Run Code Online (Sandbox Code Playgroud)

此用户名实际上来自客户端,用户可以篡改数据(如果他愿意).因此,preparedStatements将阻止接受引号并仅将过滤后的SQL形式发送到数据库.

例如:我可以提供username ='或1 = 1,它将是一个有效的SQL语句.但是如果驱动程序从用户输入中删除引号,那么它们将阻止sql注入.

对此一般的理解是什么?

java security sql-injection

5
推荐指数
1
解决办法
1697
查看次数

嵌套的静态类名以$开头

我见过一些代码库,人们编写了名为"$"的嵌套静态类?那有什么意义?

class A {
  int a;

  static class $B {
    int b;  
  }
} 
Run Code Online (Sandbox Code Playgroud)

java

-1
推荐指数
1
解决办法
52
查看次数

标签 统计

java ×4

security ×1

sql-injection ×1