js的东东吧!sql语句 
insert 
delete
alter
select

解决方案 »

  1.   

    就是在struts框架中调用存储过程,SQL中的存储过程的语句该怎么写呢
      

  2.   

    STRUTS的数据源配置如下
    <data-sources>
        <data-source key="sqlserver" type="org.apache.commons.dbcp.BasicDataSource">
          <set-property property="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
          <set-property property="url" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PersonalCard;" />
          <set-property property="username" value="sa" />
          <set-property property="password" value="111" />
          <set-property property="auotCommit" value="true" />
        </data-source>
      </data-sources>
    这里和ORACLE不同的是 <set-property property="username" value="sa" /> 注意 是username而不是user!!!!!!!
    还有property="driverClassName"注意注意再注意,一点小错误都不行配置完成了 该进ACTION里调用了 这里我继承的是DispatchAction 因为经常涉及到数据库的操作 所以我把对数据库的连接单独拿出来弄了个类 如下:
    package com.google.common;import java.sql.*;import javax.sql.DataSource;public class Dao {
        private Connection conn;//定义连接
        private CallableStatement cstmt;//存储过程
        
        public CallableStatement getCallableStatement(DataSource ds,String st){
            
            try {
                conn = ds.getConnection();//获得数据源
                cstmt = conn.prepareCall(st);//将传进来的String类型的参数做为参数得到存储过程对象
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return cstmt;//返回该对象
        }
        
        public void close(){
            
            try {
                conn.close();
                cstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }}在ACTION里得到了CallableStatement 的对象后对其参数进行负值(如果没有参数的话就不用了)
    以下是ACTION中的部分代码
    try {
                 Dao dao = new Dao();
                String st = "{call P_PersonalCardlList}";//这里的存储对象没有参数
                CallableStatement cstmt = dao.getCallableStatement(ds, st);//调用上面的类对象
                cstmt.execute();//不能少
                rs = cstmt.getResultSet();//比较简单
                while (rs.next()) {
                    Person p = new Person();                p.setPersonalCardID(rs.getInt("PersonalCardID"));
                    p.setPersonalCardNo(rs.getString("PersonalCardNo"));
                    p.setName(rs.getString("PersonalName"));
                    p.setAge(rs.getInt("PersonalAge"));                list.add(p);
                }                } catch (Exception e) {
                e.printStackTrace();        } finally {
                dao.close();        }
    如果遇到有参数的存储过程的话这样写:
    try {            String st = "{call P_PersonalNationalAlter(?,?,?,?)}";
                CallableStatement cstmt = dao.getCallableStatement(ds, st);
                cstmt.setInt(1, cardId);
                cstmt.setString(2, cardNo);
                cstmt.setString(3, name);
                cstmt.setInt(4, age);            cstmt.executeUpdate();        } catch (Exception e) {
                e.printStackTrace();
            } finally {
                dao.close();        }