什么的JDBC:
使java应用程序具有访问不同类型数据库的能力;基于java的、提供连接、访问和操纵关系数据库的应用程序接口(API),提供在java应用程序中执行SQL语句以访问和操纵关系数据库的方法。
JDBC与ODBC的区别:
- ODBC只适用于windows平台,而JDBC具有跨平台性;
- ODBC数据源需要手工配置,JDBC在应用程序中指定数据库,不需要配置;
JDBC四种类型的驱动配置:
- JDBC-ODBC桥驱动程序:把JDBC方法翻译成ODBC函数调用,使java应用程序可以通过ODBC访问数据库。(Access、DB2、Sybase、SQL Server)
- 应用于没有纯JDBC驱动程序存在时;
- 优点:有大量的ODBC驱动程序可用,但只能用于windows和sun Solaris系统;
- 缺点:不易于移植,运行速度慢;
- 本地java实现驱动程序,是建立在已有专用驱动程序的基础上,将JDBC方法翻译成本地已有的专用驱动程序。(DB2、Sybase)
- 翻译工作采用java语言实现,专用驱动程序通常采用C语言编写,依赖于本地库文件运行;
- 优点:充分利用已有的专用驱动程序;
- 缺点:不具有跨平台性;
- 网络协议驱动程序,是一种全新的驱动程序,以“中间件”形式出现,有中间件组件把JDBC方法翻译成数据库客户端请求,再向数据库服务器发送请求。(DB2)
- 中间件组件和数据库客户端通常位于中间层服务器上,此类驱动程序完全由java实现;
- 适用于基于网络的分布式应用。
- 数据库协议驱动程序,全新结构的驱动程序,应用程序直接与数据库服务器通信。(SQL Server、MySQL)
- 需要数据库开发商的强力支持,提供基于特定数据库的网络插件,实现针对特定数据的通信协议,是JDBC驱动程序通过网络插件直接与数据库服务器通信。
JDBC的4个主要接口:
- Driver接口:提供给JDBC驱动程序实现的接口,用于装入和管理JDBC驱动程序,通常应用程序中不直接使用,而通过DriverManager类使用Driver接口提供的功能;
- Connection接口:管理已建立连接的数据库连接;
- Statement接口:管理和执行sql语句;
- ResultSet接口:存储数据查询返回的结果集;
数据库基本操作:
-
指定JDBC驱动程序
- 首先要指定驱动程序类型,java.lang.Class类的forName()方法用于指定JDBC驱动程序;
- 声明:public static Class<?> forName(String className) throws ClassNotFoundException
- 例:Class.forName("com.mysql.jdbc.Driver"); //指定MySQL JDBC驱动程序
-
DriverManager类创建指定数据库连接
- getConnection()方法装载指定JDBC驱动程序并创建于指定数据库的连接,返回数据库连接Connection对象;
- 声明:public static Connection getConnection(String url);/public static Connection getConnectuin(url,user,password);
- 例:Connection xx = DriverManager.getConnection(url);
-
Connection接口管理连接对象
- 一个Connection对象表示对一个特定数据源已经建立的一条连接,它能创建执行SQL的statement语句对象,还能提供数据库中的属性信息;
-
Statement执行SQL语句
- 声明
public interface Statement extends Wrapper{
int executeUpdate(String sql) throws SQLException; //执行数据定义和数据更新SQL语句
ResultSet executeQuery(String sql) throws SQLException; //执行数据查询SQL语句
boolean execute(String sql) throws SQLException; //执行SQL语句
int getUpdateCount() throws SQLException; //获得数据更新所影响的行数
ResultSet getResultSet() throws SQLExption; //获得数据查询结果集
void close() throws SQLException; //关闭语句
}
-
ResultSet接口存储结果集
- 结果集由若干列、若干行的数据项组成。
- 用 while(xxx.next()) { system.out.print(xxx); } //迭代遍历结果集
-
关闭close()
- re.close(); stat.close(); conn.close();
通过ResultSet结果集更新表
- 必须在创建Statement对象时指定结果集的属性。
- Statement stat = conn.createStatement(int resultSetType,int resultSetConCurrency) throws SQLException;
- 其中int resultSetType指定结果集是否可以滚动;resultSetConncurrency指定能否通过结果集更新表(int CONCUR_READ_ONLY=1007; //只读、默认值 int CONCUR_UPDATETABLE=1008; //可更新);
- 可更新的方法:
- void refreshRow()... //用数据库中的最紧值刷新当前行
- void updateInt (String columnLabel,int x)... //更改当前行指定列数据
- void updateString(int columnIndec,String x)... //改当前行指定列数据
- void updateRow()... //将改变后的当前行数据提交给数据库中的表
- void moveToInsertRow()... //移动到插入行
- void moveToCurrentRow()... //移动到插入前的当前行
- void insertRow()... //在表中插入一行
- void deleteRow()... //删除当前行并提交