1.什么是JDBC,使用JDBC的好处?
JDBC是Java访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可,数据库驱动由数据库厂商提供.
好处:
a.程序员如果要开发访问数据库的程序,只需要会调用JDBC接口中的方法即可,不用关注类是如何实现的。
b.使用同一套Java代码,进行少量的修改就可以访问其他JDBC支持的数据库
2.我们导入的 mysql-connector-java-5.1.37-bin.jar包,有什么用,他和JDBC有什么关系?
此jar包是由mysql数据库厂商提供的一套实现了JDBC内的接口的实现类, 我们使用此实现类创建对象就可以实现使用Java代码与mysql数据库交互, 完成增删改查、开始事务、释放资源等操作。
3.注册驱动为什么使用反射的方式,而不是像以前一样,我们new对象?使用反射又有什么好处?
mysql5版本之前都是使用反射的方式进行注册驱动, 在运行期以反射的方式来检查JDBC驱动的主类com.mysql.jdbc.Driver是否存在,若不存则表示运行环境中没有这个驱动,可以手动catch异常;
好处: 当驱动jar包不存在时,我们可以做更多的操作(如捕获异常)
4.请简述JDBC编程的步骤
1.导入jar包
2.注册驱动
Class.forName("com.mysql.jdbc.Driver"); //mysql 5版本之前
mysql5版本之后, Driver内置静态代码块, 可以不写注册驱动,会随着类加载而注册驱动, 但为了向下兼容, 建议写
3.获取数据库连接对象
DriverManager.getConnection(url, username, password)
url: jdbc: mysql: // ip: 端口号/数据库名称
4.获取执行sql语句的对象
conn.prepareStatement(sql语句);
5.执行sql语句
使用Statement的子接口Preparedment对象的方法执行sql语句
增删改语句: executeUpadte()
查询语句: executeQuery()
6.处理结果
executeUpadte()返回值是受影响的数据行数
executeQuery()返回值是一个ResultSet类型的结果集
7.释放资源
5.JdbcUtils存在的目的?
简化代码, 提升效率, 将注册驱动, 连接数据库, 释放资源的代码封装起来, 既提升了编写代码的效率又减少了代码的冗余情况
6.什么是SQL注入问题,该怎样解决?
使用字符串拼接执行sql语句时, 会产生sql注入的安全问题.
解决方式:
使用PreparedStatement对象实现增删改查操作, 防止sql注入问题, 且效率更高
使用预编译sql语句, 其中参数使用?作为占位符
pstate = conn.prepareStatement(String sql);
pstate.setString();
使用setXxx()方法按顺序设置?的值, 即可避免sql注入. |