使用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語句