问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

printf中 %-12s里的12表示啥意思?

发布网友 发布时间:2022-04-22 03:23

我来回答

2个回答

热心网友 时间:2022-05-02 08:44

exec sql begin declare section;
CS_CHAR id[6];
CS_SMALLINT indic;
CS_CHAR pub_name[41];
exec sql end declare section;
exec sql select pub_id into :id indicator :indic
from titles where title
like "%Stress%";
if (indic == -1)
{
printf("\npub_id is null");
}
else
{
exec sql select pub_name into :pub_name
from publishers where pub_id = :id;
printf("\nPublisher: %s", pub_name);
情况2:同输入宿主变量一起使用,则indicator_varibale为:
l-1。表示主变量应该假设为NULL。(注意:宿主变量的实际值是一个无关值,不予考虑)。应该将NULL赋值给相应列。
l0。表示非NULL值。该变量存放了非NULL值。应该将宿主变量的值赋值给相应列。
对于以下语句:
EXEC SQL SELECT price INTO :price :price_nullflag FROM titles
WHERE au_id = "mc3026"
如果不存在mc3026写的书,那么price_nullflag为-1,表示price为NULL;如果存在,则price为实际的价格。下面我们再看一个update的例子:
EXEC SQL UPDATE closeoutsale
SET temp_price = :saleprice :saleprice_null, listprice = :oldprice;
如果saleprice_null是-1,则上述语句等价为:
EXEC SQL UPDATE closeoutsale
SET temp_price = null, listprice = :oldprice;
我们也可以在指示符变量前面加上“INDICATOR”关键字,表示后面的变量为指示符变量。如:
EXEC SQL UPDATE closeoutsale
SET temp_price = :saleprice INDICATOR :saleprice_null;
指示符变量也是宿主变量,定义指示符变量同定义宿主变量一样。它应该是一个2个字节的整数(short或CS_SMALLINT)。
2.3.2 连接数据库
在程序中,使用CONNECT语句来连接数据库。该语句的完整语法为:
exec sql connect : user [identified by : password]
[at : connection_name] [using : server]
[labelname labelname labelvalue labelvalue...] 其中,
lserver为服务器名。如省略,则为本地服务器名。
lconnection_name为连接名。可省略。如果你仅仅使用一个连接,那么无需指定连接名。可以使用SET CONNECTION来使用不同的连接。
luser为登录名。
lpassword为密码。
如:使用my_id用户和passes密码连接到SYBASE服务器。
exec sql begin declare section;
CS_CHAR user[16];
CS_CHAR passwd[16];
CS_CHAR server[BUFSIZ];
exec sql end declare section;
strcpy(server,"SYBASE");
strcpy(passwd,"passes");
strcpy(user, "my_id");
exec sql connect :user identified by :passwd using
:server;
请看下面这些例子来理解连接名的使用方法。
...
exec sql begin declare section;
CS_CHAR user[16];
CS_CHAR passwd[16];
CS_CHAR name;
CS_INT value, test;
CS_CHAR server_1[BUFSIZ];
CS_CHAR server_2[BUFSIZ];
exec sql end declare section;
...
strcpy (server_1, "sybase1");
strcpy (server_2, "sybase2");
strcpy(user, "my_id");
strcpy(passwd, "mypass");
exec sql connect :user identified by :passwd
at connection_2 using :server_2;
exec sql connect :user identified by :passwd using
:server_1;
/* 下面这个语句使用了"server_1"的连接*/
exec sql select royalty into :value from authors
where author = :name;
if (value == test)
{
/* 下面这个语句使用了"connection_2"连接 */
exec sql at connection_2 update authors
set column = :value*2
where author = :name;
在嵌入SQL语句中,使用DISCONNECT语句断开数据库的连接。其语法为:
DISCONNECT [connection_name | ALL | CURRENT]
其中,connection_name为连接名。ALL表示断开所有的连接。CURRENT表示断开当前连接。断开连接会回滚当前事务、删除临时表、关闭游标和释放锁等。
2.3.3 数据的查询和修改
可以使用SELECT INTO语句查询数据,并将数据存放在主变量中。如:查询lastname为stringer的firstname信息。
EXEC SQL SELECT au_fname INTO :first_name
from authors where au_lname = "stringer";
使用DELETE语句删除数据。其语法类似于Transact-SQL中的DELETE语法。如:
EXEC SQL DELETE FROM authors WHERE au_lname = 'White'
使用UPDATE语句可以更新数据。其语法类似Transact-SQL中的UPDATE语法。如:
` EXEC SQL UPDATE authors SET au_fname = 'Fred' WHERE au_lname = 'White'
使用INSERT语句可以插入新数据。其语法就是Transact-SQL中的INSERT语法。如:
EXEC SQL INSERT INTO homesales (seller_name, sale_price)
real_estate('Jane Doe', 180000.00);
多行数据的查询和修改请参见下一节——游标。
2.3.4 游标的使用
用嵌入式SQL语句查询数据分成两类情况。一类是单行结果,一类是多行结果。对于单行结果,可以使用SELECT INTO语句;对于多行结果,你必须使用cursor(游标)来完成。游标(Cursor)是一个与SELECT语句相关联的符号名,它使用户可逐行访问由SQL Server返回的结果集。先请看下面这个例子,这个例子的作用是逐行打印staff表的id、name、dept、 job、years、salary和comm的值。
………..
EXEC SQL DECLARE C1 CURSOR FOR
SELECT id, name, dept, job, years, salary, comm FROM staff;
EXEC SQL OPEN c1;
while (SQLCODE == 0)
{
/* SQLCODE will be zero if data is successfully fetched */

EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm;
if (SQLCODE == 0)
printf("%4d %12s %10d %10s %2d %8d %8d",
id, name, dept, job, years, salary, comm);
}
EXEC SQL CLOSE c1;
………
从上例看出,你首先应该定义游标结果集,即定义该游标的SELECT语句返回的行的集合。然后,使用FETCH语句逐行处理。
值得注意的是,嵌入SQL语句中的游标定义选项同Transact-SQL 中的游标定义选项有些不同。必须遵循嵌入SQL语句中的游标定义选项。
1)、声明游标:
如:EXEC SQL DECLARE C1 CURSOR FOR
SELECT id, name, dept, job, years, salary, comm FROM staff;
其中,C1是游标的名称。
2)、打开游标
如:EXEC SQL OPEN c1;
完整语法为:EXEC SQL OPEN 游标名 [USING 主变量名 | DESCRIPTOR 描述名]。关于动态OPEN游标的描述见第四节。
3)、取一行值
如:EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm;
关于动态FETCH语句见第四小节。
4)、关闭游标
如:EXEC SQL CLOSE c1;
关闭游标的同时,会释放由游标添加的锁和放弃未处理的数据。在关闭游标前,该游标必须已经声明和打开。另外,程序终止时,系统会自动关闭所有打开的游标。
也可以使用UPDATE语句和DELETE语句来更新或删除由游标选择的当前行。使用DELETE语句删除当前游标所在的行数据的具体语法如下:
DELETE [FROM] {table_name | view_name} WHERE CURRENT OF cursor_name
其中,
ltable_name是表名,该表必须是DECLARE CURSOR中SELECT语句中的表。
lview_name是视图名,该视图必须是DECLARE CURSOR中SELECT语句中的视图。
lcursor_name是游标名。
请看下面这个例子,逐行显示firstname和lastname,询问用户是否删除该信息,如果回答“是”,那么删除当前行的数据。
EXEC SQL DECLARE c1 CURSOR FOR
SELECT au_fname, au_lname FROM authors ;
EXEC SQL OPEN c1;
while (SQLCODE == 0)
{
EXEC SQL FETCH c1 INTO :fname, :lname;
if (SQLCODE == 0)
{
printf("%12s %12s\n", fname, lname);
printf("Delete? ");
scanf("%c", &reply);
if (reply == 'y')
{
EXEC SQL DELETE FROM authors WHERE CURRENT OF c1;
printf("delete sqlcode= %d\n", SQLCODE(ca));
}
}
}
EXEC SQL CLOSE c1;
2.3.5 SQLCA
DBMS是通过SQLCA(SQL通信区)向应用程序报告运行错误信息。SQLCA是一个含有错误变量和状态指示符的数据结构。通过检查SQLCA,应用程序能够检查出嵌入式SQL语句是否成功,并根据成功与否决定是否继续往下执行。预编译器自动会在嵌入SQL语句中插入SQLCA数据结构。在程序中可以使用EXEC SQL INCLUDE SQLCA,目的是告诉SQL预编译程序在该程序中包含一个SQL通信区。也可以不写,系统会自动加上SQLCA结构。
下表是SQLCA结构中的变量和作用:

变量 数据类型 作用

sqlcaid char 包含“sqlca”的字符串
sqlcabc long SQLCA的长度
sqlcode long 包含最近一次语句执行的返回代码
sqlwarn[0] 到
sqlwarn[7] char 警告标志。如果是“W”,那么表示有警报信息。
sqlerrm.sqlerrmc[ ] char 错误信息。
sqlerrm.sqlerrml long 错误信息的长度。
sqlerrp char 检测错误或警告信息的过程。
sqlerrd[6] long 警告或错误的详细信息。[2]中存放影响行的个数。

下面仔细讲解几个重要的变量。
1)、SQLCODE
SQLCA结构中最重要的部分是SQLCODE变量。在执行每条嵌入式SQL语句时,DBMS在SQLCA中设置变量SQLCODE值,以指明语句的完成状态:
1、0该语句成功执行,无任何错误或报警。
2、<0 出现了严重错误。
3、>0 出现了报警信息。
4、100没有数据存在。在FETCH语句中,表示到达结果集的末尾。在UPDATE、
DELETE、INSERT语句中,表示没有满足条件的数据。
例:显示错误信息。
printf("\nError occurred: code %d.\n%s",
sqlca.sqlcode, sqlca.sqlerrm.sqlerrmc);
在SYBASE SQL SERVER中,也可以单独定义SQLCODE。如:
long SQLCODE;
exec sql open cursor pub_id;
while (SQLCODE == 0)
{
exec sql fetch pub_id into :pub_name;
…..

2)、SQLSTATE
SQLSTATE变量也是SQLCA结构中的成员。它同SQLCODE一样,都是返回错误信息。SQLSTATE是在SQLCODE之后产生的。这是因为,在制定SQL2标准之前,各个数据库厂商都采用SQLCODE变量来报告嵌入式SQL语句中的错误状态。但是,各个厂商没有采用标准的错误描述信息和错误值来报告相同的错误状态。所以,标准化组织增加了SQLSTATE变量,规定了通过SQLSTATE变量报告错误状态和各个错误代码。因此,目前使用SQLCODE的程序仍然有效,但也可用标准的SQLSTATE错误代码编写新程序。值得注意的是,Open client emebeded SQL/C11.1.x并不完全支持SQLSTATE。
SQLSTATE是一个字符串参数。具体含义如下:

值 作用

00XXX 成功
01XXX 警告
02XXX 不存在数据
其他值 错误

热心网友 时间:2022-05-02 10:02

// ' 12345'
new PrintfFormat("\'%7s\'").sprintf("12345");
// '12345 '
new PrintfFormat("\'%-7s\'").sprintf("12345");
// ' 123'
new PrintfFormat("\'%7.3s\'").sprintf("12345");
// '123 '
new PrintfFormat("\'%-7.3s\'").sprintf("12345");
------------------参考以下-----------------------
http://java.sun.com/developer/technicalArticles/Programming/sprintf/

参考资料:http://java.sun.com/developer/technicalArticles/Programming/sprintf/

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么用物流寄物流 “祥光彻太清”的出处是哪里 "奉嗣王祗见厥祖,侯甸群后咸在,百官总已以听冢宰"什么意思 ...无逸》:“周公曰:呜呼!嗣王其监于兹!”这里所谓“嗣王”指的是... “宣入嗣王封”的出处是哪里 “词云秦嗣王”的出处是哪里 “家天下兮繇姒氏”的出处是哪里 sktal00是华为什么型号 figureout与workout的区别是什么 figureout什么意思 惠普笔记本v3439au驱动哪里找 的轴承的型号是怎么表示的,怎么知道轴承的大小,轴 Titles表中的pub_id建立外键约束 编写SQL语句 Pubmed如何搜钟春龙的SCI文章 pubmed数据库常用的检索字段及其标识符是什么 轴的标准直径有哪些 SQL语句中 关于文检 轴承型号查询尺寸表外径221 简述pubmed数据库中高级检索的步骤及方法 汽车轴承型号查询尺寸大全 写出10种以上pubmed主要可检索字段的标示,名称及含义 pubmed主要可检索字段的标示名称有哪些? pubmed数据库是什么?检索字段和标识有哪些 轴承型号与尺寸对照表 轴承型号尺寸一览表 轴承尺寸规格对照表是什么? 各种型号轴承尺寸表内容是什么? 怎么在原图片上修改文字 想修改图片上的文字怎么修改 有谁能给我张PUB里的所有酒的名字清单,感激不尽~~~ pubmed搜索如何筛选医学类文章 从pubmed中导入题录人名都是缩写怎么办? grid用户用建立ssh互信吗 HP Compaq Presario自由人 V3145AU 最新驱动给给个... 为什么大功率直流电机用铜刷可以转得很快用碳刷却... PDF文件是什么?要用什么软件才能打开? 纯电动大容量工程车充电,240kw大功率直流快速充电... PDF文件,用什么工具软件可以打开? pdf格式的文件,用什么软件作的? 大功率直流电机 大功率的直流变直流变压器(升压的)怎么做?理论... 用什么软件可以在DPF电子书上做注释?谢谢! 交流充电桩为什么比直流充电桩充电速度快 大功率直流电机(4.5KW~15KW)用什么样的调速器 健康宝照片怎样更换 安卓系统用什么软件看DPF较好 大功率直流电机与交流电机怎么选型 健康宝怎么更换照片 华为5g手机性价比排行榜?