• 由Java调用存储过程编写引发的思考


    由Java掉存储过程的代码并不复杂。但要完成一种调用机制时,会遇到一个相对棘手的问题。

    比如,我希望调用存储过程时,能有一个接口,提供两个重载方法。(设计阶段)

    void runSp(Dbstr dbstr, String spname, String p_result);
    void runSp(Dbstr dbstr, String spname, String p_result, DataTable dt);

    Dbstr用于映射不同的数据库连接,spname指定存储过程名称,p_result获取存储过程运行结果的信息。(当然参数列表中可能还缺少作为SP参数的Map信息)。

    此时,p_result所能获取到的是值类型的数据,而非引用类型的数据,所以,在实现这个接口的类中,并不能实现这个运行机制。

    此时baidu/google/bing大约1个小时。发现问题的症结不是在于JAVA没有提供类似.net中的ref或者out关键字,而是,你懂的。

    简单的说,是参数列表中,可以接收引用类型的数据,可能只有类的对象,而类似int, String, double...都不是对象,都是值类型的数据。所以,我很自然的想到了.net中的boxing与unboxing(装箱拆箱),但是这件事情,在做.net编程的时候,都是系统帮忙完成,你写

    (123).ToString();

    在.net中是合法的,因为系统会自动装箱。但是你要在java里面写这样的代码,是不能编译通过的。

    回到我要实现的运行模式中,要实现这两个接口,估计只能用,

    void runSp(Dbstr dbstr, String spname, BString p_result);
    void runSp(Dbstr dbstr, String spname, BString p_result, DataTable dt);

     而BString的作用就是装箱:

    public class BString {
        
    private String value;

        
    public String getValue() {
            
    return value;
        }

        
    public void setValue(String value) {
            
    this.value = value;
        }
    }

    这样,对于.net与java的联系,又多了一些。

  • 相关阅读:
    【javascript】select操作实例
    【javascript】函数
    【javascript】一些资料
    【javascript】操作符:一元操作符
    动态执行Sql
    索引( index )
    事务
    用户相关
    视图(view)
    函数(function)
  • 原文地址:https://www.cnblogs.com/rain64531264/p/2153431.html
Copyright © 2020-2023  润新知