使用spring的jdbcTemplate用PreparedStatement执行sql的时候,怎么打印最终执行的sql。
这个问题简单。首先你自己创建一个MyJdbcTemplate。继承JdbcTemplate,然后重载下面的两个方法:
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterDisposer;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.util.Assert;
public final PreparedStatementSetter pss, final ResultSetExtractor throws DataAccessException { Assert.notNull(rse, "ResultSetExtractor must not be null"); logger.debug("Executing prepared SQL query"); return execute(psc, new PreparedStatementCallback public T doInPreparedStatement(PreparedStatement ps) throws SQLException { ResultSet rs = null; try { if (pss != null) { pss.setValues(ps); } if (logger.isDebugEnabled()) { logger.debug(ps.toString()); } rs = ps.executeQuery(); ResultSet rsToUse = rs; if (getNativeJdbcExtractor() != null) { rsToUse = getNativeJdbcExtractor().getNativeResultSet(rs); } return rse.extractData(rsToUse); } finally { JdbcUtils.closeResultSet(rs); if (pss instanceof ParameterDisposer) { ((ParameterDisposer) pss).cleanupParameters(); } } } }); } protected int update(final PreparedStatementCreator psc, final PreparedStatementSetter pss) throws DataAccessException { logger.debug("Executing prepared SQL update"); return execute(psc, new PreparedStatementCallback public Integer doInPreparedStatement(PreparedStatement ps) throws SQLException { try { if (pss != null) { pss.setValues(ps); } if (logger.isDebugEnabled()) { logger.debug(ps); } int rows = ps.executeUpdate(); if (logger.isDebugEnabled()) { logger.debug("SQL update affected " + rows + " rows"); } return rows; } finally { if (pss instanceof ParameterDisposer) { ((ParameterDisposer) pss).cleanupParameters(); } } } }); } 然后就会打印最终执行的sql。 如果用spring?ioc?,要改配置文件,比如: 这个比较简单,大多说人都知道,呵呵,配置如下: hibernate.show_sql=true hibernate.format_sql=false 使用log4jdbc log4jdbc打印执行的SQL(包括参数)和输出数据(有点想MYSQL的CMD命令执行结果) log4jdbc是在JDBC层切入,打印出实际执行的SQL语句和数据库返回数据,所以,就算不是使用Hibernate也可以使用,因为涉及数据库JDBC驱动的变更,建议在开发环境使用。 首先配置 log4j日志文件 #mybatis日志范围 log4j.logger.com.nes=TRACE #ibatis配置 log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG 2.导入依赖日志包 log4j slf4j-log4j12 log4j slf4j-api 1 B Statement 1、创建 Statement 对象 建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。Statement 对象用 Connection 的方法 createStatement 创建,如下列代码段中所示: Connection con = DriverManager.getConnection(url, "sunny", ""); Statement stmt = con.createStatement(); 为了执行 Statement 对象,被发送到数据库的 SQL 语句将被作为参数提供给 Statement 的方法: ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2"); 2、使用 Statement 对象执行语句 Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。使用哪一个方法由 SQL 语句所产生的内容决定。 方法 executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。 方法 executeUpdate 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 方法 execute 用于执行返回多个结果集、多个更新计数或二者组合的语句。因为多数程序员不会需要该高级功能,所以本概述后面将在单独一节中对其进行介绍。 执行语句的所有方法都将关闭所调用的 Statement 对象的当前打开结果集(如果存在)。这意味着在重新执行 Statement 对象之前,需要完成对当前 ResultSet 对象的处理。 应注意,继承了 Statement 接口中所有方法的 PreparedStatement 接口都有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 对象本身不包含 SQL 语句,因而必须给 Statement.execute 方法提供 SQL 语句作为参数。PreparedStatement 对象并不将 SQL 语句作为参数提供给这些方法,因为它们已经包含预编译 SQL 语句。CallableStatement 对象继承这些方法的 PreparedStatement 形式。对于这些方法的 PreparedStatement 或 CallableStatement 版本,使用查询参数将抛出 SQLException。 3、语句完成 当连接处于自动提交模式时,其中所执行的语句在完成时将自动提交或还原。语句在已执行且所有结果返回时,即认为已完成。对于返回一个结果集的 executeQuery 方法,在检索完 ResultSet 对象的所有行时该语句完成。对于方法 executeUpdate,当它执行时语句即完成。但在少数调用方法 execute 的情况中,在检索所有结果集或它生成的更新计数之后语句才完成。 概述 Statement 对象用于将 SQL 语句发送到数据库中。实际上有三种 Statement 对象,它们都作为在给定连接上执行 SQL 语句的包容器:Statement、PreparedStatement(它从 Statement 继承而来)和 CallableStatement(它从 PreparedStatement 继承而来)。它们都专用于发送特定类型的 SQL 语句: Statement 对象用于执行不带参数的简单 SQL 语句;PreparedStatement 对象用于执行带或不带 IN 参数的预编译 SQL 语句;CallableStatement 对象用于执行对数据库已存储过程的调用。 Statement 接口提供了执行语句和获取结果的基本方法。PreparedStatement 接口添加了处理 IN 参数的方法;而 CallableStatement 添加了处理 OUT 参数的方法。 有些 DBMS 将已存储过程中的每条语句视为独立的语句;而另外一些则将整个过程视为一个复合语句。在启用自动提交时,这种差别就变得非常重要,因为它影响什么时候调用 commit 方法。在前一种情况中,每条语句单独提交;在后一种情况中,所有语句同时提交。 4、关闭 Statement 对象 Statement 对象将由 Java 垃圾收集程序自动关闭。而作为一种好的编程风格,应在不需要 Statement 对象时显式地关闭它们。这将立即释放 DBMS 资源,有助于避免潜在的内存问题。 #jdbcTemplate sql log4j.logger.org.springframework.jdbc.core=DEBUG, file log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=TRACE, file 用这两个就可以,这个好像是spring 2.5.*支持,再高的版本没试,只能打印出sql和参数,没有其它的说明,看的有些眼花~~ 问题要描述清楚,使用什么框架,是hibernate,还是mybatis,或者自己写的数据库连接工具。如果是hibernate,需要在hibernate属性文件中配置hibernate.show_sql=true,或者在hibernate.cfg.xml文件中配置。 如果是mybatis,配置log4j 1、Connection conn = DriverManager.getConnection(URL,数据库登录名,数据库登录密码);//获得数据库连接。 2、Statement statement = con.createStatement(); //访问数据库。 3、ResultSet resultSet = statement.executeQuery(sql);//执行SQL语句。 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 技术应用 1、Android应用 许多的 Android应用都是Java程序员开发者开发。虽然 Android运用了不同的JVM以及不同的封装方式,但是代码还是用Java语言所编写。相当一部分的手机中都支持JAVA游戏,这就使很多非编程人员都认识了JAVA。 2、在金融业应用的服务器程序 Java在金融服务业的应用非常广泛,很多第三方交易系统、银行、金融机构都选择用Java开发,因为相对而言,Java较安全[39]?。大型跨国投资银行用Java来编写前台和后台的电子交易系统,结算和确认系统,数据处理项目以及其他项目。 3、网站 Java 在电子商务领域以及网站开发领域占据了一定的席位。开发人员可以运用许多不同的框架来创建web项目,SpringMVC,Struts2.0以及frameworks。即使是简单的 servlet,jsp和以struts为基础的网站在政府项目中也经常被用到。 4、嵌入式领域 Java在嵌入式领域发展空间很大。在这个平台上,只需130KB就能够使用Java技术。 5、大数据技术 Hadoop以及其他大数据处理技术很多都是用Java,例如Apache的基于Java的HBase和Accumulo以及 ElasticSearchas。 6、高频交易的空间 Java平台提高了这个平台的特性和即使编译,他同时也能够像 C++ 一样传递数据。正是由于这个原因,Java成为的程序员编写交易平台的语言,因为虽然性能不比C++,但开发人员可以避开安全性,可移植性和可维护性等问题。 7、科学应用 Java在科学应用中是很好选择,包括自然语言处理。最主要的原因是因为Java比C++或者其他语言相对其安全性、便携性、可维护性以及其他高级语言的并发性更好。 Statement接口的对象用于执行简单的不带参数的SQL语句。 PrepareStatement接口的对象用于执行带有IN类型参数的预编译过的SQL语句。 CallbleStatement接口的对象用于执行一个数据库的存储过程。 rosoft.jdbc.base.BasePreparedStateme 首先确保SQLSERVER服务正在运行,并可以允许远程访问连接 然后按如下步骤进行连接 1.安装JDBC驱动 1)下载JDBC驱动 [www.microsoft.com] 2)执行sqljdbc_4.0.2206.100_chs.exe解压驱动文件 3)拷贝以下目录中的sqljdbc_auth.dll到Windows的System32目录。对x64的机子,x64的dll拷到C:\Windows\System32,x86的dll拷到C:\Windows\SysWOW64目录。 Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\chs\auth\ 2.在Java程序中连接SQL Server classpath中加上安装好的SQL Server jdbc jar包 Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\chs\sqljdbc4.jar 连接SQL Server的JDBC代码 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url = "jdbc:sqlserver://localhost:54364;databaseName=master;IntegratedSecurity=True"; Connection con = DriverManager.getConnection(url); 在SQL Server Browser服务开启的情况下也可以通过服务名连接 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url = "jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=master;IntegratedSecurity=True"; Connection con = DriverManager.getConnection(url); 3.身份验证模式 SQL Server默认使用Windows身份验证模式,这也是官方推荐的模式,安全性更高。上面的连接例子就是采用的Windows认证。如果要使用混合认证模式,需要下载SQL Server Management Studio,并通过SQL Server Management Studio修改认证模式为混合认证模式。 SQL Server Management Studio的下载地址 [www.microsoft.com] 修改SQL Server认证模式的方法 [technet.microsoft.com](v=sql.105).aspx 混合认证模式下,可以由数据库进行认证,连接时需要提供用户名和密码 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String url = "jdbc:sqlserver://localhost:54364;databaseName=master"; Connection con = DriverManager.getConnection(url,"user","password"); 转载请注明出处句子大全网 » 使用spring的jdbcTempl怎么将jdbc中的sql打印
怎样在控制台或者日志打印输出JDBC执行的sql语句
在JAVA中,使用JDBC访问数据库时可以执行SQL语句完成对数据库造作的是
spring JdbcTemplate 利用 Log4j 在控制台打印出SQL语句、参数
jdbc执行sql语句怎么实现在console控制台中显示执行过的sql语句
java中执行sql插入语句怎么弄
27. JDBC 提供了三种接口来实现SQL语句的发送执行,( )接口的对象用于执行简单的不带参数的SQL语句。
怎么用PreparedStatement打印sql语句 (整个语句)
jdbc连接数据库sqlserver后怎么执行sql语句