简述教育的文化功能jdbc的基本功能

JDBC技术简介
JDBC技术,简介
&JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库 JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。一、ODBC到JDBC的发展历程 说到JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。它们之间有没有联系呢?如果有,那么它们之间又是怎样的关系呢? ODBC是OpenDatabaseConnectivity的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。 1.ODBC的结构模型 ODBC的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和数据源。 应用程序接口:屏蔽不同的ODBC数据库驱动器之间函数调用的差别,为用户提供统一的SQL编程接口。 驱动器管理器:为应用程序装载数据库驱动器。 数据库驱动器:实现ODBC的函数调用,提供对特定数据源的SQL请求。如果需要,数据库驱动器将修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。 数据源:由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。 虽然ODBC驱动器管理器的主要目的是加载数据库驱动器,以便ODBC函数调用,但是数据库驱动器本身也执行ODBC函数调用,并与数据库相互配合。因此当应用系统发出调用与数据源进行连接时,数据库驱动器能管理通信协议。当建立起与数据源的连接时,数据库驱动器便能处理应用系统向DBMS发出的请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。 2.JDBC的诞生 自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java程序开发上投入的精力日益增加,对java语言接口的访问数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)就成为Java语言的标准部件。 二、JDBC技术概述 JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface,应用程序设计接口)。它由一些Java语言写的类、界面组成。JDBC给数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。 通过使用JDBC,开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不必写一个程序访问Sybase,写另一个程序访问Oracle,再写一个程序访问Microsoft的SQLServer。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统(DBMS)。不但如此,使用Java编写的应用程序可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用时真正实现“WriteOnce,RunEverywhere!” Java具有健壮、安全、易用等特性,而且支持自动网上下载,本质上是一种很好的数据库应用的编程语言。它所需要的是Java应用如何同各种各样的数据库连接,JDBC正是实现这种连接的关键。 JDBC扩展了Java的能力,如使用Java和JDBCAPI就可以公布一个Web页,页中带有能访问远端数据库的Ap?plet。或者企业可以通过JDBC让全部的职工(他们可以使用不同的操作系统,如Windwos,Machintosh和UNIX)在In?tranet上连接到几个全球数据库上,而这几个全球数据库可以是不相同的。随着越来越多的程序开发人员使用Java语言,对Java访问数据库易操作性的需求越来越强烈。 MIS管理人员喜欢Java和JDBC,因为这样可以更容易经济地公布信息。各种已经安装在数据库中的事务处理都将继续正常运行,甚至这些事务处理是存储在不同的数据库管理系统中;而对新的数据库应用来说,开发时间将缩短,安装和版本升级将大大简化。程序员可以编写或改写一个程序,然后将它放在服务器上,而每个用户都可以访问服务器得到最新的版本。对于信息服务行业,Java和JDBC提供了一种很好的向外界用户更新信息的方法。 1.JDBC的任务 简单地说,JDBC能完成下列三件事: 1)同一个数据库建立连接; 2)向数据库发送SQL语句; 3)处理数据库返回的结果。 2.JDBC一种底层的API JDBC是一种底层API,这意味着它将直接调用SQL命令。JDBC完全胜任这个任务,而且比其他数据库互联更加容易实现。同时它也是构造高层API和数据库开发工具的基础。高层API和数据库开发工具应该是用户界面更加友好,使用更加方便,更易于理解的。但所有这样的API将最终被翻译为象JDBC这样的底层API。目前两种基于JDBC的高层API正处在开发阶段。 1)SQL语言嵌入Java的预处理器。虽然DBMS已经实现了SQL查询,但JDBC要求SQL语句被当作字符串参数传送给Java程序。而嵌入式SQL预处理器允许程序员将SQL语句混用:Java变量可以在SQL语句中使用,来接收或提供数值。然后SQL的预处理器将把这种Java/SQL混用的程序翻译成带有JDBCAPI的Java程序。 2)实现从关系数据库到Java类的直接映射。Javasoft和其他公司已经宣布要实现这一技术。在这种“对象/关系”映射中,表的每一行都将变成这类的一个实例,每一列的值对应实例的一个属性。程序员可以直接操作Java的对象;而存取所需要的SQL调用将在内部直接产生。还可以实现更加复杂的映射,比如多张表的行在一个Java的类中实现。 随着大家对JDBC兴趣的不断浓厚,越来越多的开发人员已经开始利用JDBC为基础的工具进行开发。这使开发工作变得容易。同时,程序员也正在开发对最终用户来说访问数据库更加容易的应用程序。 3.JDBC和ODBC及其他API的比较 到目前为止,微软的ODBC可能是用得最广泛的访问关系数据库的API。它提供了连接几乎任何一种平台、任何一种数据库的能力。那么,为什么不直接从Java中直接使用ODBC呢? 回答是可以从Java中使用ODBC,但最好在JDBC的协助下,用JDBC-ODBC桥接器实现。那么,为什么需要JDBC呢?要回答这个问题,有这么几个方面: 1)ODBC并不适合在Java中直接使用。ODBC是一个C语言实现的API,从Java程序调用本地的C程序会带来一系列类似安全性、完整性、健壮性的缺点。 2)其次,完全精确地实现从C代码ODBC到JavaAPI写的ODBC的翻译也并不令人满意。比如,Java没有指针,而ODBC中大量地使用了指针,包括极易出错的空指针“void*”。因此,对Java程序员来说,把JDBC设想成将ODBC转换成面向对象的API是很自然的。 3)ODBC并不容易学习,它将简单特性和复杂特性混杂在一起,甚至对非常简单的查询都有复杂的选项。而JDBC刚好相反,它保持了简单事物的简单性,但又允许复杂的特性。 4)JDBC这样的JavaAPI对于纯Java方案来说是必须的。当使用ODBC时,人们必须在每一台客户机上安装ODBC驱动器和驱动管理器。如果JDBC驱动器是完全用Java语言实现的话,那么JDBC的代码就可以自动的下载和安装,并保证其安全性,而且,这将适应任何Java平台,从网络计算机NC到大型主机Mainframe。 总而言之,JDBCAPI是能体现SQL最基本抽象概念的、最直接的Java接口。它建构在ODBC的基础上,因此,熟悉ODBC的程序员将发现学习JDBC非常容易。JDBC保持了ODBC的基本设计特征。实际上,这两种接口都是基于X/OPENSQL的调用级接口(CLI)。它们的最大的不同是JDBC是基于Java的风格和优点,并强化了Java的风格和优点。 最近,微软又推出了除了ODBC以外的新的API,如RDO,ADO和OLEDB。这些API事实上在很多方面上同JDBC一样朝着相同的方向努力,也就是努力成为一个面向对象的,基于ODBC的类接口。然而,这些接口目前并不能代替ODBC,尤其在ODBC驱动器已经在市场完全形成的时候,更重要的是它们只是ODBC的“漂亮的包装”。 4.JDBC两层模型和三层模型 JDBC支持两层模型,也支持三层模型访问数据库。 两层模型中,一个java Appple或者一个JA-va应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“Client/Server”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是intranet,比如连接全体雇员的企业内部网,当然也可以是internet。 在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们 返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。 到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。而JDBC是允许从一个java“中间层”访问数据库的关键。
软件开发专题推荐
Copyright & 2004 -
版权所有 中文域名:站长.cn 站长.中国
中国 苏ICP备号
免责声明:以上教程信息由会员自行搜集、整理、发布,内容的真实性、准确性和合法性由发布会员负责。站长学院对此不承担任何责任。天极传媒:天极网全国分站
您现在的位置: &&
JDBC2.0扩展API
yesky 00:00
 ∽钚掳娴JDBC 2.0 API被划分为两部分:JDBC 2.0核心API和JDBC 2.0标准扩展API。核心API在java.sql里面。这是原来的版本就实现了的基本的功能。标准扩展API在javax.sql里面。由JDBC2.0规范新规定的一些接口在这里面。当然,JDBC2.0也对原来版本的java.sql核心做了一些改动。不过不是很大。原来JDBC1.0的程序可以不加修改的在JDBC2.0上运行。这是Java的一贯的良好的作风。最新的JDBC包可以从公司的网站上下载。
  JDBC2.0的扩展API增加了一些数据访问和数据源访问的重大的功能。这中间有一些是主要用来做企业计算的。用JDBC2.0的新的扩展包,JDBC提供了一个从JAVA2平台的的数据访问的方法。  首先,我们来看看JDBC标准扩展的API怎样来和JDBC2.0结合在一起的。JDBC2.0包括两个包:  1、 java.sql包,个包里面是JDBC2.0的核心API。它包括了原来的JDBC API(JDBC 1.0版本),再加上一些新的2.0版本的API。这个包在Java
