- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 DBI 在 perl 中创建表。这是我的代码:
#! usr/bin/perl
use strict;
use warnings;
use 5.014;
use DBI;
my $user = "user";
my $password = "password";
my $hostname = "localhost";
my $database = 'database';
my $dsn = "DBI:mysql:database=$database;host=$hostname;";
my $dbh = DBI->connect($dsn, $user, $password, { RaiseError => 1});
my $create = "-- drop table if exists DEVICE;
CREATE TABLE DEVICE(
NAME CHAR(60),
ID CHAR(36) NOT NULL,
SHORT_ID INT UNSIGNED,
MODEL CHAR(50),
SERIAL_NUMBER VARCHAR(50),
IP_ADDRESS CHAR(50),
LOCATION CHAR(50),
DV_VERSION CHAR(20),
OS_VERSION CHAR(20),
DEVICE_GROUP CHAR(50),
MANAGED TINYINT NOT NULL,
CONSTRAINT PK_DEVICE PRIMARY KEY (ID)
) Engine = InnoDB;
-- drop table if exists SEGMENT;
CREATE TABLE SEGMENT(
ID CHAR(100) NOT NULL,
DEVICE_ID CHAR(36) NOT NULL,
NAME CHAR(60),
IP_ADDRESS CHAR(50),
SLOT_INDEX INT NOT NULL,
SEGMENT_INDEX INT NOT NULL,
CONSTRAINT PK_SEGMENT PRIMARY KEY (ID),
KEY(DEVICE_ID),
CONSTRAINT FK_PARENT_DEV FOREIGN KEY (DEVICE_ID) REFERENCES DEVICE(ID)
) Engine = InnoDB;
";
my $sth = $dbh->prepare($create);
$sth->execute;
运行时出现以下错误:
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE SEGMENT(
ID CHAR(100) NOT NULL,
DEVICE' at line 18 at file.pl line 47.
当我直接在 mysql 中复制/粘贴与 $create 中完全相同的字符串时,它工作得很好。
请帮忙,谢谢。
编辑:抱歉,我应该澄清一下。我正在从另一个来源提取 $create 中的内容。这只是其中的一部分,我无法编辑文本。我想我需要知道如何将它拆分成一个数组并一个一个地执行它们。
最佳答案
DBI 连接不像 MySQL 命令行工具那样工作。您不能同时执行多个 SQL 语句,并且不需要 --
前缀。
(还值得注意的是,您颠倒了大写 SQL 语言单词和小写标识符的约定。)
像这样的代码应该可以工作
$dbh->do("drop table if exists DEVICE");
$dbh->do(<<__ENDSQL__);
CREATE TABLE DEVICE(
NAME CHAR(60),
ID CHAR(36) NOT NULL,
SHORT_ID INT UNSIGNED,
MODEL CHAR(50),
SERIAL_NUMBER VARCHAR(50),
IP_ADDRESS CHAR(50),
LOCATION CHAR(50),
DV_VERSION CHAR(20),
OS_VERSION CHAR(20),
DEVICE_GROUP CHAR(50),
MANAGED TINYINT NOT NULL,
CONSTRAINT PK_DEVICE PRIMARY KEY (ID)
) Engine = InnoDB
__ENDSQL__
$dbh->do("drop table if exists SEGMENT");
$dbh->do(<<__ENDSQL__);
CREATE TABLE SEGMENT(
ID CHAR(100) NOT NULL,
DEVICE_ID CHAR(36) NOT NULL,
NAME CHAR(60),
IP_ADDRESS CHAR(50),
SLOT_INDEX INT NOT NULL,
SEGMENT_INDEX INT NOT NULL,
CONSTRAINT PK_SEGMENT PRIMARY KEY (ID),
KEY(DEVICE_ID),
CONSTRAINT FK_PARENT_DEV FOREIGN KEY (DEVICE_ID) REFERENCES DEVICE(ID)
) Engine = InnoDB
__ENDSQL__
关于mysql - Perl DBI 创建表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589140/
我在我的应用程序中使用 JDBI 和 Dropwizard。我已经使用 dbi.open 命令获取了一个 DAO 实例,然后使用它来运行各种查询。在“finally” block 中,我使用 dao.
我有一个在 eval 中运行的数据库查询,以捕获错误。问题是错误消息正在输出到控制台,即使它被困住了。如何阻止错误消息执行此操作,因为我想自己解析它并吐回我自己的消息? my $dbh = DBI->
这是我使用 DBI 的示例代码: db = DBI.connect("DBI:Mysql:database=testdatabase;host=testhost;port=30012", "testu
使用: MySQL 5.5ActivePerl v5.14.1Windows 7 64 位 以下脚本在执行调用失败时有一个未定义的 $DBI::errstr: #!c:/perl/bin/perl.e
这是整个错误 SCREAM: Error suppression ignored for ( ! ) Fatal error: Maximum execution time of 30 seconds
在Perl中捕获任何DBI错误的最佳方法是什么?例如,如果由于插入的值中包含非法字符而导致插入失败,那么如何使脚本不失败,但是如何捕获错误并进行适当处理。 我不想做“死”,因为我不想停止脚本的执行。
在工作中,我们有一个 DBA,他说他的 RAC 工作得很好,但事实并非如此。像 Toad 或 SQL Developer 这样的 SQL IDE 会随机断开它们的连接(我怀疑是因为 RAC 的网络设置
所以我有这个非常简化的片段: @cmd_arry = ("Bob Newhart", "54"); $sqlCmd = "UPDATE foobar SET name = ?, age = ?"; $
除了使用标准代码模具“无法连接:$ DBI::errstr\n”来处理错误之外,是否可以编写如下的自定义代码? 标准: $dbstore = DBI->connect($dsn, $user, $pw
假设我正在查询一个类似于以下内容的表: $dbh->selectrow_hashref('SELECT id, name FROM foos WHERE name = "bar"'); 当然,id将是
我在长时间运行的 perl 脚本中遇到了一些内存泄漏问题,其中 perl 占用的内存量继续增长。因此,我尝试使用 Devel::Leak追踪泄漏。我发现每当我调用 DBI的prepare方法,Deve
我想从表中复制一条记录,修改记录中的一些字段并插入到同一个表中。该表有 90 列。 考虑在一个语句中使用 insert..select 但有 90 列,我需要在选择查询中告诉列名。我怎样才能在 per
我有这个查询 select * from table where ID in (1,2,3,5...) 如何使用占位符使用 DBI 构建此查询? 例如 : my @list = (1, 2, 3, 4
如何使用 perl 和 fbi 针对 sql server 检索存储过程的返回值?有人可以举个例子吗? 最佳答案 DBD::ODBC t/dir 中有示例(参见 20SqlServer.t)。基本上你
实际上我已经执行了postgres查询,假设它返回了10行。现在我有了语句处理程序( $sth )。 print Dumper $sth->fetchrow_arrayref; print Dumpe
我想让 perl 在我自己的路径中使用 DBI 模块(假设,/home/users/zdd/perl5/lib/DBI),但是系统也有一个 DBI 模块,它是/usr/lib/perl5/库/DBI。
实际上我已经执行了postgres查询,假设它返回了10行。现在我有了语句处理程序( $sth )。 print Dumper $sth->fetchrow_arrayref; print Dumpe
我不熟悉在 perl 脚本中使用 DBI 进行 SQL 查询。我遇到的问题与具有正斜杠的字段中的数据有关。我想使用变量作为 where 子句的输入,但它正在做 DBI 打算用正斜杠做的事情:停止查询。
假设我有一个连接到数据库的子例程。然后我想进行查询并接收输出并对其进行处理,当然,但是如果查询无效怎么办? 所以让我们假设我有类似的东西: $dbh = DBI->connect(, , ); $qu
我正在使用 Perl 的 DBI 进行 postgreSQL 访问,我注意到当我有多个并发进程准备同一个查询时,它们似乎在服务器上以相同的准备语句名称结束,从而产生了冲突。 2014-02-10 10
我是一名优秀的程序员,十分优秀!