JAVA笔记大全非常难得.docx
《JAVA笔记大全非常难得.docx》由会员分享,可在线阅读,更多相关《JAVA笔记大全非常难得.docx(71页珍藏版)》请在冰点文库上搜索。
JAVA笔记大全非常难得
JDBC
java-version查看JAVA版本
JDBC一套允许Java同一个SQL数据库对话的程序设计接口.
JDBC是执行SQL语句的API,其本身是一个产品的商标名.它由一组用Java语言编写的类与接口组成。
JDBC已成为一种供工具/数据库开发者使用的标准API,用户可以用纯JavaAPI来编写数据库应用程序。
使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。
JDBC是用于将Java程序和关系数据库连接起来的程序接口,通过这个接口,使用户可以将访问请求语句以SQL语句的形式编写出来,然后将该程序接口传送到数据库,结果再由同一个接口返回
JDBC力求达到SQL级API,这就意味着JDBC允许用户建立SQL语句,并将其嵌入到JavaAPI调用中,即为Java定义一个“调用级”(Call-level)的SQL接口
JDBCAPI被描述成一组抽象的Java接口,使得应用程序可以对某个数据库打开连接,执行SQL语句,并且处理结果。
JDBC是一组由驱动程序实现的Java接口。
驱动程序负责从标准JDBC调用向支持的数据库所要的具体调用转变
每个JDBC应用程序(或小程序)至少要有一个JDBC驱动程序,每个驱动程序是针对一种DBMS的。
但驱动程序不必直接连到数据库
JDBC接口分为两个层次,一个是面向程序开发人员的应程序层(JDBCAPI),开发人员用API通过SQL调用数据库和取得结果。
另外一个是底层的驱动程序层(JDBCDriverAPI),处理与具体驱动程序版本的所有通信
java.sql包括了所有的JDBCAPI
java.sql.DriverManager负责处理驱动程序的调入并且对产生新的数据库连接提供支持
java.sql.Connection代表对特定数据库的连接
java.sql.Statement代表一个特定的容器,用来对一个特定的数据库执行SQL语句
java.sql.ResultSet控制对一个特定语句行数据的存取
其中java.sql.Statement又有两个子类型:
java.sql.PreparedStatement用于执行预编译的SQL语句
java.sql.CallableStatement用于执行对一个数据库内嵌过程的调用
JDBC提供了连接数据库的几种方法:
直接通信、通过JDBC驱动程序通信、通过ODBC通信(JDBC通过JDBC-ODBC桥与ODBC数据源相连)
基本的JDBC数据库访问流程:
1.建立数据源:
这里所建的数据源是指建立ODBC数据源。
这一点是ODBC所必须的。
当我们使用JDBC-ODBC桥来建立连接时,必须先建立ODBC数据源
2.装入JDBC驱动程序:
加载驱动程序的操作只需要一句代码。
如果classname是jdbc.DriverXYZ,那么就把代码写成:
Class.forName("jdbc.DriverXYZ");对于JDBC-ODBC桥来说,如果classname是sun.jdbc.odbc.JdbcOdbcDriver,实际代码可写成Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")(sun.jdbc.odbc是JDBC-ODBC桥的驱动程序所在的程序包,根据开发环境不同可能不同)
3.建立连接:
与数据库建立连接的标准方法是调用方法DriverManager.getConnection(Stringurl,Stringuser,Stringpassword)。
DriverManager类用于处理驱动程序的调入并且对新的数据库连接提供支持,它位于JDBC的管理层,通过该类,能够连到由URL表示的数据库的驱动程序。
JDBCURL的标准语法是:
jdbc:
:
,其中subprotocol说明了使用哪种JDBC驱动程序,比如若是用的是JDBC-ODBC桥,就写为"odbc",若使用的是Sybase的JDBC驱动程序,就写"Sybase";subname则为驱动程序提供了连接数据库所需要的一切信息,比如jdbc:
Sybase:
//jdbcstudy:
4233/db_books,表示使用sybaseJDBC驱动程序,且连接安装在名为jdbcstudy的服务器的4233端口的db_books数据库中。
对于JDBC-ODBC桥来说,subname就是数据源名。
为了存取数据,还要提供用户名和口令。
例如:
Stringurl="jdbc:
odbc:
source";
Connectioncon=DriverManager.getConnection(url,"user","password");
4.执行SQL语句:
JDBC提供了Statement类来发送SQL语句,Statement类的对象用createStatement方法创建;SQL语句发送后,返回的结果通常存放在一个ResultSet类的对象中,ResultSet可以看作是一个表,这个表包含由SQL返回的列名和相应的值,ResultSet对象中维持了一个指向当前行的指标,通过一系列的getXXX方法,可以检索当前行的各个列,并显示出来
5.检索结果:
对Result对象进行处理后,才能见查询结果显示给用户。
Result对象包括一个由查询语句返回的一个表ResultSet,这个表中包含所有的查询结果。
对Result对象的处理必须逐行进行,ResultSet.next方法使指针下移一行。
而对每一行中的各个列,则可以按任何顺序进行处理。
Result类的getXXX方法可将结果集中的SQL数据类型转换为Java数据类型,如getInt、getString、getTime等
6.关闭连接:
对象使用完毕后,应当关闭连接
执行一个数据库调用不外乎就是创建一个Statement类(通过Connect接口),并通过该类的execute方法来实现。
用executeQuery()方法返回一个ResultSet,而executeUpdate()方法返回UPDATE、INSERT或DELETE语句所影响的行数
缺省情况下,JDBC在每一个SQL语句被送到数据库时才提交这些语句,这被称为“自动提交”。
实际上,为了使程序能够更好地进行错误处理,我们可以常见一个Connection对象,用以保证在未提交之前,数据库不会有任何改变,每一个Connection对象都是独立的,某一个该对象中的提交操作都不会对其他的对象造成影响。
Connection类提供了setAutoCommit()方法,使得我们可以关闭“自动提交”
importjava.sql.*
importjava.awt.*
publicclassJdbcexp
{
publicstaticvoidmain(String[]args)
{
StringURL="jdbc:
odbc:
source";//source是ODBC数据源
Connectioncon=null;//publicinterfaceConnection:
Aconnection(session)withaspecificdatabase.SQLstatementsareexecutedandresultsarereturnedwithinthecontextofaconnection.
Statementsm=null;//publicinterfaceStatement:
TheobjectusedforexecutingastaticSQLstatementandreturningtheresultsitproduces.
ResultSetrs=null;//publicinterfaceResultSet:
Atableofdatarepresentingadatabaseresultset,whichisusuallygeneratedbyexecutingastatementthatqueriesthedatabase.
try
{ //加载JDBC-ODBCbridge驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//publicfinalclassClass:
InstancesoftheclassClassrepresentclassesandinterfacesinarunningJavaapplication;staticClassforName(StringclassName):
ReturnstheClassobjectassociatedwiththeclassorinterfacewiththegivenstringname.
}
catch(Exceptione)
{
System.out.println("无法加载JDBC-ODBCbridge驱动程序");
return;
}
//与数据库连接并显示
try
{
con=DriverManager.getConnection(URL);//publicclassDriverManager:
WhenthemethodgetConnectioniscalled,theDriverManagerwillattempttolocateasuitabledriverfromamongstthoseloadedatinitializationandthoseloadedexplicitlyusingthesameclassloaderasthecurrentappletorapplication;staticConnectiongetConnection(Stringurl):
AttemptstoestablishaconnectiontothegivendatabaseURL.
sm=con.createStatement();//StatementcreateStatement():
CreatesaStatementobjectforsendingSQLstatementstothedatabase.
//执行SQL语句并显示
rs=sm.executeQuery("SELECT*FROMauthorsWHEREau_id>20000000");//ResultSetexecuteQuery(Stringsql):
ExecutesthegivenSQLstatement,whichreturnsasingleResultSetobject.
System.out.println("结果为:
");
while(rs.next())//booleannext():
Movesthecursordownonerowfromitscurrentposition.
{
//取各个字段的值
intau_id=rs.getint
(1);//intgetInt(intcolumnIndex):
RetrievesthevalueofthedesignatedcolumninthecurrentrowofthisResultSetobjectasanintintheJavaprogramminglanguage.
Stringau_name=rs.getString
(2);//StringgetString(intcolumnIndex):
RetrievesthevalueofthedesignatedcolumninthecurrentrowofthisResultSetobjectasaStringintheJavaprogramminglanguage.
Stringphone=rs.getString(3);
System.out.println("au_id="+au_id);
System.out.println("au_name="+au_name);
System.out.println("phone="+phone);
}
}
catch(SQLExceptione)
{}
finally//在finally作用范围内的代码块中的语句不管怎样都必须执行。
当程序运行中发生异常时,方法中的执行流程将被中断,赭石它就会跳过一些语句,过早地从程序中退出。
但是,在本例中,即使发生了异常使程序中断,也还是希望数据库连接能被正常关闭
{
try
{
//关闭对象
rs.close();
sm.close();
//关闭连接
con.close();
}
catch(SQLExceptione)
{}
}
}
}
-----------------------------------------------------------------------------------------------
importjava.sql.*
importjava.awt.*
publicclassJdbcexp1//不固定URL、用户名和口令,而是把它们作为参数,在程序执行的时候由用户输入
{
publicstaticvoidmain(String[]args)
{
StringURL="jdbc:
odbc:
source";//source是ODBC数据源
Connectioncon=null;
if(args.length!
=4)
{
//要求输入参数
System.out.println("语法:
javaJdbctexp"+"DRIVERURLUIDPASSWORD");
}
try
{ //加载JDBC驱动程序
Class.forName(args[0]);
}
catch(Exceptione)
{
System.out.println("无法加载JDBC-ODBCbridge驱动程序");
return;
}
//与数据库连接并显示
try
{
con=DriverManager.getConnection(args[1],args[2],args[3]);
System.out.println("连接成功");
}
catch(SQLExceptione)
{
e.printStackTrace();
}
finally
{
try
{
//关闭连接
con.close();
}
catch(SQLExceptione)
{
e.printStackTrace();
}
}
}
}
11:
08 |发送消息 |固定链接 |查看引用通告(0) |写入日志 |JDBC与Java数据库程序设计
访问数据库
Java语言增加了一个非常重要的内容:
Java数据库连接(JavaDatabaseConnectivity),简称JDBC
在关系型数据库中,有一个很重要的概念就是:
数据是唯一的。
也就是说,不管是什么样的数据,一定会有一种方法,使得我们能够唯一地确定某一条记录
现代计算机环境都是分布式的,客户机/服务器(CLient/Server,简称C/S)就是分布式的一个例子。
C/S是一种应用程序结构,它事实上是一种适当安排软硬件的概念。
主要是将运算功能与资源分散在服务器与工作站的架构,这种架构通常用于数据库处理工作中。
这种结构将对数据的处理划分成不同的应用程序,并分布到不同的机器上。
一个C/S程序将对数据的存储和检索交给数据库处理,而将对数据的操作和获得放到其它地方。
服务器是数据库引擎,负责数据的存储,是给予者;客户机则负责创建和获得数据,是需求者。
C/S结构通过消息传递机制,由客户端发出请求给服务器,服务器进行相应处理后经传递机制送回客户端。
一个C/S系统以服务器为中心,并允许多个客户机访问相同的数据。
我们一般所讲的C/S系统是一个两层结构。
一般来说,工作站所构成的那一层被称为客户机,又称为表示层,而数据存储层则是服务器,这个服务器是一个典型的包含所有信息的资源库。
客户机/服务器在分布处理过程中,使用基于连接的网络通信模式。
该通信模式首先在客户机和服务器之间定义一套通信协议,并创建一个Socket类,利用这个类建立一条可靠的链接;然后,客户机/服务器再在这条链接上可靠地传输数据。
客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务,即“请求—应答”模式。
实际上,系统的结构取决于应用程序。
由于在两层模型中,客户机直接连接到数据库上,这就是的应用程序对数据模型有很强的依赖性,一旦数据改变,应用程序也就不得不重写,这就导致了C/S模型的可扩充性差;此外C/S结构也导致了“肥客户机”问题;对象重用也是C/S结构所不能解决的问题
Browser/Server模型把C/S模型的服务器进一步深化,分解成一个应用服务器(Web服务器)和一个或多个数据库服务器,从而成为三层C/S结构。
B/S模型简化了C/S中的客户端,客户端只需装上OS、网络协议软件及浏览器;而服务器端则集中了所有的应用逻辑,开发、维护等几乎所有工作也都集中在服务器端。
这是的客户机被称为“瘦客户机”,服务器被称为“肥服务器”
三层C/S结构将Client端与用户界面无关的功能移到了中间层(第二层)。
所谓三层结构包括:
表示层:
是用户接口部分,是用户与系统间交互信息的界面。
它的主要功能是检查用户输入的数据,显示系统输出的数据。
如果表示层需要修改时,只需改写显示控制和数据校验程序,而不影响其他两层。
检查的内容也只限于数据格式和取值范围,不包括有关业务本身的处理逻辑
应用层:
是应用的主体,它包括了应用中全部的业务处理程序。
换句话说,除了输入/输出功能在表示层、数据库在数据层以外,全部的统计、汇总、分析、打印功能全部存放在应用层
表示层和应用层之间的数据交换要尽可能简洁。
在应用设计中,一定要避免一次业务处理在表示层和应用层之间进行多次数据交换的现象发生
数据层:
是数据库管理系统(DBMS)和数据库,负责管理对数据库数据的读写
B/S结构是由三层C/S结构转化而来的。
它将Web浏览器作为表示层,将大量的业务处理程序放在应用服务层上作为应用层,而将数据库放在数据库服务器(DBServer)上作为数据层。
在B/S结构中,应用服务器又被称为Web服务器,实质上,客户机与Web服务器之间类似于一种终端与主机的模式,而Web服务器与数据库服务器之间是一种C/S数据库模式。
Web服务器在逻辑上是独立的,但在物理上它既可以是独立的服务器,也可以与应用服务器(?
)一起放在同一个服务器中,构成B/S结构
在三层结构中,应用层包含了所有的事务处理程序,一般由数据存储接口和公用API组成:
表示层并不直接与数据库连接,而是通过应用层中的事物对象(BusinessObject)来访问数据。
一个事务对象提供了在数据库中存取数据的方法,而这些方法在对象之外都是不能获得的,而这些方法在对象之外都是不能获得的,也就是说,它不会影响其他的对象,但同时,事物对象也为外部对象提供了访问其公共接口的方法
在B/S结构中,采用Internet浏览器作为表示层
目前许多数据库系统均支持SQL,对于由SQL数据库组成的异构数据库系统,JDBC和ODBC为访问其异构成员提供了统一的方式。
ODBC(OpenDatabaseConnectivity),即开放式数据库连接,是用C语言写成的一种在不同数据库管理系统中存取数据的标准应用程序接口
ODBC使用结构化查询语言(SQL)作为其数据库访问语言。
其总体结构有4个组件:
应用程序:
执行处理并调用ODBCAPI函数,以提交SQL语句并执行结果
驱动程序管理器(DriverManager):
根据应用程序需要加载/卸载驱动程序,处理ODBC函数调用,或把它们传送到驱动程序上
驱动程序:
处理ODBC函数调用,提交SQL请求到一个指定的数据源,并把结果返回到应用程序。
如果有必要,驱动程序修改一个应用程序请求,以使请求与相关的DBMS支持的语法一致
数据源:
包括用户要访问的数据及其相关的操作系统、DBMS及用于访问DBMS的网络平台
每种数据库引擎都需要向驱动程序管理器注册它自己的ODBC驱动程序,当一个程序向ODBC发出一个SQL查询指令,驱动程序管理器就将请求从应用程序传给ODBC驱动程序,并由ODBC驱动程序翻译这个指令,以便相应的数据源识别出这个查询,并正确的响应。
ODBC驱动程序的使用把应用程序从具体的数据调用中隔离开来,驱动程序管理器针对特定数据库的各个驱动程序进行集中管理,并向应用程序提供统一的标准接口
JDBC(JavaDatab