java中连接MySQL数据库的几种方式

java中连接MySQL数据库的几种方式,第1张

Java要连接数据,那么首先你必须安装mysql数据库。

安装好mysql之后,安装JDK了。

安装好JDK之后,就是安装Eclipse了,要支持JDK版本,Eclipse安装的时候会自动去找JDK安装位置的,解压版的Eclipse,就要配置eclipseini文件了,将对应的JDK配置好,这些已经准备就绪的时候,就到mysql中创建数据库和表。

先创建数据库:

CREATE DATABASE SCUTCS;

接着,创建表:

CREATE TABLE STUDENT

(

SNO CHAR(7) NOT NULL,

SNAME VARCHAR(8) NOT NULL,

SEX CHAR(2) NOT NULL,

BDATE DATE NOT NULL,

HEIGHT DEC(5,2) DEFAULT 00000,

PRIMARY KEY(SNO)

);

然后插入数据,可以用SQL语句insert into <表名> values           (value1, value2, );

编写java文件来演示一下如何访问MySQL数据库。

import javasql;

public class JDBCTest {

public static void main(String[] args){

// 驱动程序名           String driver = "commysqljdbcDriver";

// URL指向要访问的数据库名scutcs           String url = "jdbc:mysql://127001:3306/scutcs";

// MySQL配置时的用户名           String user = "root";              // MySQL配置时的密码           String password = "root";

try {             // 加载驱动程序            ClassforName(driver);

// 连续数据库            Connection conn = DriverManagergetConnection(url, user, password);

if(!connisClosed())              Systemoutprintln("Succeeded connecting to the Database!");

// statement用来执行SQL语句            Statement statement = conncreateStatement();

// 要执行的SQL语句            String sql = "select from student";

// 结果集            ResultSet rs = statementexecuteQuery(sql);

while(rsnext())              // 选择sname这列数据             name = rsgetString("sname

// 输出结果             Systemoutprintln(rsgetString("sno") + "\t" + name);            }

rsclose();            connclose();

} catch(ClassNotFoundException e) {

Systemoutprintln("Sorry,can`t find the Driver!");             eprintStackTrace();

} catch(SQLException e) {

eprintStackTrace();

} catch(Exception e) {

eprintStackTrace();

} } }

连接Access

首先看一个例子代码片断:

程序代码:

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

using

SystemData;

using

SystemDataOleDb;

string

strConnection="Provider=MicrosoftJetOleDb40;";

strConnection+=@"Data

Source=C:\BegASPNET\Northwindmdb";

OleDbConnection

objConnection=new

OleDbConnection(strConnection);

objConnectionOpen();

objConnectionClose();

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

解释:

连接Access数据库需要导入额外的命名空间,所以有了最前面的两条using命令,这是必不可少的!

strConnection这个变量里存放的是连接数据库所需要的连接字符串,他指定了要使用的数据提供者和要使用的数据源

"Provider=MicrosoftJetOleDb40;"是指数据提供者,这里使用的是Microsoft

Jet引擎,也就是Access中的数据引擎,aspnet就是靠这个和Access的数据库连接的

"Data

Source=C:\BegASPNET\Northwindmdb"是指明数据源的位置,他的标准形式是"Data

Source=MyDrive:MyPath\MyFileMDB"

ps:

1"+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符

2如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接:

strConnection+="Data

Source=";

strConnection+=MapPath("Northwindmdb");

这样就可以省得你写一大堆东西了!

3要注意连接字符串中的参数之间要用分号来分隔

"OleDbConnection

objConnection=new

OleDbConnection(strConnection);"这一句是利用定义好的连接字符串来建立了一个链接对象,以后对数据库的 *** 作我们都要和这个对象打交道

"objConnectionOpen();"这用来打开连接至此,与Access数据库的连接完成其余 *** 作(插入,删除)请参阅相关书籍

连接SQL

Server

例子代码片断:

程序代码:

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

using

SystemData;

using

SystemDataSqlClient;

string

strConnection="user

id=sa;password=;";

strConnection+="initial

