189 8069 5689

JDBC技术-创新互联

一、JDBC简介

成都创新互联是专业的头屯河网站建设公司,头屯河接单;提供网站设计制作、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行头屯河网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

 JDBC,Java Ddatabase Connection,Java数据库连接。

 Sun公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。

JDBC技术

JDBC技术

什么是驱动?两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。

如果没有JDBC,Java程序员需要面向各个数据库驱动接口编程,开发复杂;sun公司提供一套统一JDBC接口规范,Java程序只需要使用JDBC就可以操作任何数据库,JDBC实现类由各个数据库厂商提供。

1.组成JDBC的2个包:java.sql和javax.sql。

DriverManger驱动管理类、Connection连接接口、Statement(PreparedStatement、CallableStatement)数据库操作、ResultSet结果集。

2.开发jdbc应用需要以上2个包外,还需要导入相应JDBC的数据库实现。

二、JDBC快速入门

创建一个user表

create table user(     id int primary key auto_increment,     username varchar(20) unique not null,     password varchar(20)  not null,     email varchar(40) not null );package cn.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import com.mysql.jdbc.Driver; public class Test1 { public static void main(String[] args) throws Exception { //加载数据库驱动 DriverManager.registerDriver(new Driver()); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root"); //创建用于向数据库发送SQL的Statement对象,并发送SQL Statement stat = conn.createStatement(); //从结果集中取出数据 String sql = " select * from user "; ResultSet rs = stat.executeQuery(sql); while(rs.next()){ System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4)); } //断开数据库的连接,并释放相关资源 rs.close(); conn.close(); } }

三、JDBC编程步骤

JDBC技术

四、JDBC访问数据库的流程

JDBC技术

五、JDBC API详解

5.1DriverManager类

 jdbc程序中的DriverManager用于加载驱动,并创建和数据库的连接,这个API的常用方法:

DriverManager.registerDriver(new Driver); DriverManager.getConnection(url,username,password);

 注意,在实际开发中并不推荐采用registerDriver方法注册驱动,原因有二:

  1)查看Driver的源代码可以看出,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

package com.mysql.jdbc; import java.sql.DriverManager; import java.sql.SQLException; public class Driver extends NonRegisteringDriver implements java.sql.Driver { static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } } }

  2)程序依赖MySQL的API,脱离MySQL的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

 推荐方式:class.forName("com.mysql.jdbc.Driver");

  采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使得程序的灵活性更高。

同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的Connection对象。

5.2数据库URL

URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接那个数据库,URL的写法为:

JDBC技术

常用数据库URL的地址的写法:

oracle  jdbc:oracle:thin:@localhost:1521:sid mysql    jdbc:mysql://localhost:3306/sid

常用属性:useUnicode=true&characterEncoding=UTF-8

5.3Connection连接接口

应用一:获取SQL的操作对象

Statement stat = conn.createSteatement() 该对象可以将SQL发送给数据库进行执行PreparedStatement pstmt = conn.prepareStatement(String sql) 对SQL语句进行预编译,防止SQL注入CallableStatement cstmt = conn.prepareCall(String sql) 该对象可以调用数据库中存储过程

应用二:对数据库事务进行管理

conn.setAutoCommit(boolean flag) 设置事务是否自动提交conn.commit()    提交数据库事务conn.rollback()    回滚数据库事务

5.4Statement 用于将SQL发送给数据库,获取操作结果

 jdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法::

executeQuery(String sql) 用于向数据发送查询语句executeUpdate(String sql) 用于向数据库发送insert、update或delete语句execute(String sql) 用于向数据库发送任意SQL语句addBatch(String sql) 把多条SQL语句放到一个批处理中executeBatch() 向数据库发送批处理执行

5.5ResultSet

 jdbc程序中采用的ResultSet用于代表SQL语句的执行结果。ResultSet封装执行结果的时候,采用类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始化的时候,游标在第一行之前,调用next()方法,可以使得游标指向具体的数据行,进而调用方法获取该行数据。

 resultSet既然用于封装执行结果,所以该对象提供的大部分方法都是用获取数据的get方法:

  获取任意类型的数据

getObject(int index)  getObject(String columnName)

  获取指定类型的数据

getString(int index) getString(String columnName)

5.6释放资源

 jdbc程序运行完毕后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet、Statement和Connection对象。

 特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

 为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

六、JDBC完成CRUD示例

增加:

private static void create() throws Exception { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root"); //创建用于向数据库发送SQL的Statement对象,并发送SQL Statement stat = conn.createStatement(); String sql = " insert into user (username,password,email) values('哈哈','haha','hah@163.com') "; int rows = stat.executeUpdate(sql); if(rows > 0){ System.out.println("执行增加完毕"); } //断开数据库的连接,并释放相关资源 conn.close(); }

删除

private static void delete() throws Exception { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root"); //创建用于向数据库发送SQL的Statement对象,并发送SQL Statement stat = conn.createStatement(); String sql = " delete from user where username = '哈哈'; "; int rows = stat.executeUpdate(sql); if(rows > 0){ System.out.println("执行删除完毕"); } //断开数据库的连接,并释放相关资源 conn.close(); }

修改

private static void update() throws Exception { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root"); //创建用于向数据库发送SQL的Statement对象,并发送SQL Statement stat = conn.createStatement(); String sql = " update user set email = '123@163.com' where id = 1 "; int rows = stat.executeUpdate(sql); if(rows > 0){ System.out.println("执行修改完毕"); } //断开数据库的连接,并释放相关资源 conn.close(); }

查询

//加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //获取连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root"); //创建用于向数据库发送SQL的Statement对象,并发送SQL Statement stat = conn.createStatement(); //从结果集中取出数据 String sql = " select * from user "; ResultSet rs = stat.executeQuery(sql); while(rs.next()){ System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4)); } //断开数据库的连接,并释放相关资源 rs.close(); conn.close();

七、DAO模式

 DAO模式(Data Access Object 数据库访问对象),在持久成通过DAO将数据源操作完全封装起来,业务层通过Java对象,完成对数据源操作。

JDBC技术

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:JDBC技术-创新互联
文章起源:http://jkwzsj.com/article/hpdes.html

其他资讯