JDBC学习笔记.docx

上传人:b****1 文档编号:766405 上传时间:2023-04-30 格式:DOCX 页数:19 大小:24.12KB
下载 相关 举报
JDBC学习笔记.docx_第1页
第1页 / 共19页
JDBC学习笔记.docx_第2页
第2页 / 共19页
JDBC学习笔记.docx_第3页
第3页 / 共19页
JDBC学习笔记.docx_第4页
第4页 / 共19页
JDBC学习笔记.docx_第5页
第5页 / 共19页
JDBC学习笔记.docx_第6页
第6页 / 共19页
JDBC学习笔记.docx_第7页
第7页 / 共19页
JDBC学习笔记.docx_第8页
第8页 / 共19页
JDBC学习笔记.docx_第9页
第9页 / 共19页
JDBC学习笔记.docx_第10页
第10页 / 共19页
JDBC学习笔记.docx_第11页
第11页 / 共19页
JDBC学习笔记.docx_第12页
第12页 / 共19页
JDBC学习笔记.docx_第13页
第13页 / 共19页
JDBC学习笔记.docx_第14页
第14页 / 共19页
JDBC学习笔记.docx_第15页
第15页 / 共19页
JDBC学习笔记.docx_第16页
第16页 / 共19页
JDBC学习笔记.docx_第17页
第17页 / 共19页
JDBC学习笔记.docx_第18页
第18页 / 共19页
JDBC学习笔记.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JDBC学习笔记.docx

《JDBC学习笔记.docx》由会员分享,可在线阅读,更多相关《JDBC学习笔记.docx(19页珍藏版)》请在冰点文库上搜索。

JDBC学习笔记.docx

JDBC学习笔记

JDBC学习笔记

(我们所学习的均为jdbc2.0规范,jdbc1.0为直接连接,而jdbc2.0它有JNDI服务,在服务器启动时自动创建一个连接池,定义了一个DataSource接口,用其标准才能使用JDBC连接池)

一、关于JDBC

1.连接到数据库的方法

 答:

1)ODBC(OpenDatabaseConnectivity)

一个以C语言为基础访问SQL为基础数据库引擎的接口,它提供了一致的接口用于和数据库沟通以及访问数据。

2)JDBC

Java版本的ODBC

2.JDBC应用编程接口

答:

JDBC应用编程接口是:

1)标准的数据访问接口,可以连到不同的数据库;

2)JAVA编程语言的一组类和接口。

JDBC应用编程接口能够:

1)连接到数据库;

2)发SQL查询字符串到数据库;

3)处理结果。

JDBC应用编程接口有二个主要的部分:

1)JAVA应用程序开发接口面向JAVA应用程序开发者;

2)JDBC驱动程序开发接口。

3.JDBCDriver

答:

1)一大堆实现了JDBC类和接口的类;

2)提供了一个实现java.sql.Driver接口的类。

4.JDBCDriver的四种类型

答:

1)JDBC-ODBC桥

由ODBC驱动提供JDBC访问,JDBCZ转换为ODBC。

2)NativeBridge

Java对数据库的访问转化为数据库客户端对数据库的访问,所以需要安装数据库客户端(API)。

3)JDBC-net

直接发送到数据库被数据库监听。

纯的Javadriver,将JDBC调用转入DBMS,与网络协议无关。

然后通过服务器将调用转为DBMS协议。

4)本地协议

纯的javadriver,将JDBC调用直接转为DBMS使用的网络协议

5.JDBC开发者接口

答:

1)java.sql--java2平台下JDBC的主要功能,标准版(J2SE)

2)javax.sql--java2平台下JDBC增强功能,企业版(J2EE)

6.使用URL确认数据库

答:

我们使用URL来确定一个数据库(正确的Driver,正确的主机,正确的协议,正确的协议,正确的用户名和密码);

语法:

protocol:

subprotocol:

subname

范例:

jdbc:

db2:

MyTest

jdbc:

db2:

//localhost:

6789/MyTest

-------------------------------oracle--------------------------------

驱动:

oracle.jdbc.driver.OracleDriver

URL:

jdbc:

oracle:

thin:

@<:

port>:

dbname

注:

machine_name:

数据库所在的机器的名称;(或IP)

port:

端口号,默认是1521

-------------------------------mysql--------------------------------

驱动:

org.gjt.mm.mysql.Driver

URL:

jdbc:

mysql:

//<:

port>/dbname

注:

machine_name:

数据库所在的机器的名称;(或IP)

port:

端口号,默认3306

----------------------------pointbase---------------------------------

驱动:

com.pointbase.jdbc.jdbcUniversalDriver

URL:

jdbc:

pointbase:

server:

//<:

port>/dbname

注:

machine_name:

数据库所在的机器的名称;(或IP)

port:

端口号,默认是9092

---------------------------SQLServer---------------------------------

驱动:

com.microsoft.jdbc.sqlserver.SQLServerDriver

URL:

jdbc:

microsoft:

sqlserver:

//<:

port>;DatabaseName=

注:

machine_name:

数据库所在的机器的名称;(或IP)

port:

端口号,默认是1433

--------------------------DB2---------------------------------------------

驱动:

com.ibm.db2.jdbc.app.DB2Driver

URL:

jdbc:

db2:

//<:

port>/dbname

注:

machine_name:

数据库所在的机器的名称;(或IP)

port:

端口号,默认是5000

7.javax.sql包JDBC2.0的增强功能

      1)数据源接口;

2)连接池;

3)分布式交易;

4)行集;

二、基本的JDBC应用

1、创建一个基本的JDBC应用

答:

1)步骤一:

注册一个driver;

1driver被用于连接到数据库;

2JDBC应用编程接口使用第一个能成功连接到给定URL的driver;

3在同一时间可以转载多个driver

注册一个driver的方法:

1使用类loader(装载;实例化;注册入DriverManager)

Class.forName(“oracle.jdbc.driver.OracleDriver”);

a.Class.forName(“Com.ibm.db2.jdbc.app.DB2Driver”);

b.Class.forName(“C.DB2Driver”);

c.Class.forName(“Com.microsoft.jdbc.sqlServer.SQLServerDriver”);

d.Class.forName(“oracle.jdbc.driver.OracleDriver”);

e.Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

②实例化一个Driver

a.Driverdrv=newCOM.cloudscape.core.RmiJdbcDriver();

2)步骤二:

建立一个到是数据库的连接;

第一个方法:

DriverManager调用getConnection(urlString)方法,实际上调用的是driver的connect(urlString)方法;

Connectioncon=DriverManager.getConnection

(“jdbc:

oracle:

thin:

@192.168.1.100:

1521:

tarenadb”,”tarenadb”,”tarenadb”);

①当一个driver肯定地对应到一个数据库URL,DriverManager建立一个连接;

2当没有driver匹配,返回null然后下一个driver被校验;

3假如没有建立连接,抛出一个SQLException异常

第二种方法:

调用driver的connect方法。

1创建一个到指定Driver实例的直接调用;

2避免一般访问的问题

Driverdrv=newCOM.ibm.db2.jdbc.app.DB2Driver();

//Driverdrv=neworacle.jdbc.dri;

Connectioncon=null;

try{com=drv.connect(“jdbc:

db2:

MyTest”,newProperties())}

catch(SQLExceptione){}

3)步骤三:

创建一个statement;

①Statement的三个接口:

a.Statement;

b.PrepareStatement(继承自Statement);

c.CallableStatement(继承自PrepareStatement)

2使用方法connection.createStatement()得到一个Statement对象

PreparedStatement对象

1调用ProparedStatement比statement更高效;

2继承自Statement;

3语法PrepareStatementpstm=connection.prepareStatement(sqlString);

CallableStatement对象

1通过CallableStatement调用数据库中的存储过程;

2继承自PreparedStatement;

3CallableStatementcstm=connection.prepareCall(“{callreturn_student[?

?

]}”);

cstm.setString(1,”8623034”);

cstm.registerOutparameter(2,Types.REAL);

cstm.execute();

floatgpa=cstm.getFloat

(2);

#Statement接口的比较

答:

|Statement|PreparedStatement|CallableStatement

------------------------------------------------------------------------------

写代码位置|客户端|客户端|服务器端

------------------------------------------------------------------------------

写代码位置|客户端|服务器端|服务器端

------------------------------------------------------------------------------

编写代码技术|Java,SQL操作|Java,SQL操作|数据库的程序语言,如PL/SQL

------------------------------------------------------------------------------

可配置性|高|第一次高,以后低|低

------------------------------------------------------------------------------

可移植性|高|假设支持PreparedStatement的话高

------------------------------------------------------------------------------

传输效率|低|第一次低,以后高|高

4)步骤四:

执行SQL语句:

通过接口方法将SQL语句传输至黙认的数据库连接,返回结果可能是一个数据表,可以通过java.sql.ResultSet访问。

①Statement的接口方法:

a.executeQuery(sqlString):

执行给定的SQL声明,返回一个结果集(ResultSet)对象;

b.executeUpdate(sqlString):

执行给定的SQL声明,可以是INSERT、UPDATE或DELETE声明,也可以是SQLDDL声明;

c.execute(sqlString):

执行给定的SQL声明。

5)步骤五:

处理结果:

①使用结果集(ResultSet)对象的访问方法获取数据;

a.next():

下一个记录

b.first():

第一个记录

c.last():

最后一个记录

d.previous():

上一个记录

while(rs.next()){

System.out.print(“name:

”+rs.getString

(1));

System.out.print(“\tgender:

”+rs.getString

(2));

System.out.print(“\tage:

”+rs.getInt(3));

System.out.print(“\tgpa:

”+rs.getFloat(4));

}

②通过字段名或索引取得数据,rs.getString(列名)或者rs.getString(列名数字)。

③结果集保持了一个指向了当前行的指针,初始化位置为第一个记录前。

6)步骤六:

关闭JDBC对象

①首先关闭记录集;

②其次关闭声明;

③最后关闭连接对象。

最经典的关闭这三个对象的程序是:

publicvoidclose(ResultSetrs,Statementstm,Connectioncon)

{if(rs!

=null){try{rs.close();}catch(Exceptionme)}}

{if(stm!

=null){try{stm.close();}catch(Exceptionme)}}

{if(con!

=null){try{con.close();}catch(Exceptionme)}}

2.经常使用的一些JDBCURL

答:

1)JDBC-ODBC:

jdbc:

odbc:

2)Oracle:

jdbc:

oracle:

oci:

@orjdbc:

oracle:

thin:

@

3)WeblogicMS-SQL:

jdbc:

weblogic:

mssqlserver4:

@:

4)DB2:

jdbc:

db2:

MyTestorjdbc.db2:

//localhost:

6789/MyTest(需要用户名和密码)

3.Statement的类型:

答:

1)Statement接口:

用来封装任意一条SQL语句,但仅仅限于静态的SQL命令。

a.得到一个Statement:

Statementstm=con.createStatement();

Statementstm=con.createStatement(intresultSetType,intresultSetConcurrency);//生成一个指定的结果集类型的Statement

其中第一个参数:

resultSetType可指定为下列三种形式之一:

ResultSet.TYPE_FORWARD_ONLY//不可回卷,只能依次从前往后读。

ResultSet.TYPE_SCROLL_INSENSITIVE//可回卷,但对底层数据库的修改不敏感。

ResultSet.TYTP_SCROLL_SENSITIVE//可回卷,并且对底层数据库的修改不敏感

其中第二个参数:

resultSetConcurrency可指定为下列两种形式之一:

ResultSet.CONCUT_READ_ONLY//结果集只读,不可更新

ResultSet.CONCUT_UPDATABLE//结果集可更新

b.得到执行结果:

ResultSetrs=stm.executeQuery(“selectname,gender,age,gpafromstudent0506”);(返回结果集)

intI=stm.executeUpdate(“insertintostudent0506values(\”tony\”,\”male\”,20,89)”);(返回改变的行数)

Booleanb=stm.execute(“droptablesudent0506”);(返回是否执行成功)

2)PreparedStatement接口,Statement的子接口:

用来封装一条带参数的SQL语句,可以用来代替参数。

a.得到一个PreparedStatement:

PreparedStatementpstm=con.prepareStatement(“insertintostudent0506valuse(?

?

?

?

)”);

Con.prepareStatement()方法同样可以在后面给2个表示结果集类型的参数,设置与上相同。

b.设置SQL语句中的参数,并执行SQL语句:

pstm.setString(1,”tony”);

pstm.setString(2,”male”);

pstm.setInt(3,20);

pstm.setFloat(4,89.5f);

pstm.excuteUpdate();