catalog=Northwind;Server=YourSQLServer;";

strConnection+="Connect

Timeout=30";

SqlConnection

objConnection=new

SqlConnection(strConnection);

objConnectionOpen();

objConnectionClose();

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

解释:

连接SQL

Server数据库的机制与连接Access的机制没有什么太大的区别,只是改变了Connection对象和连接字符串中的不同参数

首先,连接SQL

Server使用的命名空间不是"SystemDataOleDb",而是"SystemDataSqlClient"

其次就是他的连接字符串了,我们一个一个参数来介绍(注意:参数间用分号分隔):

"user

id=sa":连接数据库的验证用户名为sa他还有一个别名"uid",所以这句我们还可以写成"uid=sa"

"password=":连接数据库的验证密码为空他的别名为"pwd",所以我们可以写为"pwd="

这里注意,你的SQL

Server必须已经设置了需要用户名和密码来登录,否则不能用这样的方式来登录如果你的SQL

Server设置为Windows登录,那么在这里就不需要使用"user

id"和"password"这样的方式来登录,而需要使用"Trusted_Connection=SSPI"来进行登录

"initial

catalog=Northwind":使用的数据源为"Northwind"这个数据库他的别名为"Database",本句可以写成"Database=Northwind"

"Server

=YourSQLServer":使用名为"YourSQLServer"的服务器他的别名为"Data

Source","Address","Addr"如果使用的是本地数据库且定义了实例名,则可以写为"Server=(local)\实例名";如果是远程服务器,则将"(local)"替换为远程服务器的名称或IP地址

"Connect

Timeout=30":连接超时时间为30秒

在这里,建立连接对象用的构造函数为:SqlConnection

其余的就和Access没有什么区别了!

第一种 - 这种方法用在ACCESS中最多

strconn = "DRIVER=Microsoft Access Driver (mdb);DBQ=" & ServerMapPath("aspfreemdb")

set conn = servercreateobject("adodbconnection")

connopen strconn

第二种-这种方法用在SQL SERVER中多

strconn = "Driver={SQL Server};Description=sqldemo;SERVER=127001;UID=LoginID;PWD=Password;DATABASE=Database_Name

set conn = servercreateobject("adodbconnection")

connopen strconn

第三种

strconn="Driver={MicrosoftAccessDriver(mdb)};" &_

"DBQ=F:\Inetpub\>

1 windows下连接 第一种方式 set ORACLE_SID=目标数据库SID rman target sys/change_on_install 第二种方式 rman target sys/change_on_install@目标数据库网络服务名或连接字符串 2unix 下连接 第一种方式 ORACLE_SID=目标数据库SID Export ORCLE_SID rman target sys/change_on_install 第二种方式 rman target sys/change_on_install@目标数据库网络服务名或连接字符串 如果启动了RMAN,但是发现没有连接到正确的数据库,或者要连接到不同的数据库,可以用CONNECT。

在基于微软IIS/PWS的网络平台上,通过服务器端运行的ASP程序来访问后台数据库,是一种最常见的模式了。而对于小型的数据库应用需求,微软的Access数据库,应该是与ASP程序配套使用的首选。由于Access数据库的ODBC驱动程序支持的SQL指令全,执行效率高,所以Access后台数据库+ASP服务器端程序+客户端IE浏览器,是一个精练实用高效的组合模式。

在这种使用模式中,ASP程序无疑是最重要的,是沟通客户端和后台数据库之间的桥梁。在ASP程序中,通过VB Script,建立对Access数据库的连接,是客户能够访问后台数据库的前提。

一、建立Access数据库连接的常用方法

在ASP中建立对Access数据库连接的一般格式如下:

<%

DbPath=ServerMapPath(数据库名)

Set Conn=ServerCreatObject(“ADODBConnection”)

ConnOpen “driver={Microsoft Access Driver (mdb)};dbq=”& DbPath

Set rs=ServerCreatObject(“ADODBRecordset”)

RsOpen 数据表名或SQL指令,Connection对象,Recordset类型,锁定类型

… …

%>

