您的位置:首页 > 数据库

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: