jdbc编程

一. ODBC又称对象数据库连接性,在windows环境下,为不同厂商的数据库编写一些封装,使他们具有相似的编程接口。
二. Jdbc(java database connectivity)是对odbc API的一种面向对象的封装和重新设计,并且真正能够使用户编写不依赖厂商的代码来操作数据库。JDBC的类都被归到java.sql包中,如果想使用JDBC-ODBC桥,还必须安装两个另外的程序包(一般的jdk已包含这两个程序包)。
三. JDBC驱动程序的类型
Java程序连接数据库的方法实际有四种:
(1) jdbc-odbc桥和odbc驱动程序。这是一种本地解决方案,因为odbc驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一种临时解决方案。
(2) 本机代码和java驱动程序。把客户机API上的jdbc调用转换为oracle,sybase等DBMS的调用,用java代码调用本地dbms。
(3) Jdbc网络的纯java驱动程序,由java驱动程序翻译的jdbc形成传送给服务器的独立协议,他将jdbc转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为另一种DBMS协议,但该方法必须处理web所提出的安全性、通过防火墙的访问等方面的要求。
(4) 本机协议java驱动程序。Java驱动程序直接转换为该数据库的协议并进行调用,该方法也可通过网络使用。此情况下,每个数据库厂商提供驱动程序。该方法最为实用。
四. 在windows NT环境下访问ODBC前要使用控制面板中的ODBC驱动程序对它进行注册。
五. 连接数据库(使用jdbc-odbc桥)
(1) 加载驱动程序:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”)该语句加载驱动程序,并创建该类的一个实例。
(2) 建立Connect类的一个实例连接一个特定的数据库。使用URL语法连接数据库。
String url=”jdbc:odbc:子名称”;
/*此处的数据库名是在ODBC设置面板中输入的数据源名,jdbc的位置总是jdbc,表示jdbc协议,odbc位置代表子协议,当使用其他连接时可以被指定为其他连接协议,如:连接mysql时,此位置填写mysql相关协议,子名称遵循标准URL命名约定:
“//主机名:端口/子协议(此处子协议一般为数据库名,用户名和密码)”。一个url例子:
jdbc:mysql://localhost:3306/db_dorminventorymanager;username=root;password=root。在url中填入了用户名和密码*/
Connection con=DriverManager.getConnection(url);
(3)建立查询语句进行查询Statement statement=connection.createStatement();
Statement.execute(“sql语句”) 来执行sql语句
(3) 获取查询结果
ResultSet resultSet= statement.executeQuery("查询语句");
While(resultSet.next())
{
resultSet.getInt(列名或列序号为参数);
resultSet.getString(列名或列序号为参数); //getInt或getString取决于列的类型
}
resultSet.close(); //使用完毕后关闭数据库连接

六. 常用的数据库对象
DatabaseMetaData 存放有关整个数据库的信息:表名,表的索引,数据库名及版本。
ResultSetMetaData 有关ResultSet中列的名称和类型,个数等信息。
ResultSet 对象是对一个一般宽度和未知长度的表的一种抽象,存放查询结果,用户可以按列名访问列,也可按顺序自上而下按行访问
七. 关于statement
1. jdbc提供了三个向数据库发送sql语句的类
(1)Statement 用于发送简单sql语句。
(2)PreparedStatement:由Connection对象的preparedStatement()方法创建,用于发送带一个或多个参数(IN参数)的sql语句,且PreparedStatement对象比Statement对象效率更高,因为她与编译过并存放在那儿以供将来使用。
(3)CallableStatement:由Connection对象的prepareCall()方法创建。CallableStatement对象用于执行SQL存储过程(一组可以通过名称来调用(像函数那样)的Sql语句)。CallableStatement对象从prepareStatement对象继承了处理IN参数的方法。而且增加了处理OUT参数和INOUT参数的方法。
2.上述三个类的对象有三种执行sql语句的方法,executeQuery用于select语句。executeUpdate用于insert、update和delete语句以及ddl语句,其返回值为影响的行数。执行语句的所有方法都将关闭所调用的Statement对象的当前打开结果集,所以在重新执行Statement对象前,需要完成对当前ResultSet对象的处理
3.statement对象将由java垃圾回收器自动关闭,但程序员应在不使用Statement对象时显示关闭他们。
4.execute使用
应该在需要返回多个ResultSet对象、多个更新计数(insert、update、delete)或多个更新计数与多个Resultset组合时使用execute方法(即执行存储过程时可能返回多个结果),可调用getResultSet方法获得第一个结果集,要想获得第二个结果集,先调用getMoreResult方法。再调用getResultSet方法。同理,要返回多个更新计数,首先要调用getUpdateCount方法返回第一个,再调用getMoreResult,再调用getUpdateCount。通常需要判断execute返回的都有什么,一种用来确认execute方法所产生的全部结果集和更新计数的方法:
stmt.execute(存储过程);
While(true)
{
Int rowCount=stmt.getUpdateCount();
if(rowCount>0){
stmt.getMoreResults();
continue;}
if(rowCount==0){
stmt.getMoreResults();
coutinue;}
//执行到下一行时,说明有一个结果集
ResultSet rs=stmt.getResultSet();
If(rs!=null){
While(rs.next()){
….
}
stmt.getMoreResults();
}
}}
八. 事务
通常调用方法commit或rollback是,当前事务即告结束,另一个事务随即开始。默认时连接将处于自动提交模式(执行完语句后自动调用commit方法,此时每个语句单独被提交,因此一个事务一个语句),若禁用自动提交模式,事务将等到commit或rollback方法被显示调用时才结束。为防止多个事务对同一个数据库操作时发生冲突,可用connection.setIsolationLevel(级别常量)方法设定事务隔离级别,一共有五级,如:TRANSACTION_READ_UNCOMMITTED表示在提交前读取值。设定隔离级别时,要在性能需求和数据一致性需求间权衡。要想改变一个事务的隔离级别,必须在事务开始前设置,并在事务结束后进行复位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值