文档库 最新最全的文档下载
当前位置:文档库 › JDBC

JDBC

JDBC
JDBC

JDBC

(Java Database Connectivity)

一、概述:

JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。

ODBC:基于C语言的数据库访问接口。

JDBC也就是Java版的ODBC。

JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。

1.在JDBC中包括了两个包:java.sql和javax.sql。

①java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连

接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处

理,比如批处理更新、事务隔离和可滚动结果集等。

②javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管

理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接

池、分布式事务和行集等。

注:除了标出的Class,其它均为接口。

API 说明

java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获

得数据库提供的信息、所支持的SQL语法、存储过程和此连

接的功能等信息。代表了数据库。

java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程

序都应该提供一个实现Driver接口的类。

java.sql.DriverManager (Class) 管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在‖jdbc.drivers‖系统属性中引用的驱动程序。只是一个辅助类,是工具。

java.sql.Statement 用于执行静态SQL语句并返回其生成结果的对象。

java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语

句被预编译并且存储在PreparedStatement对象中。然后可以

使用此对象高效地多次执行该语句。

java.sql.CallableStatement 用来访问数据库中的存储过程。它提供了一些方法来指定语

句所使用的输入/输出参数。

java.sql.ResultSet 指的是查询返回的数据库结果集。

java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对

象。

2、驱动程序按照工作方式分为四类:

1、JDBC-ODBC bridge + ODBC 驱动

JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译主要对象和接口:

成访问数据库命令。

优点:可以利用现存的ODBC 数据源来访问数据库。

缺点:从效率和安全性的角度来说的比较差。不适合用于实际项目。 2、 基于本地API 的部分Java 驱动

我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动

程序中的Java 部分返回给客户端程序。 优点:效率较高。 缺点:安全性较差。 3、 纯Java 的网络驱动

(中间协议) (本地协议)

app JDBC 纯Java 中间服务器 DB 缺点:两段通信,效率比较差

优点:安全信较好

4、 纯Java 本地协议:通过本地协议用纯Java 直接访问数据库。

特点:效率高,安全性好。

二、JDBC 编程的步骤 ① 注册一个driver

注册驱动程序有三种方式:

方式一:Class.forName(―oracle.jdbc.driver.OracleDriver‖); JA V A 规范中明确规定:所有的驱动程序必须在静态初始化代码块中将驱动

注册到驱动程序管理器中。

方式二:Driver drv = new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(drv); 方式三:编译时在虚拟机中加载驱动

javac –Djdbc.drivers = oracle.jdbc.driver.OracleDriver xxx.java java –D jdbc.drivers=驱动全名 类名

使用系统属性名,加载驱动 -D 表示为系统属性赋值

附 : mysql 的Driver 的全名com.mysql.jdbc.Driver

SQLServer 的Driver 的全名com.microsoft.jdbc.sqlserver.SQLServerDriver

② 建立连接

conn=DriverMa nager.getConnection(―jdbc :oracle:thin :@192.168.0.20:1521:tarena ‖, ‖

User‖,‖ Pasword‖);

Connection 连接是通过DriverManager 的静态方法getConnection(.....)来得到的,这个方法的

实质是把参数传到实际的Driver 中的connect()方法中来获得数据库连接的。

Oracle URL 的格式:

jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX (IP 地址及端口号):XXXXXXX (所使用的库名)

Oracle 子协议 IP 地址及端口号和

数据库实例名

必须掌用户名,密ojdbc14.ja

MySql URL 的写法 例: jdbc:mysql://192.168.8.21:3306/test

③ 获得一个S tatement 对象

sta = conn.createStatement();

④ 通过S tatement 执行Sql 语句,也就是发送sql 语句

sta.executeQuery(String sql);返回一个查询结果集。

sta.executeUpdate(String sql);返回值为int 型,表示影响记录的条数。 将sql 语句通过连接发送到数据库中执行,以实现对数据库的操作。

⑤ 处理结果集

使用Connection 对象获得一个Statement ,Statement 中的executeQuery(String sql) 方法可以使用select 语句查询,并且返回一个结果集 ResultSet 通过遍历这个结果集,可以获得select 语句的查寻结果,ResultSet 的next()方法会操作一个游标从第一条记录的前面开始读取,直到最后一条记录。executeUpdate(String sql) 方法用于执行DDL 和DML 语句,比如可以update ,delete 操作。

只有执行select 语句才有结果集返回。

例: Statement str=con.createStatement(); //创建S tatement

String sql=”insert into test(id,name) values(1,”+”’”+”test”+”’”+”)”; str. executeUpdate(sql);//执行Sql 语句

String sql=”select * from test”;

ResultSet rs=str . executeQuery(String sql);//执行Sql 语句,执行select 语句后有结果集 //遍历处理结果集信息

while(rs.next()){

System.out.println(rs.getInt(“id”)); System.out.println(rs.getString(“name”)) }

⑥ 关闭数据库连接(释放资源) 调用.close()

rs.close(); sta.close(); con.close(); ResultSet Statement Connection 是依次依赖的。

注意:要按先ResultSet 结果集,后Statement ,最后Connection 的顺序关闭资源,因为Statement 和ResultSet 是需要连接时才可以使用的,所以在使用结束之后有可能其它的Statement 还需要连接,所以不能现关闭Connection 。 图形演绎编写JDBC 程序的一般过程:

DriverManager Connection Statement ResultSet JDBC 驱动程序

通过Driver 创建

创建

创建 数据

SQL

已经建立到DB

连接

数据库DB

注册JDBC 驱动程序; ②

建立到DB 连接; ③

创建SQL 语句; ④

发送SQL 语句并执行; ⑤

处理结果(有的话); ⑥

与数据库断开连接。 next()如果有下一条记录返回true,否则为false; 有,则游标向下一条记录.

三、几个重要接口:

(1) Statement —— SQL语句执行接口

Statement接口代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或者PreparedStatement接口。在具体应用中,Statement主要用于操作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新。

(2) PreparedStatement:预编译的Statement

第一步:通过连接获得PreparedStatement对象,用带占位符(?)的sql语句构造。

PreparedStatement pstm = con.preparedStatement(―select * from test where id=?‖);

第二步:设置参数

pstm.setString(1,―ganbin‖);

第三步:执行sql语句(先发送sql语句再执行sql语句)

Rs = pstm.excuteQuery();

statement发送完整的Sql语句到数据库不是直接执行而是由数据库先编译,再运行。而PreparedStatement是先发送带参数的Sql语句,再发送一组参数值。如果是同构的sql语句,PreparedStatement的效率要比statement高。而对于异构的sql则两者效率差不多。

