概述
个人认为JDBC的知识是基础知识,因为在后期的框架中一般都是经过配置文件进行连接数据库。对数据的操作也是做了一些封装,例如hibernate和mybatis。但是对于数据库的操作却是万变不离其宗,对于面试也是不可避免的。所以在此总结一下,以前看视频所写的笔记。
什么是JDBC
摘自百度百科:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
自己理解的就是JDBC是一个中间产物,我们可以通过这个产物去操作不同的数据库,而不用理会各种类型的数据库之间语句的差别。JDBC就是java访问数据库的唯一标准接口,可以为多种关系型数据库提供统一的访问。我们只需用JDBC API写一个程序就可以实现对不同数据库的访问。
在java中,关于对数据库操作的类库都放在了【 java.sql.*】包中。
常用的接口和类
首先我们先熟悉一些类和接口
【DriverManager类】管理一组 JDBC 驱动程序的基本服务。他就像一个大管家,只有通过它才能连接到数据库,它的类方法getConnection会试图建立到给定数据库的URL连接。返回一个Connection。
【Connection接口】与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。我们的大管家通过getConnection方法与数据库建立连接之后,会返回给我们一个信号,这个信号就是Connection,我们在接收到这个信号时,可以利用这个信号的createStatement()方法,创建一个 Statement 对象来将 SQL 语句发送到数据库。
【Statement接口】用于执行静态 SQL 语句并返回它所生成结果的对象。利用executeQuery方法,我们可以获得结果的对象ResultSet。
【ResultSet接口】表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前【考点】。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
JDBC 程序六步走
想要编写一个JDBC程序,一般都是遵循这个规律、
1、建立驱动,三种方式,最常用的只有一种 Class.forName(“”oracle.jdbc.driver.OracleDriver);
2、建立连接 Connction conn = DriverManage.getConnection(“url” , “name” ,”password” );
3、创建语句 Statement stmt = conn.createStatement();
4、执行语句 ResultSet rs =stmt.executeQuery(“sql”);
5、循环输出whlie(rs.next){ // … }
6、关闭连接 利用close关闭上述连接
以下代码必须保证手写的出【面试经典必会小程序】。
public class JdbcDemo {
public static void main(String[] args){
Connection conn =null;
Statement stmt = null;
ResultSet rs = null;
try{
Class.forName("com.mysql.jdbc.Driver"); //建立驱动
// oracle为oracle.jdbc.driver.OracleDriver
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studemo","root","root");//建立连接
//oracle为jdbc:oracle:thin:@192.168.2.101:1521:studemo
stmt = conn.createStatement();//创建语句
String sql="select * from stu";
rs = stmt.executeQuery(sql);//执行语句
while(rs.next()){ //循环输出
String s= rs.getString("stuname");
System.out.println(s);
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}finally{
try{ //关闭连接
if(rs!=null){rs.close();rs=null;}
if(stmt!=null){stmt.close();stmt=null;}
if(conn!=null){conn.close();conn=null;}
}catch(SQLException e){
e.printStackTrace();
}
}
}
}