两道面试题
1. 数据库连接有哪些方式?分别有什么区别
数据库连接Connection
Connection接口实现类由数据库提供,获取Connection对象通常有两种方式
1.一种是通过DriverManager(驱动管理类)的静态方法获取
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
2.一种是通过DataSource(数据源)对象获取。
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test");
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root");
Connection connection = ds.getConnection();
☆以上两种方式的区别是
DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接
DataSource提供连接池的支持。连接池在初始化时创建一定数量的数据库连接,这些连接时可以重复利用的,每次使用完数据库连接,释放资源时使用connectio.close()都是将Connection连接对象回收。
2.数据库Statement和PreparedStatement有什么区别?
Statement对象主要是将SQL语句发送到数据库中。JDBC API 主要提供了三种Statement对象
一、Statement
- 用于执行简单的不带SQL的语句
二、PrepareStatement
- 用于执行或者不带参数的SQL语句
- SQL语句会预编译在数据库系统
- 执行速度快于Statement
三、CallableStatement
- 用于执行数据库存储过程的调用
Statement statement = null;
statement = connection.createStatement();
// //执行sql
// String sql = "select * from student";
// resultSet = statement.executeQuery(sql);
PreparedStatement ps = null;
String sql = "insert into student(sn,name,qq_mail,classes_id) values (?,?,?,?)";
ps = connection.prepareStatement(sql);
ps.setInt(1,6);
ps.setString(2,"钱九");
ps.setString(3,"qianjiu@qq.com");
ps.setInt(4,1);
主要掌握两种执行SQL的方法:
executeQuery() 方法执行后返回单个结果集的,通常用于select语句
executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete
语句