用jdbc连接数据库时无法找到驱动类怎么办,是什么问题下面是我的代码

用jdbc连接数据库时无法找到驱动类怎么办,是什么问题下面是我的代码,第1张

jdbc和连接池对于你这个场景来说,都足够,既然用spring管理了,建议还是使用连接池,另外,spring自身没有实现连接池,一般都是对第三方连接池的包装,常见的有C3P0,dbcp以及最近比较流行的boneCP等,这几个配置都差不多太多,以boneCP为例:

<bean id="dataSource" class="comjolboxbonecpBoneCPDataSource"

destroy-method="close">

<property name="driverClass" value="${jdbcdriverClass}" />

<property name="jdbcUrl" value="${jdbcurl}" />

<property name="username" value="${jdbcuser}" />

<property name="password" value="${jdbcpassword}" />

<property name="idleConnectionTestPeriod" value="60" />

<property name="idleMaxAge" value="240" />

<property name="maxConnectionsPerPartition" value="30" />

<property name="minConnectionsPerPartition" value="10" />

<property name="partitionCount" value="2" />

<property name="acquireIncrement" value="5" />

<property name="statementsCacheSize" value="100" />

<property name="releaseHelperThreads" value="3" />

</bean>

<bean id="jdbcTemplate" class="orgspringframeworkjdbccoreJdbcTemplate">

<property name="dataSource" ref="dataSource" />

</bean>

现有俩表A,B,A表有主键,B表建立外键关联到A表

修改A表,若修改之后的结果是B表外键字段的值在A表中找不到了,则会报错,不允许进行此修改,其他情况可以任意修改。

修改B表,必须保证修改后B表外键字段的值依然能在A表中找到,否则会报错。

俩表自己的修改,只会影响自己表的数据,对其他表无影响。

你好,这种功能的实现方法有很多。下面提供两种方案。

1     建立级联

2     建立触发器

参见下面的代码,有问题再追问。

-- 建立测试环境

-- 创建测试主表 ID 是主键

CREATE TABLE test_main (

  id      INT   NOT NULL,

  value   VARCHAR(10),

  PRIMARY KEY(id)  

);

-- 创建测试子表 

CREATE TABLE test_sub (

  id      INT  NOT NULL,

  main_id INT ,

  value   VARCHAR(10),

  PRIMARY KEY(id)  

);

-- 插入测试主表数据

INSERT INTO test_main(id, value) VALUES (1, 'ONE');

INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据

INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');

INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

方法一、级联

-- 增加外键约束,  实现级联删除

-- 创建外键(使用 ON DELETE CASCADE 选项,删除主表的时候,同时删除子表)

ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id)  REFERENCEStest_main  ON DELETE CASCADE;

-- 测试删除主表数据 将成功地执行

DELETE TEST_MAIN WHERE ID = 1;

-- 测试检索子表,应该只有一条 main_id = 2 的数据

SELECT  FROM test_sub;

go

(1 行受影响)

id          main_id     value

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

          2           2 TWOTWO

 

(1 行受影响)

方法二、建立触发器进行删除

IF EXISTS (SELECT NAME FROM SYSOBJECTS 

WHERE NAME = 'DEL_TR' AND TYPE = 'TR') 

DROP TRIGGER DEL_TR 

GO 

CREATE TRIGGER DEL_TR 

ON TEST_MAIN

FOR DELETE 

AS 

IF (SELECT COUNT() FROM DELETED) > 0 

DELETE FROM TEST_SUB WHERE ID IN (SELECT ID FROM DELETED) 

GO

Oracle、DB2、SQL Server 都支持。

MySQL 触发器不支持 。

-- 创建测试主表 ID 是主键

CREATE TABLE test_main (

id INT NOT NULL,

value VARCHAR(10),

PRIMARY KEY(id)

);

-- 创建测试子表

CREATE TABLE test_sub (

id INT NOT NULL,

main_id INT ,

value VARCHAR(10),

PRIMARY KEY(id)

);

-- 插入测试主表数据

INSERT INTO test_main(id, value) VALUES (1, 'ONE');

INSERT INTO test_main(id, value) VALUES (2, 'TWO');

-- 插入测试子表数据

INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');

INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');

Oracle

-- 创建外键(使用 ON DELETE CASCADE 选项,删除主表的时候,同时删除子表)

ALTER TABLE test_sub

ADD CONSTRAINT main_id_cons

FOREIGN KEY (main_id) REFERENCES test_main ON DELETE CASCADE;

CREATE OR REPLACE TRIGGER BeforeDeleteTest_sub

BEFORE DELETE ON test_sub

FOR EACH ROW

BEGIN

dbms_outputput_line('BEFORE DELETE test_sub');

dbms_outputput_line('Old value = ' || :oldvalue );

END;

/

SQL> set serveroutput on

SQL> -- 测试删除主表数据 将成功地执行

SQL> DELETE

2 TEST_MAIN

3 WHERE

