考虑以下 Perl 代码:
#!/usr/env/ perl
use strict;
use warnings;
use DBI;
my $filename = 'moo.sqlite';
my $dbh = DBI->connect("dbi:SQLite:dbname=$filename","","");
my $sql = 'INSERT into moo values (1)';
my $sth = $dbh->prepare( $sql );
my $rv = $sth->execute();
print $rv;
运行时产生此错误:
DBD::SQLite::db prepare failed: disk I/O error at test.pl line 16.
Can't call method "execute" on an undefined value at test.pl line 18.
SQLite 文件位于 SMBFS/CIFS 网络安装共享上。
我已经进行了一些跟踪,并且似乎在尝试对文件进行锁定时发生了故障:
open("moo.sqlite\0", 0x202, 0x1A4) = 3 0
fcntl(0x3, 0x1, 0x0) = 0 0
fcntl(0x3, 0x2, 0x1) = 0 0
虽然我知道网络锁定是有问题的,但在交互式运行“sqlite3”二进制文件时不会出现同样的问题吗?目前,当我这样做时,我可以毫无问题地处理文件。
这是 DBI 造成的吗?
供您参考:
- 操作系统 OS X 10.6.8
- SQLite 版本 3.7.13
- Perl 5.12.4
- DBI 1.622
- DBD::SQLite 1.37