同构:两个Sql语句可编译部分是相同的,只有参数值不同。

异构:整个sql语句的格式是不同的

注意点:1、使用预编译的Statement编译多条Sql语句一次执行

2、可以跨数据库使用,编写通用程序

3、能用预编译时尽量用预编译

(3) ResultSet ——结果集操作接口

ResultSet接口是查询结果集接口,它对返回的结果集进行处理。ResultSet是程序员进行JDBC操作的必需接口。

(4) ResultSetMetaData ——元数据操作接口

ResultSetMetaData是对元数据进行操作的接口,可以实现很多高级功能。Hibernate运行数据库的操作,大部分都是通过此接口。可以认为,此接口是SQL查询语言的一种反射机制。ResultSetMetaData接口可以通过数组的形式,遍历数据库的各个字段的属性,对于我们开发者来说,此机制的意义重大。

JDBC通过元数据(MetaData)来获得具体的表的相关信息,例如,可以查询数据库中有哪些表,表有哪些字段,以及字段的属性等。MetaData中通过一系列getXXX将这些信息返回给我们。

数据库元数据Database MetaData 使用connection.getMetaData()获得MetaData包括:包含了关于数据库整体元数据信息。

结果集元数据Result Set MetaData 使用resultSet.getMetaData()获得

比较重要的是获得表的列名、列数等信息。

结果集元数据对象:ResultSetMetaData meta = rs.getMetaData();

?字段个数:meta.getColomnCount();

?字段名字:meta.getColumnName();

?字段JDBC类型:meta.getColumnType();

?字段数据库类型:meta.getColumnTypeName();

数据库元数据对象:DatabaseMetaData dbmd = con.getMetaData();

数据库名=dbmd.getDatabaseProductName();

数据库版本号=dbmd.getDatabaseProductV ersion();

数据库驱动名=dbmd.getDriverName();

数据库驱动版本号=dbmd.getDriverV ersion();

数据库Url=dbmd.getURL();

该连接的登陆名=dbmd.getUserName();

四、JDBC异常处理:

JDBC中,和异常相关的两个类是SQLException和SQLWarning。

1.SQLException类:用来处理较为严重的异常情况。

比如:①传输的SQL语句语法的错误;

② JDBC程序连接断开;

③ SQL语句中使用了错误的函数。

SQLException提供以下方法:

getNextException() ——用来返回异常栈中的下一个相关异常;

getErrorCode() ——用来返回代表异常的整数代码(error code);

getMessage() ——用来返回异常的描述信息(error message)。

2.SQLWarning类:用来处理不太严重的异常情况,也就是一些警告性的异常。其提供的

方法和使用与SQLException基本相似。

结合异常的两种处理方式,明确何时采用哪种。

A. throws 处理不了,或者要让调用者知道,就throws;

B. try … catch 能自行处理,就进行异常处理。

五、JDBC中使用T ransaction编程(事务编程)

1. 事务是具备以下特征(ACID)的工作单元:

原子性(Atomicity)——如果因故障而中断,则所有结果均被撤消;

一致性(Consistency)——事务的结果保留不变;

孤立性(Isolation)——中间状态对其它事务是不可见的;

持久性(Durability)——已完成的事务结果上持久的。

原子操作,也就是不可分割的操作,必须一起成功一起失败。

2. 事务处理三步曲:(事务是一个边界)

① connection.setAutoCommit(false); //把自动提交关闭

②正常的DB操作//若有一条SQL语句失败了,自动回滚

③ https://www.wendangku.net/doc/eb675145.html,mit() //主动提交

或 connection.rollback() //主动回滚

3. JDBC 事务并发产生的问题和事务隔离级别 JDBC 事务并发产生的问题:

① 脏读(Dirty Reads ) 一个事务读取了另一个并行事务还未提交的数据。

② 不可重复读(UnPrpeatable Read ) 一个事务再次读取之前的数据时,得到的数据不一致,被另一个已提交的事务修改。

③ 幻读(Phantom Read ) 一个事务重新执行一个查询,返回的记录中包含了因为其它最近提交的事务而产生的新记录。

为了避免以上三种情况的出现,则采用 事务隔离级别:

TRANSACTION_NONE

不使用事务

TRANSACTION_READ_UNCOMMITTED 可以读取未提交数据

TRANSACTION_READ_COMMITTED 可以避免脏读,不能够读取没提交的数据,最常用的隔离级别 大部分数据库的默认隔离级别

TRANSACTION_REPEATABLE_READ 可以避免脏读,重复读取

TRANSACTION_SERIALIZABLE

可以避免脏读,重复读取和幻读,(事务串行化)会降低数据库效率

以上的五个事务隔离级别都是在Connection 类中定义的静态常量,使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。

比如:con.setT ransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED );

六、JavaBean 的定义:

1、 是一个普通的Java 类

2、 在结构上没有预先的规定,不需要容器,不需要继承类或实现接口

3、 要求必须放在包中,要求实现Serializable 接口

4、 要求有一个无参的构造方法.

完整的代码片段: try{ con.setAutoCommit(false); //step ① 把自动提交关闭 Statement stm = con.createStatement();

stm.executeUpdate("insert into person(id, name, age) values(520, 'X-Man', 18)"); stm.executeUpdate("insert into Person(id, name, age) values(521, 'Super', 19)"); //step ② 正常的DB 操作 https://www.wendangku.net/doc/eb675145.html,mit(); //step ③ 成功主动提交 } catch(SQLException e){ try{ con.rollback();

} catch(Exception e){ e.printStackT race(); } //step ③ 失败则主动回滚

}

5、属性的类型必须保持唯一,get方法返回值必须和set方法参数类型一致

6、对每个属性要有对应的get和set方法。注:隐藏属性可以没有

7、可以有外观作为显示控制,事件机制。

七、JDBC2.0新特性:

1、Scrollability 结果集可滚动

滚动:可双向支持绝对与相对滚动,对结果集可进行多次迭代。

Con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDA TABLE);

TYPE_FORW ARD_ONL Y:

该常量指示指针只能向前移动的ResultSet对象的类型。

TYPE_SCROLL_SENSITIVE:

该常量指示可滚动并且通常受其他的更改影响的ResultSet对象的类型。

CONCUR_UPDA TABLE:

该常量指示可以更新的ResultSet对象的并发模式。

绝对定位:boolean absolute(int row)将游标移动到指定位置。

相对定位:void afterLast()将游标向后移动一位。

void beforeFirst()。将游标向前移动一位。

boolean first()将游标移动到结果集最前

boolean last()将游标移动到结果集末尾。