4 ID = 1;

BEFORE DELETE test_sub

Old value = ONEONE

已删除 1 行。

SQL>

SQL> -- 测试检索子表,应该只有一条 main_id = 2 的数据

SQL> SELECT

2

3 FROM

4 test_sub;

ID MAIN_ID VALUE

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

2 2 TWOTWO

DB2

-- 日志信息表

CREATE TABLE log_table ( log_data varchar(50));

-- 触发器

CREATE TRIGGER AfterDeleteTest_sub

AFTER DELETE ON test_sub

REFERENCING OLD AS O

FOR EACH ROW

BEGIN

INSERT INTO log_table VALUES ( 'Delete value = ' || Ovalue );

END

@

-- 外键约束

ALTER TABLE test_sub

ADD CONSTRAINT main_id_cons

FOREIGN KEY (main_id)

REFERENCES test_main ON DELETE CASCADE;

-- 测试删除主表数据 将成功地执行

DELETE

TEST_MAIN

WHERE

ID = 1;

-- 检查日志信息表,看看触发器是否被触发

db2 => SELECT FROM log_table;

LOG_DATA

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

Delete value = ONEONE

1 条记录已选择。

-- 测试检索子表,应该只有一条 main_id = 2 的数据

db2 => SELECT FROM test_sub;

ID MAIN_ID VALUE

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

2 2 TWOTWO

1 条记录已选择。

SQL Server

-- 触发器

CREATE TRIGGER AfterDeleteTest_sub

ON Test_sub

FOR DELETE

AS

DECLARE

@OldValue VARCHAR(10);

BEGIN

PRINT('AFTER DELETE');

SELECT @OldValue = value FROM deleted;

PRINT('Old Value = ' + @OldValue);

END;

go

-- 创建外键(使用 ON DELETE CASCADE 选项,删除主表的时候,同时删除子表)

ALTER TABLE test_sub

ADD CONSTRAINT main_id_cons

FOREIGN KEY (main_id) REFERENCES test_main ON DELETE CASCADE;

GO

-- 测试删除主表数据 将成功地执行

1> DELETE TEST_MAIN WHERE ID = 1;

2> GO

AFTER DELETE

Old Value = ONEONE

(1 行受影响)

-- 测试检索子表,应该只有一条 main_id = 2 的数据

SELECT

FROM

test_sub;

go

(1 行受影响)

id main_id value

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

2 2 TWOTWO

(1 行受影响)

MySQL

-- 日志信息表

CREATE TABLE log_table ( log_data varchar(50));

-- 触发器

DELIMITER //

CREATE TRIGGER BeforeDeleteTest_sub

BEFORE DELETE ON Test_sub

FOR EACH ROW

BEGIN

INSERT INTO log_table VALUES ( CONCAT('Delete Value = ', oldValue) );

END;

//

DELIMITER ;

-- 外键

ALTER TABLE test_sub ADD CONSTRAINT fk_main_id_cons

FOREIGN KEY (main_id) REFERENCES test_main(id)

ON DELETE CASCADE;

-- 删除

DELETE FROM test_main WHERE id = 1;

-- 检查日志信息表,看看触发器是否被触发

mysql> SELECT FROM log_table;

Empty set (000 sec)

MySQL 外键级联删除, 不会触发 子表的触发器

-- 测试检索子表,应该只有一条 main_id = 2 的数据

mysql> SELECT FROM test_sub;

+----+---------+--------+

| id | main_id | value |

+----+---------+--------+

| 2 | 2 | TWOTWO |

+----+---------+--------+

1 row in set (000 sec)

>

String driverName = "commysqljdbcDriver"; // 加载JDBC驱动

String dbURL = "jdbc:mysql://localhost:3306/test"; // 连接服务器和数据库test

String userName = "sa"; // 默认用户名

String userPwd = "sa"; // 密码

javasqlConnection dbConn;

 

try {

    ClassforName(driverName)newInstance();

    dbConn = javasqlDriverManagergetConnection(dbURL, userName, userPwd);

    Systemoutprintln("Connection Successful!");  //如果连接成功 控制台输出Connection Successful!

} catch (ClassNotFoundException e) {

    Systemoutprintln("没有找到驱动");

} catch (Exception e) {

    // TODO: handle exception

    eprintStackTrace();

}

还是直接上代码吧。

String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=one";

这种不是纯jdbc驱动,用这种方式连接数据库还需要几个类包的,分别是msbasejar、mssqlserverjar和msutiljar,百度一下,可以在网上找到

以上就是关于用jdbc连接数据库时无法找到驱动类怎么办,是什么问题下面是我的代码全部的内容,包括:用jdbc连接数据库时无法找到驱动类怎么办,是什么问题下面是我的代码、数据库的两个表通过主键和外键相关联如果修改其中表的数据会不会自动修改另一个表的数据啊、c# 设计数据库中有两个表,当主表中的一条记录删除时,副表中的相关记录全部自动删除等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存