它的各步骤及参数意义如下:

第一行程序:利用Server对象的MapPath函数,取得要打开数据库的完整的文件路径,并存储在变量DbPath中。这其中,数据库名是我们需要指定的参数,应该用我们要打开的数据库的实际名称替代。如果数据库名是直接作为常量出现,要用引号将其括起来,并且不能丢掉扩展名。例如数据库是Testmdb,则该行程序成为:DbPath=ServerMapPath(“Testmdb”)。

第二行程序:建立一个ADO对象集中的Connection对象,也即连接对象。这是建立数据库连接的初始步骤。执行这行程序后,Conn成为一个连接对象。

第三行程序:利用连接对象Conn的Open方法打开一个指定的数据库。因为我们要打开的是Access数据库,所以要指定ODBC驱动程序参数,表示要透过Access的ODBC驱动程序来访问数据库:driver={Microsoft Access Driver (mdb)};。另一个参数dbq= & DbPath,运算后等效于dbq=ServerMapPath(数据库名) ,是利用了第一行的ServerMapPath(数据库名)函数,用来指定要打开的数据库文件。到这里,就已经打开了数据库名指定的数据库。如果数据库名是“testmdb”,则打开Access数据库Testmdb。在这一行里指定的参数,要严格按照格式原样写出,不能省略或改动,也没有可变参数。

第四行程序:建立一个ADO对象集中的Recordset对象,以便利用Recordset对象 *** 作数据库(当然,这只是对数据库 *** 作的多种方式之一)。执行这行后,rs就成为一个Recordset对象。

第五行程序:利用rs对象的Open方法打开数据库中的数据表。这其中有四个参数,其意义如下:

数据表名或SQL指令串:在这个参数里指定要打开的数据库内的数据表名称,或者是用SQL的Select指令串确定的数据表的指定范围数据,例如,数据库Testmdb中有数据表Number,则该参数成为“Number”,注意引号不能丢;若想打开数据表Number中xh字段值小于90的数据记录,则该参数可能成为如下的形式:

“Select From Number Where xh < 90”。

Connection对象:指定已经打开的数据库的Connection对象,在这里固定是Conn,注意无须引号的。

Recordset类型:表示打开数据表的方式,有四种选择。数字0表示只读方式,且当前记录只能下移;数字1表示可读写方式,当前记录可自由上下移动,但不能及时看到别的用户建立的新记录,除非重新启动;数字2表示可读写方式,当前记录可自由移动,而且可以及时看到别的用户增加的新记录;数字3表示只读方式,但当前记录可以自由移动。一般选择2为好,除非为了禁止数据被修改。

锁定类型:这个参数指定数据库的锁定功能。因为网络上的数据库都是多用户的,很可能同时有多个用户在 *** 作数据库。为了避免错误,让同一时间只可能有一个用户修改数据,就要用锁定功能。有四种选择:数字1表示只读方式锁定,用户不能更改数据;数字2表示悲观锁定,当一个用户用rs对象开始修改数据时就锁定数据库,直到用户用rsUpdate更新记录后,才解除锁定;数字3表示乐观锁定,只有在数据写入数据库中时候才锁定,不保险,慎用!数字4表示批次乐观锁定,只有在使用rsUpdateBatch成批更新数据时候才锁定数据记录。属于很少使用的。一般地,使用悲观锁定比较安全,但是效率要低些。

二、使用Recordset对象 *** 作数据

用上面的方法打开数据库,是利用了Recordset对象建立的数据库连接,然后的对数据 *** 作,也要使用该对象。

用rsopen “数据表名”,Conn,2,2 方式打开数据表,就可以方便的对数据进行 *** 作:

常见的 *** 作对象:

rsaddnew :添加一个新记录在数据表末尾。

rsdelete :删除当前记录。

rseof :判断是否已过最后记录。

rsbof :判断是否移过首记录。

rsupdate :数据修改生效。

rs(“字段名”):当前记录指定字段的值。

从数据表中提取数据:用x=rs(“字段名”)的格式,提取数据表中当前记录指定字段的值。

