java数据库 *** 作时提示找不到驱动

java数据库 *** 作时提示找不到驱动,第1张

没有驱动包的话你就手动导入嘛。

还有就是你将驱动包放到你安装java的文件夹下也可以,也就是你说的ava\jdk-----\jre\lib\ext\下,这样你以后连接数据的时候就不要导入驱动包了!还有就是检查你的驱动包和你的数据库是否匹配,如果数据库版本过高就要考虑高版本的驱动包了!

JSP中连接Sql server2008数据库的驱动名称和驱动路径如下:驱动名称为:"commicrosoftsqlserverjdbcSQLServerDriver"驱动路径为:jdbc:sqlserver://127001:1368;databaseName=mydb;user=sa;password=qiaoning 其中databaseName=mydb代表用户自己创建的数据库名称,user=sa代表登录数据库的用户名,password=qiaoning代表登录数据库的密码。jsp连接mysql的驱动名称如下:commysqljdbcDriver

众所周知, MySQL的驱动表与被驱动表是优化器自动优化选择的结果 (与表连接的前后顺序等无关),我们可以用explain执行计划来知晓:

如上所示,前面一行t1是驱动表,后面一行t2是被驱动表。那么驱动表与被驱动表的选择是否有规律可循呢?下面是百度搜索两个主流的博文对驱动表与被驱动表的阐释:

1 MySQL连接查询驱动表被驱动表以及性能优化 - 阿伟~ - 博客园 博文A 主要结论:

2 mysql驱动表与被驱动表及join优化_java小小小黑的博客-CSDN博客_mysql驱动表和被驱动表 博文B 其主要结论:

两个帖子的结论是都差不多,而且还给出了例子来佐证。那么网上的结论是否权威?是否有普遍性?是否存在缺陷?

让我们来一起打破砂锅问到底。下面有两张表结构一模一样的表t1,t2:其中t1 100条数据,t2 1000条数据;t1(t2)结构如下:

按照上面博文的结论,left join左边是t2表,应该是驱动表。我们查看下结果:

与 博文B 中观点1相违背(同理观点2也违背),与实际不符,但究竟这是为什么呢?

下面发一张MySQL的执行过程(来源于《MySQL实战45讲》中01讲一条SQL查询语句是如何执行的)

so die si ne,原来sql执行的过程是这样呀。等等,不对,这跟刚才SQL又有什么关系,上面left join中t2表还是左边的呀。

我们知道MySQL高版本的性能越来越好,它是不断进行优化迭代的。远古的mysql版本可能还需要人工把小表放在前面,大表放在后面等这些需要人工调优的经验早就已经被解决了。也就是说我们写的语句,MySQL为了追求更好的效率,它在执行器执行前已经帮我们优化了。那么实际优化后的sql如何查看呢?用show warning命令:

其中Message就是优化后实际执行的sql语句,格式化后如下:

优化后left join左连接变成了内连接(inner) join。所以用优化后的sql看,表t1是小表所以作为驱动表,与实际结果相符。

left join 竟然优化成了join,太神奇了,但这是为什么呢?原因在于mysql中null与任何值做等值或者不等值比较的时候都是null,即使是select null=null 也是null。这样where 条件t1a=t2a查询条件不会包含t2a为NULL的行,实际效果其实跟join一样,被优化器智能的优化了。

我们直接看执行计划看实际结果吧:

结果显示t2是驱动表,t1是被驱动表。t2是1000条数据按理说是大表应该是被驱动表,与 博文A , 博文B 的结论又不一致了。

《MySQL实战45讲》中34讲到底可不可以使用join已经讲的很透彻了,很深入了,我就不在这里献丑了。啰嗦几句大概就是驱动表是全表扫描不走索引,所以选被驱动表t1可以走索引,不会全表扫描,减少IO次数,性能高。里面对大表小表的总结,简直是精髓,特意在此再次着重强调:

在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与join的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。

按照上面分析,我们先独立思考下MySQL会选择哪张表作为驱动表呢?

表t1,t2在字段a上都有索引不会全表扫描,其中t1a=5条件过滤后只有一条,很显然嘛,t1数据量少是小表,肯定是驱动表,错不了,再说了前面的红色粗体已经强调了,不会有错的。