2、Updatability 结果集可更新。(主要应用于桌面应用)

更新:rs.updateStrin g(―name‖,‖Tony‖);

rs.updateInt(1,‖122323‖);修改

rs.deleteRow();删除

rs.updateRow();

注:只有在必要的时候(如桌面应用)才用结果集更新数据库,因为使用结果集更新数据库效率低下。可更新结果集还要看数据库驱动程

序是否支持,如Oracle就支持MySql不支持。并且只能针对一张表

做结果集更新。而且不能有join操作。必须有主健,必须把非空没

有默认值的字段查出。处理可更新结果级时不能用select *来执行

查询语句,必须指出具体要查询的字段。

3、Batch updates 可批量更新。

将一组对数据库的更新操作发送到数据库统一执行(数据库支持并发执行操作),以提高效率。主要是通过减少数据(Sql语句或参数)在网络上传输的次数来节省时间。

(1)对于Statement的批量更新处理:

stm.addBatch(Sql);

stm.addBatch(Sql);

int[] results=stm.executeBatch();

(2)对于PreparedStatement的批量跟新处理

pstm.setInt(1,11);pstm.setString(2,‖haha‖);……..

pstm.addBatch()

pstm.setInt(1,12);pstm.setString(2,‖gaga‖);……..

pstm.addBatch()

int[] results=stm.executeBatch();

注:int[] 中每一个数表示该Sql语句影响到的记录条数。

PreparedStatement的更新操作比Statement的更新操作多了一

个设置参数的过程。

八、SQL3.0规范中的新类型

Array数组类型,主要用于保存一些类似于数组结构的数据。

Sturct结构

Blob,大的二进制数据文件,最多存储2G。

Clob,大文本文件对象,最多存储2G。

在使用上述大对象的时候,在使用JDBC插入记录时要先插入一个空的占位对象,然后使用

select blobdata from t_blob where id = " + id + " for update 这样的语法来对获得的大对象,进行实际的写入操作Blod通过getBinaryOutputStream()方法获取流进行写入。getBinaryStream()方法获得流来获取Blob中存储的数据。

Clob的操作也和、Blob相同。getAsciiStream() 方法用于读取存储的文本对象,getAsciiOutputStream()方法之获得流用来向文件对象写入的。

BLOB与CLOB的异同点:

①都可以存储大量超长的数据;

② BLOB (Binary Large Object) 以二进制格式保存于数据库中,特别适合保存图片、视频文件、音频文件、程序文件等;

③ CLOB (Character Large Object) 以Character格式保存于数据库中,适合保存比较长的文本文件。

九、SQL数据类型及其相应的Java数据类型

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

--------------------------------------------------------------------------------------------------------------------------------------- INTEGER或者INT int 通常是个32位整数

SMALLINT short 通常是个16位整数

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

DEC(m,n) Java.sql.Numeric 合计位数是m的定点十进制数,小数后面有n位数 FLOA T(n) double 运算精度为n位二进制数的浮点数

REAL float 通常是32位浮点数

DOUBLE double 通常是64位浮点数

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

CHARACTER(n) 同上

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

BOOLEAN boolean 布尔值

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

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

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

BLOB Java.sql.Blob 二进制大型对象

CLOB Java.sql.Clob 字符大型对象

ARRAY Java.sql.Array

十、面向对象的数据库设计

类的关联,继承在数据库中的体现:

类定义―――>表定义

类属性―――>表字段

类关系―――>表关系

对象―――>表记录

注:Oid(对象id)―――>业务无关

在数据库中每一条记录都对应一个唯一的id;

Id通常是用来表示记录的唯一性的,通常会使用业务无关的数字类型

字段的个数不会影响数据库的性能,表则越多性能越低。

(一)类继承关系对应表,

1、为每一个类建一张表。通过父类的Oid来体现继承关系。

特点:在子类表中引用父类表的主建作为自己的外建。

优点:方便查询。属性没有冗余。支持多态。

缺点:表多,读写效率低。生成报表比较麻烦。

2、为每一个具体实现类建一个表

特点:父类的属性被分配到每一个子类表中。

优点:报表比较容易

缺点:如果父类发生改变会引起所有子了表随之更改。

并且不支持多态。数据有冗余。

3、所有的类在一张表中体现,加一个类型辨别字段

特点:效率高,查询不方便,用于重复字段不多时。

优点:支持多态,生成报表很简单。

缺点:如果任何一个类发生变化,必须改表。字段多,难以维护。

(二)类关联关系对应表

1,一对一关联,类关系对应成表时有两种做法:

一是引用主键,也就是一方引用另一方的主键既作为外键有作为自身的主键。

二是外键引用,一方引用另一方的主键作为自身的外键,并且自己拥有主键。

2,一对多关联,也就是多端引用一端的主键当作外键,多端自身拥有主键。

3,多对多关系,多对多关系是通过中间表来实现的,中间表引用两表的主键当作联

合主键,就可以实现多对多关联。

十一、JDCB 应用的分层

分层就是对工能的隔离,降低层与层间的耦合性。

N 、软件的分层初步: JSP Struts

重新封装 可复用 封装信息 懂业务逻辑 数据访问层 数据层 调业务 无技术难度 与业务无关 谁依赖谁就看谁调用谁。

软件的分层设计,便于任务的划分、降低层间的耦合。 结合PMS 的设计方法,思考这样分层的好处。

并且,使代码尽量减少重复,可复用性好,扩展余地加大,而且尽量减少硬编码。

需求:实现对Person 类的数据库持久化基本操作(CRUD )。 包结构:

BS 架构和CS 架构:

View

Controller

Action

Service

/ Biz DAO

DB

tarena

pms

service dao

entity util

impl

PersonDao.java

PersonDaoOraImpl.java PersonDaoMysqlImpl.java

AbstractPersonDao.java PersonService.java

Person.java

JdbcUtil.java DaoFactory.java ConnectionFactory.java dao.properties

dbconfig.properties

Model 部分

对时间的操作:

ps.setDate(1, Data.valueOf(―2007-5-1‖)); ps.setTimestamp(2, new Timestamp(System.currentTimeMillis())); //对系统时间的截取

C-S架构:两层体系结构,主要应用于局域网中。

B-S架构:三层体系结构,表现层+业务逻辑层+数据存储层

注:层面越多,软件越复杂,但更灵活。分层是必须的但是要有个度。

层次一但确定,数据必须按层访问,不能跨层访问。

层与层之间最好时单向依赖(单向调用)。

纵向划分:按功能划分。

横向划分:按抽象划分。

十二、JDBC2.0扩展

