firebird mysql_FIREBIRD浅历

firebird mysql_FIREBIRD浅历firebird 可以说是这个世界上最小而又支持存储过程的数据库 才 3M 而已 如果做小型应用 比 mssql 桌面版也有 70 多 M mysql 20 30M 方便的多 一 数据库操作在开始 程序 Firebrid 2 0 中执行 FirebridISQL 出现 SQL gt 输入 SQL gt CREATEDATABA e sams fdb 回车提示错误 郁闷 一查资

firebird可以说是这个世界上最小而又支持存储过程的数据库,才3M而已,如果做小型应用,比ms sql(桌面版也有70多M),mysql(20-30M),方便的多。

(一)数据库操作

在开始-程序-Firebrid_2_0中执行Firebrid ISQL tool 出现

SQL>

输入

SQL>CREATE DATABASE ‘e:\sams.fdb’; 回车

提示错误,……..,郁闷,一查资料,原来是需要使用用户名和密码登录,于是在“运行”里输入(将默认的用户名和密码作为命令行参数):

isql.exe -u sysdba -p masterkey

进入命令行窗口。

再输入:

SQL>CREATE DATABASE ‘e:\sams.fdb’;      回车

没有任何提示(原来FB就是这样,没有提示就表示成功),打开E盘一看多了个SAMS.FDB文件,接着再输入 :

SQL>SHOW DATABASE;

出现一些关于这个数据库的信息,建两个表吧,输入

SQL>CREATE TABLE T1 (F1 INTEGER,F2 VARCHAR(20));      回车

什么也没看到,实际上不是,输入

SQL>SHOW TABLE;             回车

显示出来了,有一个表T1,再建一个,录入

SQL>CREATE TABLE T2(F1 INTEGER);          回车

SQL>SHOW TABLE;                回车

这一次可显示两个表存在啦,插入点东西吧,录入

SQL>INSERT INTO T1 valueS(10,’I LIKE’);         回车

SQL>INSERT INTO T1 valueS(10,’HOW ARE YOU’);       回车

SQL>INSERT INTO T1 valueS(11,’OK’);          回车

看看里面装了点什么,录入

SQL>SELECT * FROM T1;             回车

看到了有三条记录,完成前面的操作后,不想要I LIKE的那条记录了,怎么办,录入

SQL>DELETE T1 WHERE F2=’I LIKE’;      回车

再查一下看以看到确实少了这一知记录.不想要那个空表T2,就做掉吧,不过最好提交一下,这样的话把当前的表也能干掉,录入

SQL>COMMIT;  回车

提交后,下面开始做掉T2,录入

SQL>DROP TABLE T2;  回车

再查录入的这个表还有没,录入

SQL>SHOW TABLE;  回车

这次只查到一个,没有了,不完了,退出来,录入

SQL>QUIT; 回车

回到了WINDOWS窗口,下次再进入对已存的数据库就连接就OK了,见下:

SQL>CONNECT LOCALHOST:e:\sams.fdb;     回车

(二)在程序里(.net)里操纵:

Firebird .NET Data Provider是一个用来操作Firebird数据库的数据访问组件,目前的版本是1.7。该组件提供了访问和操作Firebird数据库的各种函数,其使用非常简单,使用符合ADO.NET的规范。因此在使用上我们不会有太大的陌生感。

在安装Firebird .NET Data Provider后,其提供了一个SDK文档,通过它,我们可以快速的了解并使用该组件。

在编写一个数据库应用程序的时候,第一步肯定是建立一个和要操作数据库的连接,一般我们都是使用连接字符串,而通常情况下,这个连接字符串是比较复杂的,不是十分容易记忆。Firebird .NET Data Provider提供了一个名为FbConnectionStringBuilder的类,通过它我们可以很方便的构造一个连接字符串。

FirebirdSql.Data.Firebird.FbConnectionStringBuilder cs=new FirebirdSql.Data.Firebird.FbConnectionStringBuilder();

cs.DataSource=”localhost”;

cs.Database=@”d:\firebird\firsttest.gdb”;

cs.UserID=”sysdba”;

cs.Password=”masterkey”;

cs.Dialect=1;