2 Platform SDK里面有。  2、 javax.sql包,这里面是JDBC2.0的标准扩展API。这个包是一个全新的,在Java 2 Platform SDK, Enterprise
Edition里面单独提供。  JDBC2.0的核心API包括了JDBC1.0的API,并在此基础上增加了一些功能,对某些性能做了增强。使java语言在数据库计算的前端提供了统一的数据访问方法,效率也得到了提高。  JDBC是向后兼容的,JDBC1.0的程序可以不加修改的运行在JDBC2.0上。但是,假如程序中用到了JDBC2.0的新特性,就必须要运行在JDBC2.0版本上。  概括的来说,JDBC核心API的新特性在两个方面做了工作。一个是支持一些新的功能,另一个就是支持SQL3的数据类型。  1、 在支持新功能方面:包括结果集可以向后滚动,批量的更新数据。另外,还提供了UNICODE字符集的字符流操作。  2、 在支持SQL3的数据类型方面:包括新的SQL3数据类型,增加了对持久性对象的存贮。  为了对数据的存取,操作更加方便,JDBC的新特性是程序的设计更容易了。例如:数据块的操作能够显著的提高数据库访问的性能。新增加的BLOB, CLOB,和数组接口能够是应用程序操作大块的数据类型,而不必客户端在存贮之前进行其它的处理。这样,就显著的提高了的使用效率。
(作者:ilamei 责任编辑:)
欢迎在新浪微博上关注我们
笔记本手机数码家电怎么用JAVA,JDBC写给类,功能能在控制台操作SQL语句_百度知道
怎么用JAVA,JDBC写给类,功能能在控制台操作SQL语句
能在myeclipse 控制台能操作数据库进行SQL操作:SQL&gt。例功能
/sa&用户名 /localhost.printStackTrace();private final String PASSWORD = &quot.加载数据库驱动失败;&#47.sql、插入和删除等; 返回执行情况 } public ResultSet executeQuery(String sql) {/&#47:
catch (SQLException e) {
e.com.executeQuery(sql);&#47.println(&quot.toString());
rs = //&#47.newInstance().:1433;连接mysql数据库方法 /DatabaseName=RegUser&/.createStatement();
} finally {
if (conn == null)
creatConnection(); 默认执行成功
if (conn == null)
creatConnection();&#47.sql, PASSWORD);/&#47、修改和删除记录
boolean isUpdate =&#47.close().println(
catch (SQLException e)
e. /////sun.forName(DRIVER); 创建数据库连接
catch (SQLException e)
isCreated =
isUpdate = false:/private final String URL=&quot.sa&quot.jdbc:com.toString());;.*;;&#47.println(e;
catch (SQLException e)
S 返回创建情况 } public boolean executeUpdate(String sql)
{///./; 用来关闭数据库连接
stmt./import java.getConnection(URL!&quot.createStatement(); private final String USERNAME=&
Statement stmt = private final String DRIVER=&&#47:/ 连接sql数据库的方法;
Statement stmt =// 创建失败
return isC&#47:3306//private final String USERNAME = &quot,用jdbc-odbc桥方法,现在基本不用 private final String URL = &quot, USERNAME;&#47:mydata&sa&
} } public boolean creatConnection() {/ 执行失败
return isUpdate!= null)
{/ 用来创建数据库连接
boolean isCreated =//); &#47: 加载数据库驱动
} catch (Exception ex)
System. public DataOperator() {
C/private final String URL=&/123& private final String PASSWORD=&//&#47.//test&
}private final String DRIVER=& 返回查询结果集 } public void closeConnection() {/连接 用来查询记录
ResultSet rs =public class DataOperator{ private final String DRIVER = &quot.JdbcOdbcDriver&&#47.printStackTrace().路径 // &#47.SQLServerDriver& 默认创建成功
conn = DriverManager给你一个我用JAVA写的一个数据库来连接类可以对数据进行查询.Driver&/;、更新;/密码 private Connection conn = null.executeUpdate(sql);
S 用来插入:驱动 &#47
其他类似问题
为您推荐:
其他4条回答
import java.sql.PreparedS
import java.sql.ResultS
public class DataBaseDAO{
public Person login (String id,String passwd)throws Exception
Person per=new Person();
String sql=&select name from person where id=? and password=?&;
PreparedStatement ps =
DataBaseconnection dbc =
dbc = new DataBasecon();
ps = dbc.getConnection().prepareStatement(sql);
ps.setString(1, id);
ps.setString(2, passwd);
ResultSet rs = ps.executeQuery();
if(rs.next())
per.setName(rs.getString(1));
rs.close();
ps.close();
dbc.colse();
这需要写三个类一个是操作的数据库...
要导入sql.jar类库,不然什么都不能用!给个邮箱我发给你
楼主应该把需求说的更详细一些...
其实这个很简单啊。只是打印语句而已,
sql语句的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁JDBC强化练习及答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
JDBC强化练习及答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢今天老师给我们讲的是JDBC,以下是JDBC中的内容:&
原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
一致性(consistency):在事务处理执行前后,数据库是一致的(两个账户要么都变,或者都不变)。
隔离性(isolcation):一个事务处理对另一个事务处理没有影响。
持续性(durability):事务处理的效果能够被永久保存下来 。
Connection.setAutoCommit(false): 关闭自动提交,打开事务。
<mit(): 提交事务。
Connection.rollback():& 回滚事务。
Savepoint sp=conn.setSavepoint(): 设置保存点。
Conn.rollback(sp):回滚到保存点。
Conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
设置隔离级别、可以通过Connection中得常量设置。
在多线程并发访问数据库并且使用事务的时候, 可能会遇到脏读, 不可重复读, 幻读的情况, 需要设置隔离级别来避免。
脏读: &&读到的线程未提交的数据。
不可重复读: &&在一个事务中读取同一个记录两次, 获取数据不同。
幻读: &&在一个事务中, 读取到的记录数不同。
select @@tx_isolation:&& 查看隔离级别
set transaction isolation level read uncommitted: 设置读未提交
set transaction isolation level read committed:& 设置读已提交
set transaction isolation level repeatable read: 设置可重复读
set transaction isolation level serializable: 设置可序列化
start transaction:& 开始事务
rollback:& 回滚事务
commit: 提交事务
获取插入的ID
conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rs = ps.getGeneratedKeys();
if (rs.next())
&&& user.setId(rs.getInt(1));
MySQL的select last_insert_id()可以获取之前插入的记录的id, 但这只是MySQL才有的函数
只有对自增长的列发生自增长的赋&#20540;后才会导致一个key的产生,并且用getGereratedKeys()返回。
由于建立连接, 以及发送数据非常消耗性能, 如果有大批SQL命令需要处理, 最好使用批处理
ps = conn.prepareStatement(&insert into user(name,password,email,birthday) values(?,?,?,?)&);
for (User user : list) {
&&& ps.setString(1, user.getName());
&&& ps.setString(2, user.getPassword());
&&& ps.setString(3, user.getEmail());
&&& ps.setDate(4, new Date(user.getBirthday().getTime()));
&&& ps.addBatch();
ps.executeBatch();
通过ResultSet的滚动可以设置获取记录的位置, 但这样是从数据库中查询出所有数据, 然后再从结果中筛选结果, 性能非常低。
MySQL提供了分页语法. 在查询语句后可使用LIMIT关键字完成分页功能, 例如:
select * from user limit 40,20
查询从user表中取出从第41条开始的20条记录. 第一个参数表示忽略前面多少个, 第二个参数代表取多少个.
可更新结果集、敏感结果集
conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet.TYPE_SCROLL_SENSITIVE
表示获得ResultSet之后是敏感的, 随数据库更新的. 但MySQL没有支持这项功能
ResultSet.CONCUR_UPDATABLE
表示获得ResultSet之后是可更新的, 例如:
rs.next();
rs.updateString(&name&, &updateName&);
rs.updateRow();
可以将当前行的name属性改为updateName.
元信息数据库元信息
由于每种数据库对JDBC的实现都有所不同, 我们在使用的时候想要了解哪些数据库支持哪些功能, 就可以查看元信息
DatabaseMetaData data = conn.getMetaData():数据库元信息
data.getDatabaseProductName():数据库名
data.getDatabaseProductVersion():数据库版本号
data.getDriverName():驱动名
data.getDriverVersion():驱动版本号
data.supportsTransactions():是否支持事务
data.getDefaultTransactionIsolation():默认事务隔离级别
data.supportsTransactionIsolationLevel(0):是否支持指定的事务隔离级别
data.supportsGetGeneratedKeys():是否支持获取主键
data.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE):是否支持敏感结果集
1.1.&&&&& 结果集元信息
我们可以根据结果集元信息来写一些灵活性很高的代码. 让代码的复用性更高.
ResultSetMetaData rsmd = ps.getMetaData():获取结果集元信息
rsmd.getColumnCount():获取结果集中包含几列
rsmd.getColumnName(1):获取指定列的名字
rsmd.getColumnLabel(1):获取指定列的别名
rsmd.getColumnClassName(1):获取指定列的Java类型
rsmd.getColumnTypeName(1):获取指定列的数据库类型
Class.getConstructors():获取所有构造函数
Class.getConstructor(Class...):获取到class中带有指定类型参数的构造函数
Constructor.newInstance(Object...):使用构造函数创建对象, 传入指定参数
Class.getMethods():获取所有公有方法, 包括继承的
Class.getDeclaredMethods():获取所有类中定义的方法, 包括私有的
Class.getMethod(String, Class...):获取指定方法名和参数类型的方法(公有的)
Class.getDeclaredMethod(String, Class...):获取指定方法名和参数类型的方法(类中定义的)
Method.invoke(Object, Object...):在制定对象上运行方法, 将制定参数传入
Class.getFields():获取所有公有属性(包括父类继承的)
Class.getDeclaredFields():获取所有定义的属性(包括私有的)
Class.getField(String):获取指定属性(公有属性)
Class.getDeclaredField(String):获取指定属性(定义属性)
Field.set(Object, Object):设置指定对象的属性&#20540;
Field.get(Object):获取指定对象的属性&#20540;
Filed.setAccessible(Boolean):设置访问权限
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:86072次
积分:1307
积分:1307
排名:第18220名
原创:64篇
评论:33条
(3)(2)(14)(24)(12)(15)

我要回帖

更多关于 简述bios的基本功能 的文章

 

随机推荐