(一)JNDI(命名目录服务器):

定义:是Java的命名目录服务器。而JDBC是Java的数据库访问接口。

跟JDBC是平级的关系,是两个独立的JNDI;JDBC存储的数据都是以二维

表的接口来大规模存储数据。而JNDI存储的是差异性比较大的Java对象。

JDBC取数据时用Sql语言访问数据。JDBC API依赖于驱动程序,而JNDI

依赖于服务提供者。JDBC一般把数据存储到关系型数据库,而JNDI一般把

数据存储到小型数据库、文件、甚至是注册表中。JNDI相当于一个电话本。

允许程序将一个对象和一个命名绑定到目录树上。

(JNDI的方法是在javax.naming包下,

接口是Context实现类是InitialContext)

bind(String name, Object obj)将名称绑定到对象资源,建立指定的字符串和对象资源的关联

lookup(String name),通过指定的字符串获得先前绑定的资源

以下是将资源和JNDI命名绑定的方法

public static void bind(String context, Object obj) throws NamingException

{

Properties pro = new Properties();

//Weblogic的JNDI服务器参数

pro.put(InitialContext.INITIAL_CONTEXT_FACTORY,

"weblogic.jndi.WLInitialContextFactory");

pro.put(InitialContext.PROVIDER_URL, "t3://localhost:7001");

Context ctx = new InitialContext(pro);

ctx.bind(context, obj);//建立指定的字符串和对象资源的关联

}

(二)DataSourse(数据源)

定义:

1、包含了连接数据库所需的信息,可以通过数据源获得数据库连接,有时由于

某些连接数据库的信息会变更,所以经常使用包含数据库连接信息的数据源。

2、一个标准的数据库连接工厂,作为DriverManager的替代项,保存与数据库

相关的信息,可以将数据库的连接信息放在一个共享的空间进行提取,不用在本地安装。支持JNDI的绑定,支持连接池,支持分布式服务,用getConnection方法可获得与数据库的连接。数据源应该由管理员创建(目的是为了保证数据库的安全)。所以数据源对象一般放在JNDI服务器中。

通过JNDI获得绑定的资源

public static Object lookup(String context) throws NamingException

{

Properties pro = new Properties();

//Weblogic的JNDI服务器参数

pro.put(InitialContext.INITIAL_CONTEXT_FACTORY,

"weblogic.jndi.WLInitialContextFactory");

pro.put(InitialContext.PROVIDER_URL, "t3://localhost:7001");

Context ctx = new InitialContext(pro);

return ctx.lookup(context);//通过指定的字符串获得先前绑定的资源。

}

(三)连接池:

在内存中用来保存一个个数据库连接的对象。

访问数据库时,建立连接和拆连接需要花费较长时间,通过以连接池直连的方

式获取连接,不需要注册驱动程序,可以大量的节省销毁和创建连接的资源消

耗提高访问数据库的效率。

注:通过连接池获得的Connection,当执行con.close()时,不是关闭连接,而是表示将连接释放回连接池。连接池是一个很复杂的软件,所以是由服务器厂商实现。

(四)RowSet

行集,这是一个JavaBean(事件机制),它增强了ResultSet的功能,包装了Connection、Statement、ResultSet、DriverManage。通过RowSet可以获得数据源,设置隔离级别,也可以发送查寻语句,也实现了离线的操作遍历,RowSet也支持预编译的Statement。

RowSet中的方法大致上和ResultSet相同,当需要使用时请查阅JAVA API参考文档。

JDBC简答题A

1、简述jdbc查询数据库的基本流程? JDBC调用数据库的基本步骤导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象。 2、表与表之间有哪些关联关系? 一对一, 一对多, 多对多, 3、说出数据连接池的工作机制是什么? Java服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。 当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 4、写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。 SELECT No ,Name AS‘姓名’,Num1 ,Num2,(Num1+Num2)AS‘总和’FROM Custom; 5、何为“事务处理”,谈谈你对它的理解。 事务处理是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,在事务结束之后,必须保证正确。独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。 6、简述下你对数据库设计中“三范式”原则的理解。 三级范式第一范式的定义:如果一个表中没有重复组(即行与列的交叉点上只有一个值,而不是一组值),则这个表属于第一范式(常记成1NF)。简而言之:"每一字段只存储一个值"。例如:职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里电话号码)第二范式的定义:如果一个表属于1NF,任何属性只依赖于关键字,则这个表属于第二范式(常记成2NF )。简而言之:必须先符合1NF的条件,且每一行都能被唯一的识别。将1NF转换成2NF的方法是添加主键。学号,课程名,成绩第三范式的定义:如果一个表属于2NF,且不包含传递依赖性,则这个表是第三范式(常记成3NF)。满足3NF的表中不包含传递依赖。简而言之:没有一个非关键属性依

JDBC连接到SQL Server 2008的全过程详解

JDBC连接到SQL Server 2008的全过程详 解 摘要:首先本文是讲Java数据库技术,第一部分首先在数据库中建立一个表,第二部分讲JDBC访问数据库的全部过程。 第一部分: 1.打开数据库 2.点击“连接(C)”,

3.右击“数据库”,选择第一个选项“新建数据库”,得到如下界面: 在“数据库名称”栏填写你要建的数据库名称,这里是wsm,其他的设成默认值,然后点“确定”,返回主界面,可得到在数据库下拉菜单中已经建好了一个数据库wsm,如下;

4.点开wsm,下拉菜单中有一个“表”的选项,右击选择第一个选项“新建表”,如下图: 5.这里设一个表里面有5列,表示姓名、性别、学号、班级、成绩,讲前四个数据类型设成char型,最后一个设成整形,且都不能为空,如下图:

6.点击“文件”—>“保存”,弹出以下界面,输入你要建立的表的名字,这里是“S”,如下: 7.点“确定”,然后再左边的wsm数据库下拉菜单中可看到新创建的表S,右击选择第四个选项,我们开始编辑数据出现以下界面,这里仅仅是示范了三个例子,具体情况请读者自己 安排,

8.回到wsm表,右击选择第三个选项,,可得到刚才所创建的表,如下: 到这里,第一部分的工作就做完了。。。 第二部分: 1.注册ODBC数据源,首先找到ODBC数据源管理器的路径,安装了SQL Server2008在C 盘的同学,可在C盘的目录下找到这个地址,本人的是“C:\Windows\System32”,如果安装在其他盘的,查找方法类似,如图:

2.点开,如下,然后再“用户DSN”之下,如图, 3.点击“添加”按钮,向下拉选择“SQL Server”

JDBC学习