FirebirdSql.Data.Firebird.FbConnection cn=new FirebirdSql.Data.Firebird.FbConnection();

cn.ConnectionString=cs.ToString();

其后操作数据库的方法就和使用ADO.NET操作SQL Server或是Access数据库没什么区别了(除了使用的类名称不同外)。

下面是填充数据集的代码

cn.Open();

string strSQL=”select * from T_1″;

FirebirdSql.Data.Firebird.FbDataAdapter ad=new FirebirdSql.Data.Firebird.FbDataAdapter(strSQL,cn);

System.Data.DataSet ds=new System.Data.DataSet();

ad.Fill(ds);

cn.Close();

下面是向已连接的数据库中插入记录

cn.Open();

string strSQL=”insert into T_1 values(“1,’2005-7-4′,’testvalue’)”;

FirebirdSql.Data.Firebird.FbCommand cm=new FirebirdSql.Data.Firebird.FbCommand();

cm.Connection=cn;

cm.CommandType=System.Data.CommandType.Text;

cm.CommandText=strSQL;

cm.ExecuteNonQuery();

cn.Close();

使用Firebird .NET Data Provider编写调用Firebird数据库的存储过程的方法如下:

cn.Open();

FirebirdSql.Data.Firebird.FbCommand cm=new FirebirdSql.Data.Firebird.FbCommand();

cm.Connection=cn;

cm.CommandType=System.Data.CommandType.StoredProcedure;

cm.CommandText=”SP_1_ADD”;

cm.Parameters.Add(“@F1”,FirebirdSql.Data.Firebird.FbDbType.Integer).value=1;

cm.Parameters.Add(“@F2″,FirebirdSql.Data.Firebird.FbDbType.Date).value=”2005-1-1”;

cm.Parameters.Add(“@F3″,FirebirdSql.Data.Firebird.FbDbType.VarChar,20).value=”SPTest”;

cm.ExecuteNonQuery();

cn.Close();

另外,参数的添加还可以使用如下的方法

FirebirdSql.Data.Firebird.FbParameter fp=new FirebirdSql.Data.Firebird.FbParameter(“@F1”,FirebirdSql.Data.Firebird.FbDbType.Integer);

fp.value=1;

cm.Parameters.Add(fp);

但在使用如下代码

FirebirdSql.Data.Firebird.FbParameter fp1=new FirebirdSql.Data.Firebird.FbParameter();

fp1.ParameterName=”@F1″;

fp1.DbType=(System.Data.DbType)FirebirdSql.Data.Firebird.FbDbType.Integer;

fp1.value=1;

cm.Parameters.Add(fp1);

添加参数,在编译的时候没任何错误但在运行时会出现”Incorrect Guid value”的错误。这样的代码在调用SQL Server数据库中的存储过程是没有任何问题的,不知这是Firebird .NET Data Provider的一个BUG,还是另有原因呢?

(三)一些区别和注意事项

1.自定义函数问题.Access to UDF library “rfunc.dll” is denied by server administrator

花了很长时间,不明白为何,将rfunc.dll拷到udf目录,bin目录,windows\system32目录都不能解决问题,google一下,网上有同样的问题,但没有解决方案,结果我重装了一下firebird就解决了.

2.存储过程中变量的定义

ms sql存储过程中无论在哪都可以定义新的变量,但在firebird中,只能在as 与begin之间进行定义.firebird的变量不能用@符号,我将@全部变成a就好了.

3.存储过程中变量的使用

select @i=count(*) from table1 //ms sqlselect count(*) from table1 into :i//firebird引用变量使用冒号

4.嵌入式sql,

firebird支持select * from table exists (select …) 或 select * from table in (select …)

但不支持select * from (select * from …) a,

我是将这类改写成视图解决的

5.case语句

mssql 可使用field= case (),但firebbird仅支持case () as field,

6.mssql getdate()变成CURRENT_DATE+CURRENT_TIME

select * from snartleave where   dt_starttime

CREATE PROCEDURE SPVARTST2 (VAR_IPTARTNO CHAR(6))RETURNS (VAR_ARTNAME CHAR(10))ASbeginfor select v_name1 from snart where v_artNo=:var_iptartno into :var_artname dosuspend;end8.自动增长字段的使用(autoincrement)

