现在要把bit类型怎样插入数据库statement.setXXX(参数位置,xxx);还有获取从数据库取出bit类型的数据getXXX
解决方案 »
- VC连不上本机mysql数据库……
- 求助关于查询时间的问题
- mysql获取表中外键信息列表
- 求这个update语句执行顺序以及效率
- XP系统下 Mysql如何使用mysqldump和mysqlhotcopy 备份 恢复数据库
- 如果postgresql编码是unicode, 分类统计(group by)、distinct遇到汉字就不正确了,如何解决
- MYSQ数据库中字段属性问题,巨easy,关注一下
- 求教游戏同时在线人数查询
- mysql中怎么把数据倒出来?
- 求一个 mysql 查询分组与塞选 语句
- 非常诡异的问题:column "1581111111" does not exist
- mysql临时表无法插入,求高手
from tb
如 B'1010', 也可以用其他类型再进行个显示转换, 如:
44::bit(10), '01110'::bit(10)等但不知你的接口ODBC或ADO等有没有封装bit类型,假如没封装, 那就其他类型代替, 在写SQL语句时进行显示转换
位串类型
[编辑]
位串类型位串就是一串 1 和 0 的字串。它们可以用于存储和视觉化位掩码。我们有两种类型的 SQL 位类型:bit(n) 和 bit varying(n); 这里的 n是一个正整数。 bit类型的数据必须准确匹配长度n; 试图存储短些或者长一些的数据都是错误的。类型 bit varying 数据是最长 n 的变长类型; 更长的串会被拒绝。写一个没有长度的 bit 等效于 bit(1),没有长度的bit varying 意思是没有长度限制。
注意:如果我们明确地把一个位串值转换成 bit(n), 那么它的右边将被截断或者在右边补齐零,直到刚好 n 位, 而不会抛出任何错误。类似地,如果我们明确地把一个位串数值转换成 bit varying(n),如果它超过了n 位, 那么它的右边将被截断。
注意:在PostgreSQL7.2 之前,不管是否有明确的转换, bit 都会在右边自动截断或者在在右边填充零的。这个行为现在已经为了和SQL标准兼容修改过来了。 请参考 Section 4.1.2.3 获取有关位串常量的语法的信息。还有一些位逻辑操作符和位处理函数可用; 见Section 9.6。
例 8-3. 使用位串类型
CREATE TABLE test (a bit(3), b bit varying(5));
INSERT INTO test VALUES (B'101', B'00');
INSERT INTO test VALUES (B'10', B'101');
ERROR: Bit string length 2 does not match type bit(3)
INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;
a | b
-----+-----
101 | 00
100 | 101
statement=conn.prepareStatement(sql);
statement.setString(1, username);
statement.setString(2, tablename);
statement.setLong(3, report_id);
statement.setTimestamp(4, Timestamp.valueOf(datetime));
//statement.setInt(5, ispass?1:0);
statement.setBoolean(5, ispass);
statement.setString(6, re);
statement.execute();报错:
org.postgresql.util.PSQLException: 错误: 字段 "is_pass" 的类型为 bit, 但表达式的类型为 boolean
建议:你需要重写或转换表达式
位置:104
高手快来!!!
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?::BIT VARYING(8),?)";bit类型的输入可用字符串或整型代替, 但在SQL语句一定要来个显示转换
显示转换的格式为 XXX::类型 或 cast(xxx as 类型)
麻烦你把这个insert语句写详细一点!谢谢!
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?::BIT VARYING(8),?);假如解析不了,换成
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,cast(? as BIT VARYING(8)),?);如果还是解析不了, 第5个变量就不要参数化, 直接把值嵌入SQL语句
String sql="insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,"+
ispass?"1":"0"+"::BIT VARYING(8),?)";
org.postgresql.util.PSQLException: 错误: 无法把类型 integer 转换为 bit varying