Можно создать служебный класс как следующее и использовать его для подавления предупреждения непроверенного.
public class Objects {
/**
* Helps to avoid using {@code @SuppressWarnings({"unchecked"})} when casting to a generic type.
*/
@SuppressWarnings({"unchecked"})
public static T uncheckedCast(Object obj) {
return (T) obj;
}
}
можно использовать его следующим образом:
import static Objects.uncheckedCast;
...
HashMap getItems(javax.servlet.http.HttpSession session) {
return uncheckedCast(session.getAttribute("attributeKey"));
}
еще Некоторая дискуссия об этом здесь: http://cleveralias.blogs.com/thought_spearmints/2006/01/suppresswarning.html
Временно включить AutoCommit
:
sqlite> .header on sqlite> select * from test; field one two
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect('dbi:SQLite:test.db', undef, undef,
{ RaiseError => 1, AutoCommit => 0}
);
test_select_with_update($dbh);
sub test_select_with_update {
my ($dbh) = @_;
local $dbh->{AutoCommit} = 1;
my $q = $dbh->prepare(q{SELECT field FROM test});
my $u = $dbh->prepare(q{UPDATE test SET field = ? WHERE field = ?});
$q->execute or die;
while ( my $r = $q->fetchrow_hashref ) {
if ( (my $f = $r->{field}) eq 'one') {
$u->execute('1', $f) or die;
}
}
}
После запуска кода:
sqlite> .header on sqlite> select * from test; field 1 two
Ваша проблема в том, что вы используете один и тот же обработчик базы данных для выполнения обновления, пока вы находитесь в цикле выборки.
Так что используйте другой экземпляр обработчика вашей базы данных для выполнения обновлений :
my $dbh = DBI->connect(...);
my $dbhForUpdate = DBI->connect(...) ;
Затем используйте dbhForUpdate в своем цикле:
while(my $row = $sth->fetch()){
...
$dbhForUpdate->do(...) ;
}
В любом случае, я бы не рекомендовал это делать, поскольку велика вероятность того, что вы столкнетесь с проблемами параллелизма на уровне базы данных.
Подробнее в ответ на комментарий Зойдберга , но если бы вы смогли переключиться на ORM, например Perl DBIx :: Class , то вы могли бы напишите что-нибудь вроде этого:
my $rs = $schema->resultset('Confs')->search({ confLocId => undef });
while ( my $data = $rs->next ) {
next unless $data->confLoc =~ m/(something)-(hairy)/;
if ( my $locId = unique_name_state( $1, $2 ) ) {
$data->update({ confLocID => $locid });
}
}
И если DBIx :: Class не привлекает вас, на CPAN есть еще несколько других, например Fey :: ORM и Rose: : DB , например.