向数据表中填入或修改数据:用rs(“字段名”)=数据值或变量的方式,修改当前记录指定字段的值。

三、使用SQL指令 *** 作数据库

在使用SQL指令对数据库进行 *** 作时,要用如下方式打开数据库和 *** 作:

<%

DbPath=ServerMapPath(数据库名)

Set Conn=ServerCreatObject(“ADODBConnection”)

ConnOpen “driver={Microsoft Access Driver (mdb)};dbq=”& DbPath

Sql= *** 作数据库的指令串

ConnExecute sql

… …

%>

四、使用DSN连接数据库

在以上连接数据库的方式中,都是在程序中指定数据库,指定ODBC驱动程序。如果数据源有变化,就需要修改程序。如果在系统级别上,预先定义好数据源DSN,就可以避免这个麻烦。

在定义DSN的过程中,就已经指定好了数据源需要的ODBC驱动程序,也指定好了数据库文件的实际路径和名字,我们在程序中,只需要引用预先定义的数据源名DSN即可。

设定义好的DSN为test,则打开数据库的方式为:

五、结束语

在ASP程序中,建立数据库的连接和访问数据库,有很多方式和技术细节,在此难以一一详述。实际上,对SQL Server数据库,DBF数据库,文本文件,电子表格文件等,也都可以很方便的打开和访问,与对Access数据库的访问大同小异而已。如果说方便,Access应该是首选。如果考虑安全保密性,SQL数据库更好些。使用系统数据源DSN的方式建立对数据库的连接,具有更大的灵活性,也更简便些。

步骤/方法

1

打开sql2008,使用windows身份登录

2

登录后,右键选择“属性”。左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式

3

选择“连接”,勾选“允许远程连接此服务器”,然后点“确定”

展开“安全性”,“登录名”;“sa”,右键选择“属性”

左侧选择“常规”,右侧选择“SQL Server 身份验证”,并设置密码

右击数据库选择“方面”

在右侧的方面下拉框中选择“服务器配置”;将“RemoteAccessEnabled”属性设为“True”,点“确定”

至此SSMS已设置完毕,先退出,再用sa登录,成功即表示sa帐户已经启用

打开sql server配置管理器

下面开始配置SSCM,选中左侧的“SQL Server服务”,确保右侧的“SQL Server”以及“SQL Server Browser”正在运行

在左则选择sql server网络配置节点下的sqlexpress的协议,在右侧的TCP/IP默认是“否”,右键启用或者双击打开设置面板将其修改为“是”

选择“IP 地址”选项卡,设置TCP的端口为“1433”

将"客户端协议"的"TCP/IP"也修改为“Enabled”

配置完成,重新启动SQL Server 2008。此时应该可以使用了,但是还是要确认一下防火墙。打开防火墙设置。将SQLServrexe(C:\Program Files\Microsoft SQL Server\MSSQL10SQLEXPRESS\MSSQL\Binn\sqlservrexe)添加到允许的列表中。

在日常基于数据库应用的开发过程中,我们经常需要对多个表或者数据源进行关联查询而得出我们需要的结果集。那么Oracle到底存在着哪几种连接方式?优化器内部又是怎样处理这些连接的?哪种连接方式又是适合哪种查询需求的?只有对这些问题有了清晰的理解后,我们才能针对特定的查询需求选择合适的连接方式,开发出健壮的数据库应用程序。选择合适的表连接方法对SQL语句运行的性能有着至关重要的影响。下面我们就Oracle常用的一些连接方法及适用情景做一个简单的介绍。

31 嵌套循环连接(nested loop)

嵌套循环连接的工作方式是这样的:

1、 Oracle首先选择一张表作为连接的驱动表,这张表也称为外部表(Outer Table)。由驱动表进行驱动连接的表或数据源称为内部表(Inner Table)。