JDBC 的用途是什么? 简单地说,JDBC 可做三件事: 与数据库建立连接, 发送SQL 语句, 处理结果。 下列代码段给出了以上三步的基本示例: 1.Connection对象 Connection 对象代表与数据库的连接。连接过程包括所执行的SQL 语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接如何连接数据库: 打开连接与数据库建立连接的标准方法是调用DriverManager.getConnection方法。该方法接受含有某个URL 的字符串。DriverManager 类(即所谓的JDBC管理层)将尝试找到可与那个URL 所代表的数据库进行连接的驱动程序。DriverManager 类存有已注册的Driver 类的清单。当调用方法getConnection 时,它将检查清单中的每个驱动程序,直到找到可与URL 中指定的数据库进行连接的驱动程序为止。Driver 的方法connect 使用这个URL来建立实际的连接。 用户可绕过JDBC 管理层直接调用Driver 方法。这在以下特殊情况下将很有用:当两个驱动器可同时连接到数据库中,而用户需要明确地选用其中特定的驱动器。但一般情况下,让DriverManager 类处理打开连接这种事将更为简单。 下述代码显示如何打开一个与位于URL "jdbc:odbc:wombat" 的数据库的连接。所用的用户标识符为"oboy" ,口令为"12Java": 2.1.6 发送 SQL 语句连接一旦建立,就可用来向它所涉及的数据库传送SQL 语句。JDBC对可被发送的SQL 语句类型不加任何限制。这就提供了很大的灵活性,即允许使用特定的数据库语句或甚至于非SQL 语句。然而,它要求用户自己负责确保所涉及的数据库可以处理所发送的SQL 语句,否则将自食其果。例如,如果某个应用程序试图向不支持储存程序的DBMS 发送储存程序调用,就会失败并将抛出异常。JDBC 要求驱动程序应至少能提供ANSI SQL-2 Entry Level 功能才可算是符合JDBC标准TM 的。这意味着用户至少可信赖这一标准级别的功能。JDBC 提供了三个类,用于向数据库发送SQL 语句。Connection 接口中的三个方法可用于创建这些类的实例。下面列出这些类及其创建方法:

JDBC简答题C

