postgreSQL怎样操作bit类型

weiluo12 2011-11-01 04:33:00
现在要把bit类型怎样插入数据库

statement.setXXX(参数位置,xxx);

还有获取从数据库取出bit类型的数据

getXXX
...全文
1106 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiluo12 2011-11-07
  • 打赏
  • 举报
回复
今天还是没有遇到过的人回复,就结贴!
weiluo12 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 trainee 的回复:]

你的SQL语句是参数化语句, 有6个?, JDBC会解析的, 所以才要下面的6个setxxx

不知jdbc解析得了这个语句的第5个?参数
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?::BIT VARYING(8),?);

假如……
[/Quote]

org.postgresql.util.PSQLException: 错误: 无法把类型 integer 转换为 bit varying
weiluo12 2011-11-05
  • 打赏
  • 举报
回复
还是改变使用boolean类型
weiluo12 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 trainee 的回复:]

这个有式过吗?
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?::BIT VARYING(8),?)";

bit类型的输入可用字符串或整型代替, 但在SQL语句一定要来个显示转换
显示转换的格式为 XXX::类型 或 cast(xx……
[/Quote]

麻烦你把这个insert语句写详细一点!

谢谢!
trainee 2011-11-04
  • 打赏
  • 举报
回复
你的SQL语句是参数化语句, 有6个?, JDBC会解析的, 所以才要下面的6个setxxx

不知jdbc解析得了这个语句的第5个?参数
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?::BIT VARYING(8),?);

假如解析不了,换成
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) 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,remark) values(?,?,?,?,"+
ispass?"1":"0"+"::BIT VARYING(8),?)";





trainee 2011-11-03
  • 打赏
  • 举报
回复
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?::BIT VARYING(8),?)";

statement.setInt(5, ispass?1:0);

//statement.setBoolean(5, ispass);
weiluo12 2011-11-03
  • 打赏
  • 举报
回复
is_pass 字段为 bit

String sql="insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?,?)";
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, remark);
statement.execute();

报错:
org.postgresql.util.PSQLException: 错误: 字段 "is_pass" 的类型为 bit, 但表达式的类型为 boolean
建议:你需要重写或转换表达式
位置:104
iihero_ 2011-11-03
  • 打赏
  • 举报
回复
直接setInteger吧
trainee 2011-11-03
  • 打赏
  • 举报
回复
这个有式过吗?
insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,remark) values(?,?,?,?,?::BIT VARYING(8),?)";

bit类型的输入可用字符串或整型代替, 但在SQL语句一定要来个显示转换
显示转换的格式为 XXX::类型 或 cast(xxx as 类型)
weiluo12 2011-11-03
  • 打赏
  • 举报
回复
postgreSQL怎样操作bit类型问题
weiluo12 2011-11-03
  • 打赏
  • 举报
回复
9楼,以前我用的就是statement.setInt(5, ispass?1:0);

没有人遇到过吗?

高手快来!!!


weiluo12 2011-11-02
  • 打赏
  • 举报
回复
在java中

现在要把bit类型怎样插入数据库

statement.setXXX(参数位置,xxx);

还有获取从数据库取出bit类型的数据

getXXX
trainee 2011-11-02
  • 打赏
  • 举报
回复
标准的postgresql语句, bit类型都是通过字符串形式进行存取
如 B'1010', 也可以用其他类型再进行个显示转换, 如:
44::bit(10), '01110'::bit(10)等

但不知你的接口ODBC或ADO等有没有封装bit类型,假如没封装, 那就其他类型代替, 在写SQL语句时进行显示转换
weiluo12 2011-11-02
  • 打赏
  • 举报
回复
没有人遇到过,或者操作过这种情况吗?
wwwwb 2011-11-02
  • 打赏
  • 举报
回复
help:
位串类型
[编辑]
位串类型

位串就是一串 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
weiluo12 2011-11-02
  • 打赏
  • 举报
回复
高手快来!!!
rucypli 2011-11-01
  • 打赏
  • 举报
回复
select binary(a)
from tb
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle、MariaDB、Mssql、及PostgreSQL 资料库,让管理不同类型的资料库更加的方便。 Navicat premium [1] 是一款数据库管理工具。将此工具连接数据库,你可以从中看到各种数据库的详细信息。包括报错,等等。当然,你也可以通过他,登陆数据库,进行各种操作。Navicat Premium是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。 Navicat Premium结合了其他Navicat成员的功能。有了这种连线到不同资料库类型的能力,Navicat Premium支持在 MySQL、SQLite、Oracle 及 PostgreSQL 之间传输资料。它支持大部分的 MySQL、SQLite、Oracle 及 PostgreSQL 功能,包括预存程序、事件、触发器、函式、检视等。 Navicat Premium可以让你简单并快速的在多种资料库系统间传输资料,或传输一份以SQL格式及编码设计的纯文字档。 不同的资料库的批次处理任务也可以设定排程并在指定的时间执行。其他功能包括汇入/汇出精灵、查询建立工具、报表产生器、资料同步、备份、工作排程及更多。 Navicat的的功能足以提供专业开发人员的所有需求,但是对资料库伺服器的新手来说又相当容易学习。 Navicat Premium [2] 有三种平台版本- Microsoft Windows、Mac OS X及Linux。它可以让使用者连接本地/远端伺服器、提供一些实用的工具如资料/结构同步、汇入/汇出、备份/回复及报表以协助管理资料的流程。 Navicat Premium(导航猫数据库管理)是一个可多重连线资料库的管理工具,Navicat Premium(导航猫数据库管理)可以让你以单一程式同时连线到MySQL、SQLite、Oracle 及 PostgreSQL资料库,让管理不同类型的资料库更加的方便。  Navicat Premium可以让你简单并快速的在多种资料库系统间传输资料,或传输一份以SQL格式及编码设计的纯文字档。 不同的资料库的批次处理任务也可以设定排程并在指定的时间执行。其他功能包括汇入/汇出精灵、查询建立工具、报表产生器、资料同步、备份、工作排程及更多。 Navicat的功能足以提供专业开发人员的所有需求,但是对资料库伺服器的新手来说又相当容易学习。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