2、 提取驱动表中符合条件的记录,与被驱动表的连接列进行关联查询符合条件的记录。在这个过程中,Oracle首先提取驱动表中符合条件的第一条记录,再与内部表的连接列进行关联查询相应的记录行。在关联查询的过程中,Oracle会持续提取驱动表中其他符合条件的记录与内部表关联查询。这两个过程是并行进行的,因此嵌套循环连接返回前几条记录的速度是非常快的。在这里需要说明的是,由于Oracle最小的IO单位为单个数据块,因此在这个过程中Oracle会首先提取驱动表中符合条件的单个数据块中的所有行,再与内部表进行关联连接查询的,然后提取下一个数据块中的记录持续地循环连接下去。当然,如果单行记录跨越多个数据块的话,就是一次单条记录进行关联查询的。

3、 嵌套循环连接的过程如下所示:

Nested loop

Outer loop

Inner loop

我们可以看出这里面存在着两个循环,一个是外部循环,提取驱动表中符合条件的每条记录。另外一个是内部循环,根据外循环中提取的每条记录对内部表进行连接查询相应的记录。由于这两个循环是嵌套进行的,故此种连接方法称为嵌套循环连接。

嵌套循环连接适用于查询的选择性强、约束性高并且仅返回小部分记录的结果集。通常要求驱动表的记录(符合条件的记录,通常通过高效的索引访问)较少,且被驱动表连接列有唯一索引或者选择性强的非唯一索引时,嵌套循环连接的效率是比较高的。

嵌套循环连接驱动表的选择也是连接中需要着重注意的一点,有一个常见的误区是驱动表要选择小表,其实这是不对的。假如有两张表A、B关联查询,A表有1000000条记录,B表有10000条记录,但是A表过滤出来的记录只有10条,这时候显然用A表当做驱动表是比较合适的。因此驱动表是由过滤条件限制返回记录最少的那张表,而不是根据表的大小来选择的。

在外连接查询中,如果走嵌套循环连接的话,那么驱动表必然是没有符合条件关联的那张表,也就是后面不加(+)的那张表。这是由于外连接需要提取可能另一张表没符合条件的记录,因此驱动表需要是那张我们要返回所有符合条件记录的表。比如下面这个查询,

嵌套循环连接返回前几行的记录是非常快的,这是因为使用了嵌套循环后,不需要等到全部循环结束再返回结果集,而是不断地将查询出来的结果集返回。在这种情况下,终端用户将会快速地得到返回的首批记录,且同时等待Oracle内部处理其他记录并返回。如果查询的驱动表的记录数非常多,或者被驱动表的连接列上无索引或索引不是高度可选的情况,嵌套循环连接的效率是非常低的

-- 删除原表

drop table t1;

-- 建立测试表

create table t1(

f1 varchar2(10),

f2 varchar2(1000)

)

tablespace CTL

pctfree 98;

-- 填充测试内容

insert into t1(f1,f2)

select rownum, lpad(rownum,700,'0')

from dba_tables a, dba_tab_cols b

where aowner = bowner

and rownum < 10000;

commit;

-- 检查测试内容格式

select sysdbms_rowidrowid_block_number(rowid), f1, f2 from t1;

-- 每条记录都存储在单独的数据块中

select count( distinct sysdbms_rowidrowid_block_number(rowid)) from t1;

/

用同样的方式建立表t2

/

-- 删除原表

drop table t2;

-- 建立测试表

create table t2(

f1 varchar2(10),

f2 varchar2(1000)

)

tablespace CTL

pctfree 98;

-- 填充测试内容

insert into t2(f1,f2)

select rownum 10, lpad(rownum 10,700,'0')

from dba_tables a, dba_tab_cols b

where aowner = bowner

and rownum < 1000;

commit;

-- 检查测试内容格式

select sysdbms_rowidrowid_block_number(rowid), f1, f2 from t2;

-- 每条记录都存储在单独的数据块中

select count( distinct sysdbms_rowidrowid_block_number(rowid)) from t2;

create index ind_t1_f1 on t1(f1);

create index ind_t2_f1 on t2(f1);

--首先我们来看使用nested loop关联方式, 不同表作为驱动时的情况

1, 表t2作为驱动表

select /+ ordered use_nl(t1 , t2)/

