JDBC是一种可以执行SQL语句并可以返回结果的JavaAPI,全称是 JavaDataBase Connectivity,也是一套面向对象的应用程序接口(API)。JDBC的最大特点是它能够独立于具体的关系数据库。JDBC的优点:
1、 JDBC和ODBC十分相似,有利于软件开发人员的理解。
2、 JDBC使软件开发人员从复杂的驱动程序编写工作中解脱出来,可以完全专注于业务逻辑的开发。
3、 JDBC支持多种关系型数据库,使软件的可移植性大大增加。
4、 JDBC的API是面向对象的,软件开发可以将常用的方法进行二次封装,从而提高代码的重用性。
JDBC的缺点:
1、 通过JDBC访问数据时速度将收到一定影响。
2、 虽然JDBC API是面向对象的,但通过JDBC访问数据库依然是面向关系的。
3、 JDBC提供了对不同数据库厂商的支持,将对数据源带来影响。
1、 加载JDBC驱动程序
在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM,者通过java.lang.Class类的静态方法forName(String className)实现。
例子(mysql):
try{
Class.forName("com.mysql.jdbc.Driver");//加载驱动
//将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则将执行其所有 SQL语句,并将这些语句作为单独的事务提交。
//否则,其 SQL语句将成组地进入通过调用commit方法或 rollback方法终止的事务中。默认情况下,新的连接处于自动提交模式下。
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
当加载驱动成功后就把驱动加载到了DriverManager类中了,如果加载失败了,则会抛ClassNotFoundException异常,就是没有找到Driver类。
2、 提供JDBC连接的URL
连接URL定义了连接数据库时的协议、子协议、数据源标识。
协议:在JDBC中总以是jdbc开始
子驱动:是桥接的驱动程序或是数据库管理数据库的名称,例如MySQL就是mysql.
例如:
jdbc:mysql://localhost:3306/DatabaseName?useUicode=ture&characterEncoding=utf-8
3、创建数据库连接
在连接数据库的时候可以向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库连接。可以使用DriverManager的getConnection(String url,String username,Stringpassword)方法传入指定的的连接的数据库的路径、数据库的用户名和密码来获取。例如:
String url="jdbc:mysql://localhost:3306/jsp?useUicode=ture&characterEncoding=utf-8"; //数据库连接字串
static String userName="root"; //数据库用户名称
static String driver="com.mysql.jdbc.Driver"; //数据库驱动名称
static String pwd="root"; //数据库用户登陆密码
try{
con=DriverManager.getConnection(url,userName,pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
4、 创建一个Statement
获取到了数据库的连接后,要操作数据库还要能执行SQL语句,要想执行SQL语句,必须获取java.sql.Statement实例,statement实例又可分为以下三种类型:
1、 执行静态的SQL语句,通常通过Statement实例实现
2、 执行动态的SQL语句,通常通过PreparedStatement实例实现。
3、 执行数据库存储过程,通常通过CallableStatemtent实力实现
具体代码如下:
Statement st =con.createStatement();
PreparedStatementps = con.prepreadStatement(sql);
CallableStatementca = con.prepareCall(“{CALL demoSp(?,?)}”);
5、 执行SQL语句
Statement接口提供了三种执行SQL语句的方法,executeQuery、executeUpdate和execute
具体使用的是哪一种是有SQL的语句的结果来决定的。
1、 ResultSet executeQuery(StringsqlString):执行查询数据库的SQL,如SELECT语句,
返回一个结果集对象;
2、 int executeUpdate(StringsqlString);:用于insertupdate或者delete语句以及SQL DDL语句;
3、 execute(String sqlString):用于执行返回多个结果集,多个更新计数或二者组合的语句。
6、 处理结果
执行后会有两种结果:
i. 执行更新返回的是本次操作影响的记录数
ii. 执行查询放回的结果是一个ResuletSet对象
7、 关闭JDBC对象
在操作完成后都要把使用的JDBC对象全部关闭,释放JDBC资源,关闭的顺序是:
关闭结果集——关闭声明对象——关闭连接
具体代码如下:
rs.close();
ps.close();
con.close();