小编Lui*_*Sep的帖子

插入3时,"ORA-01438:此列允许的值大于指定的精度"

尝试将除0之外的任何数字插入格式为NUMBER(2,2)的字段时,我遇到了该错误.

UPDATE
    PROG_OWN.PROG_TPORCENTAJE_MERMA
SET
    PCT_MERMA = 3
WHERE
    IDN_PORCENTAJE_MERMA = 1
Run Code Online (Sandbox Code Playgroud)

[错误代码:1438,SQL状态:22003] ORA-01438:大于此列允许的指定精度的值

COLUMN_NAME DATA_TYPE   TYPE_NAME   COLUMN_SIZE   BUFFER_LENGTH   DECIMAL_DIGITS
PCT_MERMA   3           NUMBER      2             0               2
Run Code Online (Sandbox Code Playgroud)

如果我尝试十进制数字也会发生这种情况.

知道为什么吗?

sql oracle

19
推荐指数
2
解决办法
13万
查看次数

多个PostConstruct方法?

它在Java的 PostConstruct 文档页面中说明了这一点

只有一个方法可以使用此注释进行注释

但我只是尝试用PostConstruct注释一个独立应用程序的三种方法.没有编译错误,并且所有三个都被调用并顺利执行.

那我错过了什么?什么样的类可以存在多个PostConstruct注释?

java javadoc postconstruct

16
推荐指数
2
解决办法
6462
查看次数

Casting Map <Integer,Set <Object >>

我有一个带Map<Integer, Set<Object>>参数的方法.我需要使用a Map<Integer, Set<String>>和a Map<Integer, Set<Integer>>参数从两个不同的位置调用它.

编译器投诉所以我改变了方法参数签名Map<Integer, ?>,现在我可以调用它,但是有不同的问题.方法基本如下:

private void methodA (Map<Integer, ?> inOutMap, Integer key, Object value) {

        Set<Object> list = new HashSet<Object>();

        if (!inOutMap.containsKey(key)) {
            list.add(value);
        } else {
            list = (Set<Object>) (Set<?>) inOutMap.get(key); //I wrote the cast, but looks quite ugly
            list.add(value);
        }

        inOutMap.put(key, list); //compiler error
        //The method put(Integer, capture#4-of ?) in the type Map<Integer,capture#4-of ?> is not applicable for the arguments (Integer, Set<Object>)
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法解决编译错误?这是,铸造list?. …

java casting

7
推荐指数
1
解决办法
1775
查看次数

可能尚未初始化局部变量 - 检测方法中未经检查的异常抛出

我有一些这种结构的代码:

public void method() {
    Object o;
    try {
        o = new Object();
    } catch (Exception e) {
        //Processing, several lines
        throw new Error(); //Our own unchecked exception
    }
    doSomething(o);
}
Run Code Online (Sandbox Code Playgroud)

我有很多方法,我在catch块中有相同的代码,所以我想将它提取到一个方法,以便我可以保存一些行.我的问题是,如果我这样做,我得到编译器错误"局部变量o可能没有被初始化".

public void method() {
    Object o;
    try {
        o = new Object();
    } catch (Exception e) {
        handleError();
    }
    //doSomething(o); compiler error
}


private void handleError() throws Error {
    //Processing, several lines
    throw new Error();
}
Run Code Online (Sandbox Code Playgroud)

有没有解决方法?

java compiler-errors exception unchecked

7
推荐指数
2
解决办法
1万
查看次数

来自Enum的常量表达式

有没有办法将枚举转换为常量表达式?我希望我的switch操作符在枚举的值中进行选择,但是我得到了一个编译错误"case表达式必须是常量表达式",所以我试着在变量中声明它:

final int REG = MyEnum.REG.getIndex().intValue();

switch (service.getIndex()) {

case REG:
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.根据Oracle的文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28

编译时常量表达式是表示基本类型的值的表达式或不突然完成的字符串,仅使用以下内容组成:

•原始类型的文字和String类型的文字

所以它没有用,因为我没有使用文字.我想我必须声明为:

final int REG = 8;
Run Code Online (Sandbox Code Playgroud)

但是把它与枚举联系起来要好得多.有没有办法做到这一点?

编辑

结果我不需要使用任何最终变量.这很简单:

switch (service) {

case REG:
Run Code Online (Sandbox Code Playgroud)

在我看到安德里亚的评论之前,我没有想到这一点.谢谢你的回答.

java compile-time-constant

6
推荐指数
1
解决办法
1万
查看次数

根据调用位置的不同返回类型的泛型方法

我有以下方法使用泛型执行它收到的列表中每个项的getter:

public static <T, S> List<S> getValues(List<T> list, String fieldName) {
    List<S> ret = new ArrayList<S>();
    String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
            + fieldName.substring(1, fieldName.length());
    try {
        if (list != null && !list.isEmpty()) {
            for (T t : list) {
                ret.add((S) t.getClass().getMethod(methodName).invoke(t));
            }
        }
    } catch (IllegalArgumentException e) {
    } catch (SecurityException e) {
    } catch (IllegalAccessException e) {
    } catch (InvocationTargetException e) {
    } catch (NoSuchMethodException e) {
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

如果我这样称它,它的工作原理非常好:

List<Integer> ids = getValues(List<MyDTO>, "id"); …
Run Code Online (Sandbox Code Playgroud)

java generics

6
推荐指数
1
解决办法
166
查看次数

为什么OOME试图抓住它时会有不同的行为?

我需要你们专家的一些了解

本程序不会阻止阻塞(因为Heap已满,但我想了解原因)

public class OOME_NotCatch {

    static List l = new ArrayList();
    static Long i = new Long(1);

    public static void main(String[] args) {
        try {
            while (true) {
                l.add(i);
                i++;
            }
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            System.out.println("Encountered OutOfMemoryError");
        }
    }
}
//Console : Exception in thread "main" 
Run Code Online (Sandbox Code Playgroud)

但即使在获得OOME之后,下面的程序运行良好:

public class Catch_OOME_Collection {

    static List l = new ArrayList();

    public static void main(String[] args) {
        try {
            while (true) {
                l.add(new byte[1000000]);
                System.out.println("size " + l.size());
            }
        } catch …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory

5
推荐指数
2
解决办法
93
查看次数

查询日期:"dateval LIKE'2014-01-01%'"是最佳做法?

答案建议使用大于/小于查询匹配给定日期的日期.但是我公司的一位老兵告诉我要用LIKE '2014-02-06%'.

什么是最佳做法?一个比另一个有什么显着优势吗?

mysql sql datetime date-range query-performance

5
推荐指数
1
解决办法
292
查看次数

ObjectOutputStream写入额外的字符

我知道在编写文本时应该使用编写器而不是输出流,但我仍然不明白为什么outputStream.txt在运行此程序后文件中有额外的字符:

public static void main(String[] args) throws FileNotFoundException, IOException
    {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:\\Data\\tmp\\outputStream.txt")));
        oos.writeObject("SomeObject");
        oos.writeUTF("SomeUTF");
        oos.flush();
        oos.close();
        BufferedWriter writer = new BufferedWriter(new FileWriter(new File("C:\\Data\\tmp\\outputWriter.txt")));
        writer.write("SomeObject");
        writer.write("SomeUTF");
        writer.flush();
        writer.close();
    }
Run Code Online (Sandbox Code Playgroud)

outputWriter.txt正如预期的那样,该文件是17字节,但是outputStream.txt是28,包括一些无法识别的文本.这是为什么?

java outputstream file writer

5
推荐指数
1
解决办法
2389
查看次数

泛型集合"无法实例化类型ArrayList <?extends OpDTO>"

根据我所读到的,我认为这不可能,但我想确定.我有一个班级OpDTO和其他几个*DTO extends OpDTO.然后,我想要一个方法从这些子DTO的列表中提取某些元素,并将提取的元素返回到另一个列表中:

public List<? extends OpDTO> getLastOp (List<? extends OpDTO> listDTOs) {
        List<? extends OpDTO> last = new ArrayList<? extends OpDTO>(); //compile error: Cannot instantiate the type ArrayList<? extends OpDTO>

        //processing

        return last;
    }
Run Code Online (Sandbox Code Playgroud)

我希望ult成为与元素相同类型的元素列表listDTOs,并且只使用OpDTO的方法,但它会产生编译错误:

无法实例化该类型 ArrayList<? extends OpDTO>

我也尝试过这样的事情:

public <T> List<T> getLastOp (List<T> listDTOs) {
        List<T> last = new ArrayList<T>();
        //processing

        return last;
    }
Run Code Online (Sandbox Code Playgroud)

但是后来我不能强制listDTOs中的元素成为OpDTO的子类,并且无法实例化T.任何想法?

编辑

我也发生了将类型作为参数传递,然后我可以实例化它.这样可以,还是某种不好的做法?

private <T extends OpDTO> List<T> getLastOp (List<T> listDTOs, Class<? extends OpDTO> clazz) …
Run Code Online (Sandbox Code Playgroud)

java generics

4
推荐指数
1
解决办法
5851
查看次数