t1f1, t2f1

from ctlt2 t2,ctlt1 t1

where t1f1 = t2f1

and t1f1 < 1000;

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=84 Card=4 Bytes=56)

1 0 NESTED LOOPS (Cost=84 Card=4 Bytes=56)

2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)

3 1 INDEX (RANGE SCAN) OF 'IND_T1_F1' (NON-UNIQUE) (Cost=1 C

ard=1 Bytes=7)

Cost = outer access cost + (inner access cost outer cardinality)

Cost = 2 + 1 82 = 84;

Statistics

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

0 recursive calls

0 db block gets

2020 consistent gets

23 physical reads

0 redo size

2650 bytes sent via SQLNet to client

721 bytes received via SQLNet from client

8 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

99 rows processed

2, t1作为驱动表

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=4 Bytes=56)

1 0 NESTED LOOPS (Cost=6 Card=4 Bytes=56)

2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=4 Bytes=28)

3 1 INDEX (RANGE SCAN) OF 'IND_T2_F1' (NON-UNIQUE) (Cost=1 C

ard=1 Bytes=7)

Cost = outer access cost + (inner access cost outer cardinality)

Cost = 2 + 1 4 = 84;

Statistics

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

0 recursive calls

0 db block gets

11123 consistent gets

3 physical reads

0 redo size

2650 bytes sent via SQLNet to client

721 bytes received via SQLNet from client

8 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

99 rows processed

32, 哈希连接(hash join)

哈希连接分为两个阶段,如下。

1、 构建阶段:优化器首先选择一张小表做为驱动表,运用哈希函数对连接列进行计算产生一张哈希表。通常这个步骤是在内存(hash_area_size)里面进行的,因此运算很快。

2、 探测阶段:优化器对被驱动表的连接列运用同样的哈希函数计算得到的结果与前面形成的哈希表进行探测返回符合条件的记录。这个阶段中如果被驱动表的连接列的值没有与驱动表连接列的值相等的话,那么这些记录将会被丢弃而不进行探测

哈希连接比较适用于返回大数据量结果集的连接。

使用哈希连接必须是在CBO模式下,参数hash_join_enabled设置为true,

哈希连接只适用于等值连接。从Oracle9i开始,哈希连接由于其良好的性能渐渐取代了原来的排序合并连接。

SQL> select /+ ordered use_hash(t1 , t2) /

t1f1, t2f1

from ctlt1 t1,ctlt2 t2

where t1f1 = t2f1 2 3 4 ;

999 rows selected

Execution Plan

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

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=82 Bytes=1148

)

1 0 HASH JOIN (Cost=5 Card=82 Bytes=1148)

2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=82 Bytes=574)

3 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)

Statistics

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

0 recursive calls

0 db block gets

11113 consistent gets

0 physical reads

0 redo size

23590 bytes sent via SQLNet to client

1381 bytes received via SQLNet from client

68 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

999 rows processed

33, 排序合并连接(merge join)

排序合并连接的方法非常简单。在排序合并连接中是没有驱动表的概念的,两个互相连接的表按连接列的值先排序,排序完后形成的结果集再互相进行合并连接提取符合条件的记录。相比嵌套循环连接,排序合并连接比较适用于返回大数据量的结果。

排序合并连接在数据表预先排序好的情况下效率是非常高的,也比较适用于非等值连接的情况,比如>、>=、<=等情况下的连接(哈希连接只适用于等值连接)。由于Oracle中排序 *** 作的开销是非常消耗资源的,当结果集很大时排序合并连接的性能很差,于是Oracle在73之后推出了新的连接方式——哈希连接。

1, rbo模式;

2, 不等于关联(> < >= <= <>)

3, hash_join_enabled = false;

4, 数据源已排序

