Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Это - просто неэффективное использование SQL, неважно, как Вы делаете это.
, возможно, что-то как
right('XXXXXXXXXXXX'+ rtrim(@str), @n)
, где X Ваш дополнительный символ и @n, является количеством символов в получившей строке (предполагающий необходимость в дополнении, потому что Вы имеете дело с фиксированной длиной).
, Но поскольку я сказал, что необходимо действительно постараться не делать это в базе данных.
select right(replicate(@padchar, @len) + @str, @len)
В SQL Server 2005 и позже Вы могли создать функцию CLR, чтобы сделать это.
вероятно, излишество, я часто использую этот UDF:
CREATE FUNCTION [dbo].[f_pad_before](@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS
BEGIN
-- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
RETURN ltrim(rtrim(
CASE
WHEN LEN(@string) < @desired_length
THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string
ELSE @string
END
))
END
Так, чтобы можно было сделать вещи как:
select dbo.f_pad_before('aaa', 10, '_')
Я не уверен, что метод, который Вы даете, действительно неэффективен, но альтернативный путь, пока это не должно быть гибко в длине или дополнительном символе, был бы (предполагающий, что Вы хотите дополнить его "0" к 10 символам:
DECLARE
@pad_characters VARCHAR(10)
SET @pad_characters = '0000000000'
SELECT RIGHT(@pad_characters + @str, 10)
@padstr = REPLICATE(@padchar, @len) -- this can be cached, done only once
SELECT RIGHT(@padstr + @str, @len)
Несколько человек дали версии этого:
right('XXXXXXXXXXXX'+ @str, @n)
быть осторожным с этим, потому что это усечет Ваши фактические данные, если это будет более длинно, чем n.
Как насчет этого:
replace((space(3 - len(MyField))
3 количество zeros
заполнять
Возможно чрезмерное уничтожение У меня есть эти UDF для прокладки влево и вправо
ALTER Function [dbo].[fsPadLeft](@var varchar(200),@padChar char(1)='0',@len int)
returns varchar(300)
as
Begin
return replicate(@PadChar,@len-Len(@var))+@var
end
и вправо
ALTER function [dbo].[fsPadRight](@var varchar(200),@padchar char(1)='0', @len int) returns varchar(201) as
Begin
--select @padChar=' ',@len=200,@var='hello'
return @var+replicate(@PadChar,@len-Len(@var))
end