一、JDBC简介
JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。
JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。
二、JDBC主要功能
(1)建立与数据库或者其他数据源的链接
(2)向数据库发送SQL命令
(3)处理数据库的返回结果
三、JDBC常用类和接口
连接到数据库(Connection)
建立操作指令(Statement)
执行查询指令(executeQuery)
获得查询结果(ResultSet)等
1、驱动程序管理类(DriverManager)
DriverManager类是JDBC的管理类,作用于用户和驱动程序之间。
对于简单的应用程序,一般程序员需要在此类中直接使用唯一的方法时DriverManager.getConnection()。
2、声明类(Statement)
Statement对象用于将SQL语句发送到数据库中。
实际上有三种Statement对象,它们都作为在给定链接上执行SQL语句的包容器:
**Statement**
**PreparedStatement**(它从Statement继承而来)
**CallableStatement**(它从PreparedStatement继承而来)。
它们都专用于发送特定类型的SQL语句
(1)Statement对象用于执行不带参数的简单的SQL语句;Statement接口提供了执行语句和获取结果的基本方法。
(2)PerparedStatement对象用于执行带或不带IN参数的预编译SQL语句;PeraredStatement接口添加处理IN参数的方法;
(3)CallableStatement对象用于执行对数据库已存储过程的调用;CallableStatement添加处理OUT参数的方法。
Statement提供了许多方法,最常用的方法如下:
(1)execute()方法:运行语句,返回是否有结果集。
(2)executeQuery()方法:运行查询语句,返回ReaultSet对象。
(3)executeUpdata()方法:运行更新操作,返回更新的行数。
(4)addBatch()方法:增加批处理语句。
(5)executeBatch()方法:执行批处理语句。
(6)clearBatch()方法:清除批处理语句。
3、数据库连接类 (Connection)
4、结果集合类 (ResultSet)
ResultSet包含符合SQL语句中条件的所有行记录,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet.next()方法用于移动到ResultSet中的下一行,使下一行成为当前行。
四、JDBC编程步骤
step1, 加载驱动
step2, 获得连接
step3,创建Statement
step4,执行sql
step5, 如果是查询,需要遍历
step6, 关闭资源
step1, 加载驱动
Class.forName(String classname);
forname方法:jvm依据classname找到类的字节码文件(.class文件),然后将字节码文件的内容读到方法区,生成一个class对象。
step2, 获得连接
Connection conn = DriverManager. getConnection(String url,String username, String pwd);
注意:
1)getConnection方法会返回一个符合Connection接口要求的对象,称之为连接对象。
2)如果连接对象获得了,则表示连接已经建立 成功。
step3,创建Statement
Statement stat = conn.createStatement();
注意:
1) createStatement()方法会返回一个符合Statement接口要求的对象,该对象可以理解为一个执行sql的容器。
step4,执行sql
//执行查询
ResultSet rst = stat.executeQuery(String sql);
//执行插入、删除、修改
int stat.executeUpdate(String sql);
注意:
1)executeUpdate方法返回值是一个整数,表示该sql执行成功之后,受到影响的记录的个数。
2)executeQuery方法返回的是一个ResultSet(结果集),需要遍历。
step5, 如果是查询,需要遍历
ResultSet有一个next()方法,每执行一次该方法,会返回一个true/false,如果值为true,表示还有记录。
step6, 关闭资源
rst.close()
stat.close()
conn.close()
代码:
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class FirstJdbc
{
private static String driverName="oracle.jdbc.driver.OracleDriver";
private static String url="jdbc:oracle:thin:@192.168.0.110:1521:orcl";
private static String username="oracle";
private static String pwd="oracle";
public static void main(String[] args)
{
Connection conn=null;
Statement stat=null;
ResultSet rst=null;
try
{
Class.forName(driverName);
/*
* step2,获得连接
*/
conn=DriverManager.getConnection(url,username,pwd);
System.out.println("conn:"+conn.getClass().getName());
/*
* step3,创建Statement
*/
stat=conn.createStatement();
/*
* step4,执行sql
*/
//下面的sql最好使用列别名,这样做的好处理,如果数据库的列名改变,只要改变这一句即可
rst=stat.executeQuery("select id,name,base_cost from cost");
/*
* step5,遍历ResultSet结果集
*/
while(rst.next())
/*
* rst.getXXX(列名或者是序号,序号从1开始)
* 方法:
* XXX: jdbc驱动会自动做类型的转换,所以要依据数据库字段的类型来选择对应的getXXX方法,
* 比如,username在数据库中是varchar类型,则要使用getString去读取。
*
*/
{
int id=rst.getInt("id");
String base_cost=rst.getString("base_cost");
String name=rst.getString("name");
System.out.println("id:"+id+" name:"+name+" base_cost:"+base_cost);
}
}catch(ClassNotFoundException e)
{
e.printStackTrace();
System.out.println("加载驱动失败");
} catch (SQLException e)
{
e.printStackTrace();
System.out.println("访问数据库失败");
}finally
{
//step6,关闭资源
if(rst!=null)
{
try
{
rst.close();
} catch (SQLException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("关闭ResultSet错误");
}
}
if(stat!=null)
{
try
{
stat.close();
} catch (SQLException e)
{
}
}
if(conn!=null)
{
try
{
conn.close();
} catch (SQLException e)
{
}
}
}
}
}