这是老师发给我们的资料,共享给你:\x0d\Type 1: jdbc-odbc桥 \x0d\Jdbc-odbc 桥 是sun公司提供的,是jdk提供的的标准api 这种类型的驱动实际是把所有 jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码( 本地数据库驱动代码是指 由数据库厂商提供的数据库 *** 作二进制代码库,例如在oracle for windows中就是oci dll 文 件) \x0d\\x0d\jdbc-odbc桥|odbc|厂商DB代码---数据库Server\x0d\\x0d\只要本地机装有相关的odbc驱动那么采用jdbc-odbc桥几乎可以访问所有的数据库,jdbc- odbc方法对于客户端已经具备odbc driver的应用还是可行的\x0d\\x0d\但是,由于jdbc-odbc先调用 odbc再由odbc去调用本地数据库接口访问数据库所以,执行效率比较低,对于那些大数据量 存取的应用是不适合的而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于 internet ,intranet的应用也是不合适的因为,你不可能要求所有客户都能找到odbc driver \x0d\\x0d\=====一般ACCESS用到的比较多,初学者用。实际项目是不用的。\x0d\\x0d\Type 2: 本地Api驱动 \x0d\\x0d\本地api驱动直接把jdbc调用转变为数据库的标准调用再去访问数据库\x0d\\x0d\这种方法需要本地 数据库驱动代码 本地api驱动|厂商DB代码---数据库Server这种驱动比起jdbc-odbc桥执行效率大大提高了但是,它仍然需要在客户端加载数据库厂商 提供的代码库这样就不适合基于internet的应用并且,他的执行效率比起3,4型的jdbc驱动 还是不够高 \x0d\\x0d\Type3:网络协议驱动 这种驱动实际上是根据我们熟悉的三层结构建立的 jdbc先把对数局库的访问请求传递给网 络上的中间件服务器 中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用 传给数据库服务器如果中间件服务器也是用java开法的,那么在在中间层也可以使用1,2型 jdbc驱动程序作为访问数据库的方法 网络协议驱动--中间件服务器---数据库Server \x0d\\x0d\由于这种驱动是基于server的所以,它不需要在客户端加载数据库厂商提供的代码库而且 他在执行效率和可升级性方面是比较好的因为大部分功能实现都在server端,所以这种驱动 可以设计的很小,可以非常快速的加载到内存中 但是,这种驱动在中间件层仍然需要有配置 其它数据库驱动程序,并且由于多了一个中间层传递数据,它的执行效率还不是最好 \x0d\\x0d\Type4 纯JAVA驱动 \x0d\这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求由于4型驱动写的应用可 以直接和数据库服务器通讯这种类型的驱动完全由java实现,因此实现了平台独立性 本地协议驱动---------数据库Server \x0d\\x0d\由于这种驱动不需要先把jdbc的调用传给odbc或本地数据库接口或者是中间层服务器所 以它的执行效率是非常高的而且,它根本不需要在客户端或服务器端装载任何的软件或驱动 这种驱动程序可以动态的被下载但是对于不同的数据库需要下载不同的驱动程序 \x0d\\x0d\以上对四种类型的jdbc驱动做了一个说明那么它们适合那种类型的应用开发呢 \x0d\\x0d\Jdbc-odbc桥由于它的执行效率不高,更适合做为开发应用时的一种过度方案,或着对于初学 者了解jdbc编程也较适用 对于那些需要大数据量 *** 作的应用程序则应该考虑2,3,4型驱动在intranet方面的应用可以 考虑2型驱动,但是由于3,4型驱动在执行效率上比2型驱动有着明显的优势,而且目前开发 的趋势是使用纯java所以3,4型驱动也可以作为考虑对象 至于基于internet方面的应用就只有考虑3,4型驱动了 因为3型驱动可以把多种数据库驱 动都配置在中间层服务器所以3型驱动最适合那种需要同时连接多个不同种类的数据库, 并且对并发连接要求高的应用 4型驱动则适合那些连接单一数据库的工作组应用。\x0d\\x0d\现在是纯java 开发,所以一般都用type4的jdbc driver。

以上就是关于java中连接MySQL数据库的几种方式全部的内容,包括:java中连接MySQL数据库的几种方式、ASP.NET连接数据库有哪几种方法、asp 连接sqlserver数据库的连接方式有几种分别是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9828082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存