有冇搞错?事实又被打脸了。还记得在开篇我们说过的mysql优化器会对sql语句进行优化的吗?下面我们看下执行计划与优化的sql语句:

格式化后的优化SQL如下:

优化后两表t1,t2都走索引,并且都只有一条结果返回,因此都只会扫描一行,数据量一样,所以谁在前面谁就是驱动表,也就是上面sql中表t2。一切都释然,豁然开通!

回头再仔细想想,高,实在是高!仔细深思之后MySQL优化后的句子真让人猛拍大腿。高明之处在于:

1 本来join连接是个MN的嵌套循环,优化后变成了M+N的判断,两表不再嵌套判断了。

2 优化后,两表没有多大必然联系,只需把两表的结果集拼接即可,互不干扰。如果mysql未来可以多线程查询,岂不十分快哉!

小伙伴们还记得我们在上一章 MySQL索引初探 中编码类型不一致发生隐式转换时有时候走索引,有时候索引又失效的问题吗?下面我们选取有代表性的一条记录来分析:

其中表demo_test总共有640条数据,demo_test_ass有3条数据。显然经过过滤条件trid>1完成后demo_test_ass数据量小,应该作为驱动表。虽然testc_utf8mb4 = tc2两字段连接中发生了tc2字段发生隐式转换,但是实际上并不影响被驱动表test上的c_utf8mb4索引。

好了,本章到此结束,让我们一起 总结一下MySQL驱动表与被驱动表的选取原则

หน ง 同等条件,优先选取有索引的表作为被驱动表。 在此介绍一下什么叫同等条件,比如上面的②中的语句。 两表没有其他额外的过滤条件,因此选关联字段有索引的t1作为被驱动表。但是如果加了条件(and t1id=3),此时t1数据量少,就选取了t2作为被驱动表。

สอง MySQL选择驱动表与被驱动表是基于优化器优化后的,小表是驱动表,大表是被驱动表。 基于优化器优化后开篇的 博文A与B 结论成立。

当然这都是我一家之言,并不是官方结论,目前暂未找到官方确切对于驱动表与被驱动表的解释,请大家踊跃拍砖!

怎么用jdbc连接sqlserver数据库查询数据

JDBC连接SQL Server的驱动安装 ,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证)

<1> 将JDBC解压缩到任意位置,比如解压到C盘program files下面,并在安装目录里找到sqljdbcjar文件,得到其路径开始配置环境变量

在环境变量classpath 后面追加 C:\Program Files\Microsoft SQL Server2005 JDBC Driver\sqljdbc_12\enu\sqljdbcjar

<2> 设置SQLEXPRESS服务器:

a打开SQL Server Configuration Manager -> SQLEXPRESS的协议 -> TCP/IP

b右键单击启动TCP/IP

c双击进入属性,把IP地址中的IP all中的TCP端口设置为1433

d重新启动SQL Server 2005服务中的SQLEXPRESS服务器

e关闭SQL Server Configuration Manager

<3> 打开刚刚安装好的 SQL Server Management Studio,连接SQLEXPRESS服务器, 新建数据库,起名字为sample

<4> 打开Eclipse

a新建工程-> Java -> Java project,起名为Test

b选择eclipse->窗口->首选项->Java->installed JRE 编辑已经安装好的jdk,查找目录添加sqljdbcjar

c右键单击目录窗口中的Test, 选择Build Path ->Configure Build Path, 添加扩展jar文件,即把sqljdbcjar添加到其中

<5> 编写Java代码来测试JDBC连接SQL Server数据库

写个方法package util;import javasqlConnection;

import javasqlDriverManager;

import javasqlSQLException;public class DBUtil { static String jdbcURL = "jdbc:mysql://localhost:3306/book";

static String jdbcDriver = "commysqljdbcDriver";

static String userName = "root";

static String password = "root";

/

获取数据库连接对象

@return 数据库连接对象

@throws ClassNotFoundException

@throws SQLException

/

public static Connection getConnection() throws ClassNotFoundException,

SQLException {

ClassforName(jdbcDriver);

return DriverManagergetConnection(jdbcURL, userName, password);

}

以上就是关于java数据库 *** 作时提示找不到驱动全部的内容,包括:java数据库 *** 作时提示找不到驱动、连接sql2008数据库需要什么驱动、MySQL表连接之驱动表与被驱动表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9503089.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存