1.什么是JDBC? 答:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯Java API 编写数据库应用程序,同时,JDBC也是个商标名。 2.JDBC发展的四个阶段有哪些? 答: 1)JDBC-ODBC桥 2)本地API 3)JDBC网络纯JA V A驱动程序 4)纯JA V A写的本地通信协议 3.JDBC编程的步骤分为哪几步? 答: 1)注册Driver:告诉JVM使用哪个driver具体实现类 2)获取连接:获取数据库连接 3)创建Statement:用来表示和执行SQL语句命令 4)执行SQL语句 5)处理ResultSet:结果集 6)释放资源:关闭顺序:ResultSet --> Statement --> Connection 4.Class.forName的作用是什么? 答:加载类,并返回一个“参数名”类型的类实例。 5.注册Driver的三种方式有哪些? 答:注册Driver的三种方式: 1)注册Driver第一种方式 try { Class.forName("oracle.jdbc.driver.OracleDriver"); // 如果需要多个Driver类 // class.forName("driver2"); // class.forName("driver3"); // class.forName("driver4"); } catch (ClassNotFoundException e) { e.printStackTrace(); } 2)注册Driver第二种方式 Driver d1=new oracle.jdbc.driver.OracleDriver(); try { DriverManager.registerDriver(d1); } catch (SQLException e1) { e1.printStackTrace(); }

JDBC连接MySQL

JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com.mysql.jdbc.Driver").newInstance(); JDBC URL 定义驱动程序与数据源之间的连接 标准语法: :: MySQL的JDBC URL格式: jdbc:mys ql//[hostname][:port]/[dbname][?param1=value1][¶m2=value2]…. 示例:jdbc:mysql://localhost:3306/sample_db?user=root&password=your_pass 常见参数: user 用户名 password 密码 autoReconnect 联机失败,是否重新联机(true/false) maxReconnect 尝试重新联机次数 initialTimeout 尝试重新联机间隔 maxRows 传回最大行数 useUnicode 是否使用Unicode字体编码(true/false) characterEncoding 何种编码(GB2312/UTF-8/…) relaxAutocommit 是否自动提交(true/false) capitalizeTypeNames 数据定义的名称以大写表示 建立连接对象 String url="jdbc:mysql://localhost:3306/sample_db?user=root&password=your_pass"; Connection con = DriverManager.getConnection(url); 建立SQL陈述式对象(Statement Object) Statement stmt = con.createStatement(); 执行SQL语句 executeQuery() String query = "select * from test"; ResultSet rs=stmt.executeQuery(query); 结果集ResultSet while(rs.next()) {rs.getString(1);rs.getInt(2);} executeUpdate() String upd="insert into test (id,name) values(1001,xuzhaori)"; int con=stmt.executeUpdate(upd); execute() 示例:

JDBC批量Insert深度优化

有时间给我讲讲这个,如果你懂的话。 JDBC批量Insert深度优化(没事务) 最近在做一个数据同步分发工具,高并发,高效率,异步非实时是主要特点。 为此,选择的方案是JDBC、只有两种操作,插入和更新。 对于更新,只能逐条分批就可以了,优化空间不大。 对于插入,则可以做批量的优化,优化的策略只能是具体问题具体分析,以测试结论为主要依据了。 环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池 测试的方案: 执行10万次Insert语句,使用不同方式。 A组:静态SQL,自动提交,没事务控制(MyISAM引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。 B组:预编译模式SQL,自动提交,没事务控制(MyISAM引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。 ------------------------------------------------------------------------------------------- C组:静态SQL,不自动提交,有事务控制(InnoDB引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。 D组:预编译模式SQL,不自动提交,有事务控制(InnoDB引擎) 1、逐条执行10万次 2、分批执行将10万分成m批,每批n条,分多种分批方案来执行。 本次主要测试A、B组,并得出测试结果。 SQL代码 DROP TABLE IF EXISTS tuser; CREATE TABLE tuser ( id bigint(20) NOT NULL AUTO_INCREMENT, name varchar(12) DEFAULT NULL,

JDBC学习手册

JDBC (Java DataBase Connectivty) 整理人:徐仕锋(Eric) 版本号:v2009-1-20

一、JDBC概述 1概述 JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。ODBC:基于C语言的数据库访问接口。 ●JDBC也就是Java版的ODBC。 ●JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 2JDBC的发展 没有JDBC之前java程序是这样连接各种数据库的。 缺点:1、要求程序员必须熟悉编写java程序连接各种数据库的驱动。 2、移植性很不好,更改数据库必须重新编写连接数据库的驱动程序。

用了JDBC以后java连接各种数据库方便多了! 3JDBC的API介绍 在JDBC中包括了两个包:java.sql和javax.sql。 ①java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连 接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理, 比如批处理更新、事务隔离和可滚动结果集等。 ②javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、 分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分 布式事务和行集(RowSet)等。 主要对象和接口: 4驱动程序工作分类 驱动程序按照工作方式分为四类: 1、JDBC-ODBC bridge + ODBC 驱动 JDBC-ODBC bridge桥驱动将JDBC调用翻译成ODBC调用,再由ODBC驱动翻译 成访问数据库命令。 优点:可以利用现存的ODBC数据源来访问数据库。 缺点:从效率和安全性的角度来说的比较差。不适合用于实际项目。 2、基于本地API的部分Java驱动 我们应用程序通过本地协议跟数据库打交道。然后将数据库执行的结果通过驱动程 序中的Java部分返回给客户端程序。

java考试题 java_JDBC

一.不定项选择题. 1.下列不属于接口的是[4分] A. Statement B. PreparedStatement C. Driver D. DriverManager 考生答案:D 2.关于ResultSetMetaData API描述错误的是[4分] A. getColumnCount() 返回列的数目 B. getColumnTypeName(int index) 返回指定列的类型的名称 C. getColumnType(int index) 返回字符串表示形式的指定列的类型 D. isNullable 指定列是否为空 考生答案:C 3. emp表数据如下 EMPNO ENAME JOB MGR HIREDATE SAL C OMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------ 7369 SMITH CLERK 7902 1980/12/17 800.00 20 7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 0.00 30 下面代码输出的结果是: ... ResultSet rs = stmt.executeQuery ("select comm from emp"); while(rs.next()) { System.out.println(rs.getDouble(1) + "," +rs.wasNull()); } [4分] A. 0, true 0, false B. null, true 0,false C. 0, false 0, false D. 0, true 0, true 考生答案:A 4.下面的代码用于将存放于文件中的图片信息(mouse.bmp)和文本信息(some.xml)插入到 Oracle数据库(Oracle 10g 以上驱动) 应该填入的代码是: public void testSaveLOB() throws Exception { Connection con = DBUtils.getConnection(); PreparedStatement stmt = con .prepareStatement("insert into sd_user (id, photo,mem) values(?,?,?)");

JDBC连接MySQL

JDBC连接MySQL经典方案 最近在学习数据库开发的一些实例,这里浅谈一下用JDBC连接数据库MySQL(当然也可以连接SQL Sever或Oracle了,只是我更喜欢开源软件,同时也更简单)。 首先正确安装好MySQL,建立好数据库studentinfo mysql>create database studentinfo; 然后编写java代码,ConnectToMySQL.java import java.sql.*; public class ConnectToMySQL { public static Connection getConnection() throws SQLException , https://www.wendangku.net/doc/eb675145.html,ng.ClassNotFoundException{ String url = "jdbc:mysql://localhost:3306/studentinfo"; Class.forName("com.mysql.jdbc.Driver"); String userName = "root"; String password = ""; Connection con = DriverManager.getConnection(url,userName,password); return con; } public static void main(String[] args) { try{ Connection con = getConnection(); Statement sql = con.createStatement(); sql.execute("drop table if exists student"); sql.execute("create table student(id int not null auto_increment,name varchar(20) not null default 'name',math int not null default 60,primary key(id));"); sql.execute("insert student values(1,'AAA','99')"); sql.execute("insert student values(2,'BBB','77')"); sql.execute("insert student values(3,'CCC','65')"); String query = "select * from student"; ResultSet result = sql.executeQuery(query); System.out.println("Student表数据如下:"); System.out.println("---------------------------------"); System.out.println("学号"+" "+"姓名"+" "+"数学成绩");

JDBC连接sql server数据库的详细步骤和代码

JDBC连接sql server数据库的详细步骤和代码JDBC连接sql server数据库的步骤如下: [java] view plaincopy 1.1、加载JDBC驱动程序: 2.在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 3.这通过https://www.wendangku.net/doc/eb675145.html,ng.Class类的静态方法forName(String className)实现。 4.成功加载后,会将Driver类的实例注册到DriverManager类中。 5.2、提供JDBC连接的URL 6.?连接URL定义了连接数据库时的协议、子协议、数据源标识。 7.?书写形式:协议:子协议:数据源标识 8.协议:在JDBC中总是以jdbc开始 9.子协议:是桥连接的驱动程序或是数据库管理系统名称。 10.数据源标识:标记找到数据库来源的地址与连接端口。 11.3、创建数据库的连接 12.?要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, 13.该对象就代表一个数据库的连接。 14.?使用DriverManager的getConnectin(String url , String username , 15. String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和 16.密码来获得。 17.4、创建一个Statement 18.?要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 19.种类型: 20.1、执行静态SQL语句。通常通过Statement实例实现。 21.2、执行动态SQL语句。通常通过PreparedStatement实例实现。 22.3、执行数据库存储过程。通常通过CallableStatement实例实现。 23.具体的实现方式: 24. Statement stmt = con.createStatement() ; 25. PreparedStatement pstmt = con.prepareStatement(sql) ; 26. CallableStatement cstmt = con.prepareCall("{CALL demoSp(? , ?)}") ; 27.5、执行SQL语句 28. Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate 29.和execute 30.1、ResultSet executeQuery():执行查询数据库的SQL语句 31.,返回一个结果集(ResultSet)对象。 32.2、int executeUpdate():用于执行INSERT、UPDATE或 33. DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等 34.3、execute():用于执行返回多个结果集、多个更新计数或二者组合的 35.语句。 36.具体实现的代码: 37. ResultSet rs = pstmt.executeQuery() ;

实验项目4 第1部分 JDBC数据库操作

实验项目四 Java SE 高级编程 第1部分 JDBC数据库操作 [实验目的] 1、掌握JDBC API中各个类及接口的用法。 2、能够灵活使用JDBC API中各个类及接口编写数据库增、查、改、删应用程序。[实验要求] 1、复习理论教学中所学的内容。 2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。 3、认真总结实验并书写实验报告。 [实验课时] 2学时 [实验教学方式] 学生上机实验,教师随堂指导。 [实验内容] 实验1 抽取样本 //请按模板要求,将【代码】替换为Java程序代码。 /*请使用shop数据库,配置数据源**/ //RandomGetRecord.java import java.sql.*; import java.util.*; public class RandomGetRecord { public static void main(String args[]) { int wantRecordAmount = 10; //随机抽取的记录数目 Random random =new Random(); try{ 【代码1】//加载JDBC-ODBC桥接器 } catch(ClassNotFoundException e) { System.out.print(e); } Connection con; Statement sql; ResultSet rs; try { String uri="jdbc:odbc:dataSource"; String id=""; String password=""; con=DriverManager.getConnection(uri,id,password); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); rs =【代码2】//sql调用.executeQuery方法查询goods表中的全部记录 https://www.wendangku.net/doc/eb675145.html,st(); //将rs的游标移到rs的最后一行 int count=rs.getRow(); Vector vector=new Vector(); for(int i=1;i<=count;i++) {

JDBC选择题

1.典型的JDBC程序按 DBECFA 顺序编写 A. 释放资源 B. 获得与数据库的物理连接 C. 执行SQL命令 D. 注册JDBC Driver E. 创建不同类型的Statement F. 如果有结果集, 处理结果集 2.JDBC驱动程序的种类有 C 。 A. 两种 B. 三种 C. 四种 D. 五种 3.执行同构的SQL,用 C ;执行异构的SQL用 B ;调用存储进程或函数用 A。 A. CallableStatement B. Statement C. PreparedStatement 4.接口Statement中定义的execute方法的返回类型是 C ,代表的含义是 E ;executeQuery方法返回的类型是 A ;executeUpdate返回的类型是 B ,代表的含义是 D 。 A. ResultSet B. int C. boolean D. 受影响的记录数量 E. 有无ResultSet返回 5.JDBC编程的异常类型分为 AC 。 A. SQLException B. SQLError C. SQLWarning D. SQLFatal E. SQLTruncation 6.在接口Connection中定义了方法setTransactionIsolation,它使用一些常量作为参数 指定控制数据库并发操作的隔离级别,设置隔离层次 E 只解决了dirty reads; 设置隔离层次 D 只可以做到repeatable reads;设置隔离层次 C 可以解决phantom reads。 A. TRANSACTION_NONE B. TRANSACTION_READ_UNCOMMITED C. TRANSACTION_SERIALIZABLE D. TRANSACTION_REPEATABLE_READ E. TRANSACTION_READ_COMMITED 7.如果要限制某个查询语句返回的最多的记录数,可以通过调用Statement的方法 C 来实现。 A. setFetchSize

J2EE基础知识点复习3.doc

JDBC 1 ?两种建立数据库连接的方式? 1、DriverManager 机制(JDBC): API: java.sql 核心API DriverManager机制的弊端: (1)是一个同步的类,一次只有一个线程可以运行 (2)与数据库相关的连接信息都包含在类中,如果用户更换另一台计算机作数据库服务器, 就需要重新修改URL变量、重新编译、部署; (3)用户的用户名、口令也包含在类中,丧失了安全性 2^ DataSource 机制(JNDI): API: javax.sql 可扩展API 连接方式:连接池 2?事务:哪些种Java事务类型? 事物:保证一系列数据库操作能够准确的完成,除非事务中的所有操作都成功,否则事务就不会完成 事务的4 个特性(ACID): Atomicity (原子性)、Consistency (一致性)、Isolation (隔离性)、Durability (持久性) Java事物类型: (1)JDBC 事务: (2)JIA (Java Transaction API)事务 (3)容器事务解释jdbc的数据源机制 1 > DataSource 是JDBC Connection 对彖的一个工厂 2、允许使用已经在JNDI命名服务中注册的DataSource对象建立连接,市驱动程序供应商实现 3、连接池机制: (1)Application Server启动时,创建通向数据库资源的连接池。连接池包含多个JDBC连接。(2)当应用程序需要访问数据库时,从连接池中取得一个连接,使用该连接与数据库通信;一旦工作完成,关闭数据库连接,释放回连接池中。 (3)连接池与连接到数据库对比: 连接到数据库:需要通信、内存、授权等來创建连接,代价昂贵;对于访问站点的每一个客户机都建立了一个新的连接,费用太髙 连接池:重用连接,而非建立新连接;一组加载到内存中的数据库连接,以便重攵使用;允许共亭数据库连接,不是为每个客户分别提供单独的连接;借助连接池,对连接数量进行必要的

JDBC连接四大类数据库五种方法

使用JDBC连接四大类数据库五种方法ConnectDatabases.ja va JDBC 2010-06-07 16:54:28 阅读67 评论0字号:大中小订阅 /* * Created on 2003-7-13 * 此文件主要用来说明连接常用的五种(ODBC算一个,可以连接任意数据库)数据库的方法* 针对每一种方法有一个带有Connection返回值的方法 * 主要有如下方法: * 1。getJdbcOdbcConnecion * 2。getOracleConnection * 3。getSQLServerConnection * 4。getMySQLConnection * 5。getDB2Connection * 6。getCloudScapeConnection */ package jdbc; import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import sun.jdbc.odbc.JdbcOdbcDriver; //导入ORACLE的JDBC驱动程序 import oracle.jdbc.driver.OracleDriver;

//导入SQL Server的JDBC驱动程序 import com.microsoft.jdbc.sqlserver.SQLServerDriver; //导入MySQL的JDBC驱动程序 //import org.gjt.mm.mysql.Driver; import com.mysql.jdbc.Driver; //导入DB2的JDBC驱动程序类 //import COM.ibm.db2.jdbc.app.DB2Driver; import https://www.wendangku.net/doc/eb675145.html,.DB2Driver; //导入CloudScape的JDBC驱动程序 import COM.cloudscape.core.RmiJdbcDriver; public class ConnectDatabases { public String url=null; public String username=null; public String password=null; public void setURL(String url) { this.url=url; }//end method setURL public void setUserName(String username) { https://www.wendangku.net/doc/eb675145.html,ername=username; }//end method setUserName public void setPassword(String password)

使用JDBC(JAVA)

Part IX 使用JDBC 对数据库进行操作

JDBC的工作原理 JDBC是支持基本SQL数据库功能的一系列抽象的接口,最重要的接口包括: ●Java.sql.DriverManager: 处理驱动的调入并且对产生新的数据库连接提供支持 ●Java.sql.Connection: 代表对特定数据库的连接 ●Java.sql.Statement: 代表一个特定的容器,对一个特定的数据库执行SQL语句 ●Java.sql.ResultSet: 控制对一个特定语句的行数据的存取 这些接口在不同的数据库功能模块的层次上提供了一个统一的用 2

户界面,使得独立于数据库的Java应用程序开发成为可能,同时提供了多样化的数据库连接方式。图1为JDBC的工作原理。 与Microsoft的ODBC(OpenDataBaseConnectivity)方式一样,JDBC 在客户端和服务器端都需要JDBC驱动器(JDBC Driver)来完成相关的连接操作。ODBC是建立在X/OpenSQLCLI(CallLevelInterface)基础上的,JDBC也是建立在此基础上的,它定义了一个友好的Java界面与X/OpenSQLCLI中定义的基本抽象层和基本概念进行连接。这个连接就是JDBC/ODBC桥接,这样可以使用JDBC通过ODBC驱动器 3

(OCBCDriver)与数据库进行连接,如图2 所示。 要建立一个使用DBMS的连接包括两个步骤: ●加载驱动程序; ●创建连接。 4

(1)加载驱动程序 加载驱动程序是一件非常简单的事情,只需要一行代码。例如,想要使用JDBC-ODBC Bridge,就可用下面代码加载它: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 驱动程序文档会给您需要使用的类名。例如,假设类名是jdbc.DriverXYZ,就可用如下代码行加载驱动程序: Class.forName("jdbc.DriverXYZ"); 不需要创建驱动程序的实例,然后再用DriverManager注册它,因为调用Class.forName将会自动处理这些事情。如果要创建自己的实例,就会创建一个不必要的副本,但这并没有害处。 5

《JDBC》笔试1套

一、选择题 41. 使用JDBC事务的步骤是()(多选) A) 取消Connection的事务自动提交方式 B) 发生异常回滚事务 C) 获取Connection对象 D) 操作完毕提交事务 42. 以下对JDBC事务描述错误的是() A) JDBC事务属于JAVA事务的一种 B) JDBC事务属于容器事务类型 C) JDBC事务可以保证操作的完整性和一致性 D) JDBC事务是由Connection发起的,并由Connection控制 43. 要通过可滚动的结果集更新数据,以下正确的是() A) pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE) B) pst=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY) C) pst=con.prepareStatement(sql, Resu ltSet.TYPE_SCROLL_SENSITIVE) D) pst=con.prepareStatement(sql, ResultSet.CONCUR_UPDATABLE) 44. 存储过程pro有两个参数,第一个为输入参数,第二个为输出参数,以下代码正确的是() A) CallableStatement cst=con.prepareCall(“(call pro(?,?))”); B) CallableStatement cst=con.prepareCall(“(call pro(?))”); C) CallableStatement cst=con.prepareCall(“{call pro(?,?)}”); D) CallableStatement cst=con.prepareCall(“{call pro(?,?,?)}”); 45. 以下描述正确的是( ) A) CallableStatement是PreparedStatement的父接口 B) PreparedStatement是CallableStatement的父接口 C) CallableStatement是Statement的子接口 D) PreparedStatement是Statement的父接口 46. 要删除book表中书籍(bookName)是”java”的记录,以下代码正确的是() String sql=”delete from book where bookName=?”; PreparedStatement pst=con.preparedStatement(sql); ______________________________ pst.execute(); A) pst.setString(1,”java”); B) pst.setString(0,”java”); C) pst.setInt(0,”java”); D) 以上选项都不正确 47. 获取ResutlSet对象rst的第一行数据,以下正确的是()

