JDBC--学习笔记(一)

来源:互联网 发布:韩雪网络直播视频 编辑:程序博客网 时间:2024/05/19 13:22
--JDBC--Java DataBase Connectivity

===========1.概念==============
--Java数据库连接,操作关系型数据库。是Java访问数据库的桥梁,为多种关系型数据库提供统一的访问接口。
--由一组使用Java语言编写的类和接口组成--JDBC API,位于包 java.sql 和 javax.sql 中。
--JDBC提供了两种接口,一种是面向应用程序层,作用是让开发人员通过SQL调用数据库和处理结果,而不需要考虑
  数据库的提供商;另一种是驱动程序层,处理与具体驱动程序的交互,JDBC驱动程序可以利用JDBC API创建Java
  程序与数据源的之间的桥梁。
--JDBC API使用反射机制来实现Java程序和JDBC驱动的松耦合。Class.forName("JDBC驱动类的名称")。若系统中
  不存在给定的类,则会引发异常,异常类型为“ClassNotFoundException”。


===========2.JDBC的作用==============
--1.建立与数据库之间的访问连接
--2.将编写好的SQL语句发送到数据库执行
--3.对数据库返回的执行结果进行处理


===========3.JDBC的工作原理============
Java应用程序 <----> JDBC API ; JDBC Driver Manager <----> JDBC驱动 <----> 不同的关系型数据库(MySQL,Oracle等)


===========4.JDBC访问数据库的步骤============
--JDBC API 4个重要环节:
DriverManager类:依据数据库的不同,管理JDBC驱动;
Connection接口:负责连接数据库并担任传送数据的任务;
Statement接口:由Connection产生,负责执行SQL语句;
ResultSet接口:负责保存Statement执行后产生的查询结果。
--JDBC访问数据库的步骤:
① 加载驱动 Class.forName("java驱动类的名称")//mysql为com.mysql.jdbc.Driver();Oracle为Oracle为com.Oracle.jdbc.Driver
② 获取数据库连接 Connection connection = DriverManager.getConnection(数据库URL,数据库用户名,密码);//用户名和密码是可选的
③ 发送SQL语句,得到结果集
   Statement stmt = connection.createStatement();
   ResultSet rs = stmt.executeQuery("SQL查询语句");//select查询语句
   //ResultSet rs = stmt.executeUpdate("SQL增删改语句");
④ 处理结果(ResultSet对象rs的next()方法判断和geXxx()方法得到)
⑤ 释放资源:先创建的后释放,后创建的先释放。一般将释放资源置于finally语句块中


===========4.1  PreparedStatement接口与Statement接口的区别:
PreparedStatement接口继承自Statement接口,PreparedStatement比普通的Statement对象使用起来更灵活、更有效率。
PreparedStatement对象对SQL语句进行了预编译,所以其执行速度要快于Statement对象。所以,多次执行的SQL语句应使用
PreparedStatement对象,以提高效率。
PreparedStatment实例包含已编译的SQL语句,SQL语句可具有一个或多个输入参数,使用占位符?
在实现PreparedStatement对象之前,必须设置每个输入参数的值。通过setXxx方法,Xxx为参数对应的类型。


===========4.2  实例:用JDBC查询学生成绩单,主要代码(PreparedStatement接口)
Connection connection = null;
PreparedStatement psmt = null;
ResultSet rs = null;
  try {
//1.加载JDBC驱动
Class.forName("JDBC驱动类的名称");
//2.获得数据库连接
connection = DriverManager.getConnection("数据库URL", "数据库用户名", "密码");
//3.编写SQL语句
String sql = "select c.* from score c, student t " +
" where c.stuId = t.id and t.name=?";
//4.创建PreparedStatement对象的实例,并为占位符进行赋值
psmt = connection.prepareStatement(sql);
psmt.setString(1, "张三");
//5.执行SQL语句,获得结果集
rs = psmt.executeQuery();
while(rs.next() && rs!=null){
//
}
  } catch (ClassNotFoundException e) {e.printStackTrace();} //加载驱动时的异常处理
    catch (SQLException e) {e.printStackTrace(); //执行SQL异常处理
  }finally{
//依次关闭资源
//关闭结果集对象
if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}
//关闭PreparedStatement对象
if(psmt!=null){try {psmt.close();} catch (SQLException e) {e.printStackTrace();}}
//关闭连接对象
if(connection!=null){try {connection.close();} catch (SQLException e) {e.printStackTrace();}}
  }
0 0