3)CallableStatement,接口,PreparedStatement的子接口,用来封装被数据库支持的非SQL语句,常常用来执行SQL存储过程(一系列的SQL命令组成的集合,用来完成一系列的工作)。

a.得到一个CallableStatement:

CallableStatementcs=con.prepareCall(Stringsql);

如果sql带参数,就在新建时传给它,不带参数?

可用代替。

例如:

CallableStatementcstm=con.prepareCall(“{Callreturn_student}”);

cstm.setString(1,”8613034”);

cstm.registerOutParament(2,Types.REAL);

cstm.execute();

floatgpa=cstm.getFloat

(2);

return_student(Stringstr,floatgpa){selectgpafromStudentwhereid=str}

4.Statement接口的比较

Statement

PreparedStatement

CallableStatement

写代码位置

客户端

客户端

服务器端(数据库端生成)

存代码位置

客户端

服务器端

服务器端(在服务器端转化)

编写代码技术

Java,SQL操作

Java,SQL操作

数据库的程序语言,如PL/SQL

可配置性

第一次高,以后低

可移植性

假设支持PreparedStatement的话高

传输效率

第一次低,以后高

5.数据表和类对应的三种关系:

答:

1)一个表对应一个类;

2)一个表对应相关类;

3)一个表对应整个类关系层

6.类间关系的几种表设计:

答:

1)为每个类创建一个表:

最接近面向对象的思想,且能支持多态,且维护容易,但是这需要很多时间去维护很多表,花更多的时间去读写这个表,直接从一个表来得到一个记录比较困难。

2)为每个实体类创建一个表(抽象类则不):

比较容易得到一个记录,但是如果你改动了一个类,则必须改变这个表和这个类的子类的表。

3)为一张完整的类的层次结构建一张表。

支持多态,且维护简单,比较容易直接从一个表来得到一个记录,但是任何一个类的修改都会影响该表,且这个表会异常庞大等。

7.SQL数据类型及其相应的Java数据类型

答:

SQL数据类型Java数据类型说明

-------------------------------------------------------------------------------

INTEGER或者INTint通常是个32位整数

SMALLINTshort通常是个16位整数

NUMBER(m,n)DECIMAL(m,n)Java.sql.Numeric合计位数是m的定点十进制数,小数后面有n位数

DEC(m,n)Java.sql.Numeric合计位数是m的定点十进制数,小数后面有n位数

FLOAT(n)double运算精度为n位二进制数的浮点数

REALfloat通常是32位浮点数

DOUBLEdouble通常是64位浮点数

CHARACTER(n)或CHAR(n)String长度为n的固定长度字符串

VARCHAR(n)String最大长度为n的可变长度字符串

BOOLEANboolean布尔值

DATEJava.sql.Date根据具体设备而实现的日历日期

TIMEJava.sql.Time根据具体设备而实现的时戳

TIMESTAMPJava.sql.Timestamp根据具体设备而实现的当日日期和时间

BLOBJava.sql.Blob二进制大型对象

CLOBJava.sql.Clob字符大型对象

ARRAYJava.sql.Array

三.JDBC的高级特性

1.元数据

答:

关于数据的信息,例如类型或者容量。

通过JDBCAPI可以访问:

1)数据库元数据;

a.使用connection.getMetadata方法得到DataMetaData对象,从而获取关于数据库的信息。

b.能够使用DataMetaData.isReadOnly()此类方法获取关于数据库信息。

2)结果集元数据;

a.使用ResultSet.getMetadata方法返回ResultSetMetaData对象

b.能够使用getColumnCount此类方法获取信息

2.数据库的事务处理ppt52

答:

1)一系列的动作作为一个不可分的操作;

2)JDBCAPI中使用事务处理步骤:

a.设置是否需要系统自动提交事务,如果不需要则用false作为参数调用Connection.setAutoCommit()方法;

b.执行一或多个关于数据库的操作;

c.调用Cmit方法完成改变;

d.恢复上次提交后的改变,调用Connection.rollback()方法,则从上一次提交开始回滚。

例子如下:

try

{

con.setAutoCommit(false);

Statementstm=con.createStatement();

stm.executeUpdate("insertintostudent(name,age,gpa)values('gzhu',30,4.8)");

mit();

}

catch(SQLExceptione)

{

try

{

con.rollback();

}

catch(Exceptione){}

}

3.数据库的并发控制ppt54

答:

1)设置隔离级

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2