JDBC连接MySQL

JDBC连接MySQL 环境: JDK 1.6 Eclipse 3.7 MySQL 5.0.18 mysql-connector-java-3.2.0-alpha-bin.jar 一、建立项目,添加驱动程序 1、Eclipse建立普通Java项目。 2、项目文件下,建立文件夹lib。(不是包,也不是源文件夹) 3、将驱动程序,复制,粘贴进入lib文件夹。 4、非常关键!!

(添加到构建路径)。注意观察,图标的变化。 二、编写程序 1、建立普通Java类文件。 package db; public class DBcon { public static void main(String[] args) { }

} 2、JDBC连接数据库,共分个步骤。 驱动程序 String clazz="com.mysql.jdbc.Driver"; 连接URL String url="jdbc:mysql://localhost:3306/mydb123"; 数据库用户名 String username="root"; 密码 String password="root"; 密码为空,""。 加载驱动程序 Class.forName(clazz); 获得连接Connection对象 Connection con=DriverManager.getConnection(url, username, password); 期间注意try与catch的搭配。 注意:数据库服务器的开启与关闭。用户名和密码的正确性,数据库名字的正确性。 可以通过打印输出con对象的方法来判断是否连接成功。 如出现:com.mysql.jdbc.Connection@133f1d7 则表示连接成功。 Statement对象:操作数据库,执行SQL语句 Statement stmt=con.createStatement(); 编写一条正确的SQL语句 String sql="insert into tb_users(username,pswd) values ('b','b')"; 作为参数,执行SQL语句 stmt.executeUpdate(sql); 关闭数据库连接 con.close(); 附件: //驱动程序 //个人建议用private类型的变量,以免被心怀不轨的人有机可乘 private String clazz = "com.mysql.jdbc.Driver"; //要连接的数据库(url) private String url = "jdbc:mysql://localhost:3306/mydb123"; //数据库的用户名和密码private String password = "root"; private Connection con; public DB() { try { Class.forName(clazz);

