Seasar如何执行自定义SQL语句-yellowcong

在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();
        }



    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值