15 Java面试之JDBC

一、JDBC 技术主要用于处理什么问题,有什么好处?
答:
1)、JDBC 是一种用于执行SQL语句的JavaAPI,为多种关系数据库提供统一访问
2)、程序员只需用 JDBC API 写一个程序,就可以访问所有的数据库
好处:
1)、不必为不同的平台写不同的应用程序,只需写一遍程序就可以使它在任意平台上运行,这也是Java语言“一次编写,到处运行”的优势
2)、JDBC 可以做三件事:与数据库建立连接,发送、处理数据库语句并处理结果

二、Class.forName(“Oracle.jdbc.driver.OracleDriver”); 的作用是?
答:
加载 Oracle 的 JDBC 驱动程序

三、请描述execute、executeQuery,executeUpdate 方法的返回值的含义?;
答:
1、executeQuery:
返回结果集(ResultSet),通常用于 select 语句。
2、executeUpdate:
返回此操作影响的行数(int),通常用于 insert, update, delete 语句。
3、execute:
返回布尔值(boolean),通常用于 insert,update,delete 语句。

四、ResultSet处理的getInt(“empno”) 和 getString(1)的含义?
答:
1、getString 来获取指定列的值,返回值也是 String,列号为 1 的列的数据类型
2、getInt 来获取指定列的值,返回值也是 int。列名为"empno"的数据类型

五、详述 JDBC 编程的 4 大步骤?
答:
1)、加载一个 Driver 驱动。
2)、创建数据库连接(Connection)
3)、创建 SQL 命令发送器 Statement ;通过 Statement 发送 SQL 命令并得到结果
4)、处理结果(select 语句和 ResultSet);处理完毕后关闭数据库资源
//在这里必须有数据库的驱动包

public class PublicJdbc {
//链接数据库的方法
public static Connection getConnection(){
Connection connection=null;
try {
//加载驱动
Class.forName(“com.mysql.jdbc.Driver”);
//链接数据库
connection= DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/mysqljdb”,“root”,“Dylan5201314”);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回
return connection;
}
//关闭资源
public static void getClose(ResultSet re,Connection conn,PreparedStatement pr){
if(re!=null){
try {
re.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pr!=null){
try {
pr.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class PagingDaoImp {
Connection conn=null;
PreparedStatement pr=null;
ResultSet executeQuery =null;
//查询总条数
public Integer selectToalNumber() {
//sql语句
StringBuffer sql=new StringBuffer(“SELECT COUNT(*) AS NUMBER FROM PAGING “);
conn=PublicJdbc.getConnection();
int in=0;
try {
pr=conn.prepareStatement(sql.toString());
executeQuery= pr.executeQuery();
if(executeQuery.next()){
in=executeQuery.getInt(“NUMBER”);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
PublicJdbc.getClose(executeQuery, conn, pr);
}
return in;
}
}
六、SQL 注入攻击是怎么回事?
答:
当我们使用字符串拼接SQL:String sql=“select * from user_from where user=’”+user+”‘and password=’”+pass+"’";在这里用户密码是user和pass
2、发送器发送SQL命令并得到结果:xxx.executeQuery(sql);
3、当我们使用SQL:”select * from user_from where user=’abc’ and
password=’abc ‘ or ’1’=’1’”;

这条SQL语句中的用户名和密码并不正确,但仍然能访问数据表,所以存在风险。这就是SQL注入攻击

解决方案:
Statement的子接口PreparedStatement来实现,
优点:
A)、可读性性强不繁琐。
B)、安全。
C)、多次执行同一条sql语句,效率高。

PreparedStatement pr=conn.prepareStatement(sql.toString());
七、PreparedStatement(预编译 SQL 语句)有什么优势?
答:
注意:
如多次执行一个 SQL 语句,可以使用 PreparedStatement 对象。在创建 PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement 对象,可以得到多个不同的结果。
优点:
A)、可读性性强不繁琐。
B)、安全。
C)、多次执行同一条sql语句,效率高。

八、JDBC 中,事务是如何管理的?
答:
1)、 在 JDBC 中,事务操作缺省是自动提交。
系统将自动调用 commit()提交,否则调用 rollback()回滚
2)、事务操作方法都位于接口 java.sql.Connection 中
通过调用 setAutoCommit(false)来禁止自动提交.

try {
/**
此处省略查询的SQL语句
*/
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
九、【编程题】通过资源文件加载的方式连接数据库
答:
1、JDBC 最常用的资源文件类是 Properties
2、在src目录下创建一个db.properties文件
内容如下:

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/xxx
db.username=root
db.password=
3、获取Properties中的文件信息

InputStream in = ClassLoader.getSystemResourceAsStream(url); Properties p = new Properties();
p.load(in);
p.getProperty(“jdbc.url”);
4、使用DriverManager.getConnection()进行连接数据库
5、在关闭资源

读取资源文件的好处
1、地址或者用户名密码发生变动时,只需要在文件里改动即可。
2、而不需要在代码里改动,这也很好体现了代码的封装性原则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值