Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
Mysql 不捕获SQL异常的安全性_Mysql_Sql_Jdbc_Exception Handling_Sqlexception - Fatal编程技术网

Mysql 不捕获SQL异常的安全性

Mysql 不捕获SQL异常的安全性,mysql,sql,jdbc,exception-handling,sqlexception,Mysql,Sql,Jdbc,Exception Handling,Sqlexception,假设我有一个程序,它将电子邮件地址放入数据库,其中电子邮件属性是主键。 如果我有一个重复的电子邮件地址,我可以用两种方式处理它 1) 运行“从表中选择电子邮件”查询。如果电子邮件当前在那里,不要添加它 2) 不要检查表中是否有电子邮件。catch(SQLException e),但不打印堆栈跟踪,只需跳过它即可。这样,如果我插入一个副本,它实际上会忽略它 对于方法1,我只执行一个简单的select查询(没有连接或任何花哨的东西),所以性能并不是什么大问题。但是,如果我想优化性能,方法2是一种可行

假设我有一个程序,它将电子邮件地址放入数据库,其中电子邮件属性是主键。 如果我有一个重复的电子邮件地址,我可以用两种方式处理它

1) 运行“从表中选择电子邮件”查询。如果电子邮件当前在那里,不要添加它
2) 不要检查表中是否有电子邮件。catch(SQLException e),但不打印堆栈跟踪,只需跳过它即可。这样,如果我插入一个副本,它实际上会忽略它

对于方法1,我只执行一个简单的select查询(没有连接或任何花哨的东西),所以性能并不是什么大问题。但是,如果我想优化性能,方法2是一种可行、安全的方法吗? 因此,我不再每次都运行“选择…”,而是添加它

跳过异常是否存在任何安全问题

Java示例(使用JDBC):


在mysql中,您可以执行
INSERT IGNORE
,如果违反了唯一约束,则不会插入行。如果您非常关心性能,我建议您首先停止使用电子邮件地址作为主键。在我看来,把电子邮件地址作为主键是荒谬的。
try {
    String sql = "insert into emails values(?)";
    PreparedStatement pstmt = conn.prepareStatement(sql);
    pstmt.setString(1, email);
    pstmt.execute();
    return true;
}

catch(SQLException e) {
    // e.printStackTrace(); // skip; don't print out error
    return false;
}