firebird有个发生器(generator)的东东,在发生器里记录值的增长,再用触发器实现

beginif (new.i_seqno is null) thenbeginNEW.i_seqno = GEN_ID(GEN_T_DB_ARTSEQNO_ID,1);endend

//GEN_T_DB_ARTSEQNO_ID就是创建的发生器,看到没有,也就是说不同的表不同的字段可以共用一个发生器,gen_id相当于identity,看起来比mssql复杂,其实也很简单。

9.发生器重置 mssql里自动增加的字段要重置好像很麻烦,较难控制,

firebird可以这样(存储过程中)

agenerator=Gen_ID(GEN_T_DB_ARTSEQNO_ID,Gen_ID(GEN_T_DB_ARTSEQNO_ID,0)*-1+1);//agenerator是一个整形变量,好像一定要装gen_id的值符给一个变量才行,不知道有没有更好的办法,不用定义一个多余的变量

可参考如下网址:http://www.fingerbird.de/generatorguide_body.htm

10 通过一个表更改另一个表的数据

mssql:update table1 set cname=b.cname from table1 a inner join table2 as b where a.id=b.id

firebird:update table1 a set cname=(select cname from table 2 b where a.id=b.id)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198682.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:42
下一篇 2026年3月26日 下午2:43


相关推荐

  • emgucv自适应二值化

    emgucv自适应二值化一 理论概述 转载自 OpenCV 基于局部自适应阈值的图像二值化 nbsp nbsp 局部自适应阈值则是根据像素的邻域块的像素值分布来确定该像素位置上的二值化阈值 这样做的好处在于每个像素位置处的二值化阈值不是固定不变的 而是由其周围邻域像素的分布来决定的 亮度较高的图像区域的二值化阈值通常会较高 而亮度较低的图像区域的二值化阈值则会相适应地变小 不同亮度 对比度 纹理的局部图像区域将会拥有相对应

    2025年11月9日
    4
  • web服务器短信监控服务是什么_手机web服务器在哪打开

    web服务器短信监控服务是什么_手机web服务器在哪打开服务器监控软件可以进行各种服务器的WEB监控,系统将以WEB的用户的身份按用户指定的时间检测您的WEB是否正常,一旦检测到不正常,将以短信/邮件方式报警。如图所示: 图:WEB监控  图:WEB监控日志记录 相关监控功能:PING监控cpu监控内存监控MySQL监控DB2监控流量监控错误监控TCP服务监控

    2025年6月23日
    5
  • ActionContext介绍

    ActionContext介绍

    2026年3月17日
    2
  • 6.5——ADRC学习

    6.5——ADRC学习深刻理解PID1.    典型的传递函数——一阶惯性环节一个储能元件(如电感,电容)与一个耗能元件(如电阻)的组合,就能构成一阶惯性环节。如一个RC电路特点:当输入量发生突变时,输出量不能突变,只能按照指数规律逐渐变换,这就反应了该环节具有惯性。(也就是说,惯性环节的输出一开始并不与输入同步按比例变化,直到过渡过程结束,y(t)才能与x(t)保持比例。)而惯性环节的时间常数就是惯性的量度。 我们的…

    2022年5月19日
    40
  • Dubbo负载均衡策略及自行扩展负载均衡策略

    Dubbo负载均衡策略及自行扩展负载均衡策略负载均衡在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。可以自行扩展负载均衡策略,参见:负载均衡扩展负载均衡策略RandomLoadBalance随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。RoundRobinLoadBalance轮循,按公约后的权重设置轮循比率。存在…

    2022年7月11日
    15
  • 2018,我的这一年

    这一年是和自己对话的一年,是矛盾的一年,是抑郁的一年。时间过的很快,2018已经过去很多天了,是时候对过去的这一年进行一个简单的总结了,不管这一年过的如何,在时间的巨轮下,一切都成为过往,成为了生命中的一段经历,若干年后这一段经历或许只剩下一些碎片的回忆,那也没有关系,顺其自然即可! 泰戈尔曾说过:”天空没留下翅膀的痕迹,但我已飞过“。虽然多年之后记忆中很多事情没有了痕迹,但那些事情的确曾经…

    2022年2月27日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号