JDBC连接SQLServer数据库

JDBC连接SQLServer数据库 JDBC API 介绍: JDBC API主要做三件事:与数据库建立连接,发送SQL语句,处理结果 一、DriverManager类:依据数据库的不同,管理相应的JDBC驱动 二、Connection接口:复制负责连接数据库并承担传送数据的任务 三、Statement接口:由Connection产生,负责执行SQL语句 四、ResultSet接口:负责处理Statement执行后所产生的查询结果 五、PreparedStatement接口:Statement子接口,也由Connection产生,通用负责执行SQL语句,与Statement接口相比,具有高安全性,高性能,高可读性和高可维护性的优点。 JDBC工作过程及JDBC API: JDBC访问数据库步骤: 1、加载驱动(Class.forName("JDBC驱动类名称")); 2、与数据库建立连接Connection conn=DriverManager.getConnection(数据库连接字符串,数据库用户名,密码); 3、发送SQL语句,并得到返回结果

Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from master"); 4、处理返回结果 While(rs.next()){ int id=rs.getInt("id"); } JDBC连接SQLServer数据库有两种方式: 两种常用的驱动方式: 第一种:使用JDBC-ODBC桥方式连接

具体步骤:控制面板→管理工具→数据源(ODBC)→用户DNS→添加→找到SQL server(单击完成)→输入数据源(自定义)和连接服务器名称→下一步→点击单选按钮(使用用户ID和密码SQL server)输入数据库登录用户名和密码→下一步→下一步→完成 图解:

相关文档