JDBC(二)

127 阅读2分钟

JDBC(二)

JDBC常见的异常

1、java.lang.ClassNotFoundException:com.mysql.jdbc.Drtiver

类没有找到异常,加载类时,指定路径的类不存在时抛出。

2、java.net.UnknownHostException

连接主机异常,通常是主机IP有误

3、java.net.ConnectException:Connection refused:connect

连接超时,通常是指定端口连接不上抛出

4、com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown database 'dpb'

指定数据库名不存在时抛出 

5、java.sql.SQLException:Access denied for user 'root'@'172.17.0.1'(using password:YES)

登录mysql的账号或密码错误

6、com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:You have an error in your SQL syntax;

执行SQL语句的语法错误

7、com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unkonwn column 'l_ame' in 'field list'

指定列不存在时抛出

8、java.sql.SQLException:No value specified for parameter 4

占位符的个数和填充值的个数不铺配时抛出

9、java.sql.SQLException:Before start of result set

结果集指针指向第一条记录的上一条记录,当前结果集指针的指向没有数据时抛出。解决方案是用rs.next()将结果集指针指向第一条记录。

10、java.sql.SQLException:Data truncated for column 'u_rank' at row 1

插入枚举类型时,插入的值不在枚举范围内抛出

SQL 注入:

在 JDBC 执行 SQL 语句时,如果以拼接字符串方式插入值,一旦值中有 SQL 语句的关键字,会导致 SQL 语句语法错误,或执行结果不正确情况,这称为 SQL 注入攻击。

Statement 和 PreparedStatement 的区别:

Statement 是 PreparedStatement 的父接口。Statement 执行 SQL 语句时,只能以拼接字符串方式插入值,效率低,容易引起 SQL 注入;

PreparedStatement 提供了占位符方式插入 SQL 语句的值。无论是什么值,都当字符串处理,不会引起 SQL 注入。

三层架构:

业务接口:一个实体类一个业务接口,一次提交一个业务方法,业务方法参数来自表现层。

持久接口:一个实体类一个持久接口,一次数据库操作一个持久方法。持久方法参数来自业务层。

接口隔离原则:使用专门的接口比用统一接口好。便于项目组织和分工,不要让开发者面对自己用不到的方法。