在Spring中配置jdbc为啥不能用$问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Spring中配置jdbc为啥不能用$问题相关的知识,希望对你有一定的参考价值。

楼主在spring中配置jdbc时,引用的是dbcp.jar包,在dataSource.properties配置文件中,有mysql用户名,楼主自然的选择了使用username,密码是root,
然后在spring的配置applicationContext.xml文件中去读取配置,代码检查了几遍都是对的,然而每次运行时都包这个错Cannot create PoolableConnectionFactory (Access denied for user \'ls\'@\'localhost\' (using password: YES)) 然后我发现,ls,是我的电脑名,想到为什么会读我的电脑名的名字,后来检查发现,在加载读取配置文件的标签中
<context:property-placeholder location="classpath:dataSource.properties" /> 少了一条属性system-properties-mode="FALLBACK",
系统默认为system-properties-mode="ENVIRONMENT" 意思就是从系统环境中去读取,把电脑名当做mysql的用户名,修改之后,运行成功。
参考技术A 首先检查sprint配置
目测没问题编写测试代码:插入条数据抛异运行测试代码结数据表数据确实没滚异前数据都提交数据表
再检查spring数据库配置xml
修改AOP设置pointcut节点怀疑expression配置确修事务依起作用
第三始网搜索
我注意我面临情况相似问题:
由于采用SpringMVC、 MyBatis故统采用标注声明Service、Controller
由于服务器启加载配置文件顺序web.xml—root-context.xml(Spring配置文件)—servlet-context.xml(SpringMVC配置文件)由于root-context.xml配置文件Controller先进行扫描装配service没进行事务增强处理原Service(没经事务加强处理故没事务处理能力)所我必须root-context.xml扫描Controller
Spring容器优先加载由ServletContextListener(应applicationContext.xml)产父容器 SpringMVC(应mvc_dispatcher_servlet.xml)产容器容器Controller进行扫描装配装配 @Service注解实例没经事务加强处理即没事务处理能力Service父容器进行初始化Service保证事务增强处理能力 容器Service exclude掉原事务处理能力Service文情况同bean定义两面优先
原能面提剩工作实践
修改spring-mvc.xml

12345

修改spring-common.xml (applicationContext.xml)

1234

修改spring-mybatis.xml

<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<aop:pointcut id="transactionPointcut"
expression="execution(* com.sds..*service.*.*(..))" />
<aop:advisor pointcut-ref="transactionPointcut"
advice-ref="transactionAdvice" />

为啥我不能在 JDBC 中使用 .dump 命令?

【中文标题】为啥我不能在 JDBC 中使用 .dump 命令?【英文标题】:Why can I not use the .dump command with JDBC?为什么我不能在 JDBC 中使用 .dump 命令? 【发布时间】:2018-02-28 00:18:47 【问题描述】:

我试图通过将一个表的内容转储到另一个表来合并两个 sqlite 表。但是,每次我尝试这样做时,都会抛出一个语法错误,说明“[SQLITE_ERROR] SQL 错误或缺少数据库(靠近“sqlite3”:语法错误)”

conn是原始数据库的连接,我发送所有的sql命令。 newConn 是要合并的数据库的连接。

我该如何解决这个问题?提前谢谢!

编辑:我只是想确保它不会因为重复而被关闭。我使用了here的sql代码,但是还是有问题。

        newConn = DriverManager.getConnection("jdbc:sqlite:" + path);

        String sqlMerge =  "sqlite3 ? .dump";
        conn.setAutoCommit(false);
        PreparedStatement pstmt1 = conn.prepareStatement(sqlMerge);
        pstmt1.setString(1, newConn.getCatalog());
        pstmt1.executeUpdate();
        conn.commit();

【问题讨论】:

【参考方案1】:

.dump 是 SQLite 命令行 shell 的一个特性。 SQL 语言的 SQLite 方言无法识别它。您可以在 Java 中调用命令行 shell,也可以使用实际的 SQL 命令通过 JDBC(读取数据)和 Java 文件操作(写入所需的转储文件)执行等效操作。

【讨论】:

非常感谢您的回答。我想我必须找到另一种方法来做到这一点。

以上是关于在Spring中配置jdbc为啥不能用$问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2程序不能加载 com.mysql.jdbc.Driver 问题

在mybatis跟spring集成的时候,为啥还要导入spring-jdbc的包呢,这里面不是

spring整合JDBC

为啥我们的 Spring/Hibernate/JDBC/Websphere 系统中的连接过早关闭?

spring简介配置入门

为啥 Spring 的 JDBC 模板不使用表默认值