Seasar如何执行自定义SQL语句-yellowcong
2017-07-14 11:45
846 查看
在Seasar中,没有给我们提供自定义SQL语句的操作,所以我看了一下源码,解决的思路是获取到Seasar封装的DataSourceImpl这个对象,然后我们就可以获取到数据库连接,然后就可以随意操作了,组建注入的时候,是父类,不能是子类,如果是子类,就会报错
原生的数据库连接获取操作
package com.yellowcong.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.seasar.extension.dbcp.impl.DataSourceImpl; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.S2ContainerFactory; /** * Test。 * * * * @version $Id$ */ public class Test { private static final String PATH = "app.dicon"; public static void main(String [] args){ //获取到容器对象 S2Container container = S2ContainerFactory.create(PATH); //容器初始化 container.init(); try{ DataSourceImpl dataSourceImpl = (DataSourceImpl) container.getComponent("dataSource"); Connection conn = dataSourceImpl.getConnection(); PreparedStatement ps = conn.prepareStatement("SELECT KAI_NEN FROM V_TOKEI_IN"); ResultSet rs = ps.executeQuery(); while(rs.next()){ String nendo = rs.getString("KAI_NEN"); System.out.println(nendo); } }catch(Exception e){ } } }
配置文件
j2ee.dicon<?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN" "http://www.seasar.org/dtd/components.dtd"> <components namespace="j2ee"> <component name="transactionManager" class="org.seasar.extension.jta.TransactionManagerImpl"/> <component name="requiredTx" class="org.seasar.extension.tx.RequiredInterceptor"/> <component name="requiresNewTx" class="org.seasar.extension.tx.RequiresNewInterceptor"/> <component name="mandatoryTx" class="org.seasar.extension.tx.MandatoryInterceptor"/> <component name="notSupportedTx" class="org.seasar.extension.tx.NotSupportedInterceptor"/> <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/> <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/> <!-- <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/> <component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/> --> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "oracle.jdbc.OracleDriver" </property> <property name="URL">"jdbc:oracle:thin:@110.110.110.110:1110:doubi"</property><property name="user">"yonghuming"</property><property name="password">"mima"</property> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <property name="timeout">600</property> <property name="maxPoolSize">10</property> <property name="allowLocalTx">true</property> <destroyMethod name="close"/> </component> <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"/> <!-- <component name="initialContext" class="javax.naming.InitialContext"/> <component name="transactionManager" class="org.seasar.extension.j2ee.JndiTransactionManager"> <arg>initialContext</arg> <arg>"java:comp/UserTransaction"</arg> </component> <component class="org.seasar.extension.j2ee.JndiDataSource"> <arg>initialContext</arg> <arg>"java:comp/env/jdbc/MyDataSource"</arg> </component> --> </components>
组建调用
调用中,我们注入的是他的父类,在这个Seasar的框架中,都是注入父类的,子类找不到包。import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.sql.DataSource; import org.apache.poi.ss.usermodel.Row; import org.apache.struts.util.LabelValueBean; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.seasar.extension.dbcp.impl.DataSourceImpl; /** * DoubiDomainImpl * * * * @version $Id$ */ public class DoubiDomainImpl implements DoubiDomain{ //我们注入的是他的父类,不能是子类,DataSourceImpl ,如果注入子类,就空指针异常 private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } @Override public void setCmbKaiNen() { Connection conn; try { conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement("SELECT KAI_NEN FROM V_TOKEI_IN"); ResultSet rs = ps.executeQuery(); while(rs.next()){ String nendo = rs.getString("KAI_NEN"); System.out.println(nendo); } } catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } }
相关文章推荐
- mysql 的优化(如何查询mysql中执行效率低的sql语句)
- 如何跟踪mysql执行的sql语句
- 如何用EF执行自定义的SQL查询
- 如何执行用字符串组成的SQL语句
- 如何在mybatis中一个insert,delete,update中执行多条SQL语句
- 012-HQL中级2-Hive如何执行文件中的sql语句
- docmd.runsql 语句执行的操作查询如何回滚?
- 如何在ACCESS软件里执行SQL语句
- 如何判断存储过程中,T-SQL语句是否执行?
- SQL语句在数据库中是如何执行的
- ORACLE OEM简介(如何利用OEM查看oracle当前在执行哪些SQL语句)
- 如何测试sql语句性能,提高执行效率
- EntityFramework 4/5/6 中执行自定义SQL语句
- 在SQL 2008中总是出现问题:执行Transact-SQL语句或批处理时发生异常。如何解决?
- mysql如何跟踪执行的sql语句
- 如何在MyEclipse中建立sql文件,并执行语句?
- SQLSERVER 存储过程里如何执行SQL语句
- 在性能测试时,如何观察服务器端Oracle在执行的Sql语句
- 如何在JAVA代码中执行 exec master..xp_cmdshell @cmd // 当作SQL语句调用就成了 或者调用 Runtime.getRuntime().exec
- sql语句中如何根据不同的条件,执行不同的where条件