我正在尝试将Grails应用程序连接到Firebird数据库.
我在用:
到目前为止,这就是我所做的:
runtime "org.firebirdsql.jdbc:jaybird:2.2.2"到依赖项部分.dataSource部分:
dataSource {
pooled = false
driverClassName = "org.firebirdsql.jdbc.FBDriver"
dialect = "org.hibernate.dialect.FirebirdDialect"
username = "SYSDBA"
password = "masterkey"
}
Run Code Online (Sandbox Code Playgroud)
休眠部分:
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.provider_class = 'org.firebirdsql.pool.FBSimpleDataSource'
}
Run Code Online (Sandbox Code Playgroud)
(我也有cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory和cache.provider_class = 'com.opensymphony.oscache.hibernate.OSCacheProvider'在分开的场合上面的部分,但也作出的任何差异).
运行我的Grails应用程序时,启动失败并出现一个巨大的错误,归结为以下消息:
java.lang.IllegalStateException: Could not load JDBC driver class [org.firebirdsql.jdbc.FBDriver]
Run Code Online (Sandbox Code Playgroud)
我已经远程搜索了网络,但我无法在任何地方找到有效的Grails/Firebird配置示例.有一个修复浮动,涉及复制minij2ee.jar,但这是一个不同的错误消息.此外,人们建议清空.grails文件夹 - 我试过这个,但无济于事.
有人可以建议,我怎样才能让Grails与Firebird合作?
这是完整的例外,虽然在启动期间似乎重复了几次:
->> 303 | innerRun in …Run Code Online (Sandbox Code Playgroud) 我正在使用Firebird。我知道在Firebird中我们无法将结果集光标移回。仅TYPE_FORWARD_ONLY在TYPE_SCROLL_INSENSITIVE不支持时支持。在我的应用程序中,我想像这样使用,将结果集光标移回第一行resultSet.previous()。我想知道是否可以通过任何方式将光标移回。
查看Firebird的以下文档:
JDBC 3.0规范定义了三种类型的结果集
- TYPE_FORWARD_ONLY:结果集不可滚动,光标只能向前移动。使用TRANSACTION_READ_COMMITTED隔离级别时,结果集将返回ResultSet.next()调用时满足搜索条件的所有行。在其他情况下,结果集将仅返回在事务开始时可见的行。
- TYPE_SCROLL_INSENSITIVE:结果集是可滚动的,光标可以前后移动,可以定位在指定的行上。只有满足查询执行条件的行才可见。
- TYPE_SCROLL_SENSITIVE:Firebird和Jaybird不支持。驱动程序允许应用程序请求这种类型的结果集,但是根据JDBC规范,该类型被“降级”为先前的类型,并且相应的警告被添加到连接对象。
由于Firebird中缺少对可滚动游标的支持,因此通过将完整的结果集提取到客户端来实现对它们的支持(TYPE_SCROLL_INSENSITIVE结果集类型)。滚动发生在客户端的内存中。当结果集很大时,这可能会对系统内存使用和性能产生不利影响。
我认为这只是一段代码会有所帮助:
while (res.next()) {
if (!id.equalsIgnoreCase(res.getString("NO_TRANSFERT"))) {
res.previous();
break;
}
xml = xml + "<" + tableName + ">\n";
for (int i = 1; i <= count; i++) {
String columnName = rsmd.getColumnName(i);
xml = xml + "<" + columnName + ">" + res.getString(i) + "</"
+ columnName + ">\n";
}
xml = xml + "</" + tableName + ">\n\n";
} …Run Code Online (Sandbox Code Playgroud) Firebird数据库是否支持Schema?如果是这样,我如何通过ISQL在Firebird DB中创建架构?请帮我在Firebird DB中创建模式.我试图使用检索模式
AbstractDatabaseMetaData.getSchemas()
Run Code Online (Sandbox Code Playgroud)
但它始终检索空结果集.任何人都可以帮我检索模式吗?没有架构时至少是SYSTEM架构.
我正在尝试使用 R 语言在 Firebird 中执行选择。我知道Firebird需要一个字符集和角色参数,但我不知道如何在R语言中传递它。默认消息不告知字符集
WARNING: No connection character set specified (property lc_ctype, encoding, charSet or localEncoding), defaulting to character set NONE
Run Code Online (Sandbox Code Playgroud) 我在使用 Spring 应用程序并使用 DTO 从数据库获取数据时遇到问题。我收到“java.sql.SQLException:结果集已关闭”。数据库是Firebird(Jaybird 版本3.0.3)。
我的 dto 文件:
package ekoncept.dto;
import ...
public class FakturaListDTO {
private Integer fakturaId;
@Getter @Setter private String fakturaPrefix;
...
@Getter @Setter private BigDecimal fakturaZaplacono;
@Id
@Column(name = "FAKTURA_ID")
public Integer getFakturaId() {
return fakturaId;
}
public void setFakturaId(Integer fakturaId) {
this.fakturaId = fakturaId;
}
public FakturaListDTO(Faktura fakt) { // not working
this.fakturaId = fakt.getFakturaId();
this.fakturaPrefix = fakt.getFakturaPrefix();
...
this.fakturaZaplacono = fakt.getFakturaZaplacono();
}
public FakturaListDTO(Integer faktId) { // working
this.fakturaId = faktId;
}
} …Run Code Online (Sandbox Code Playgroud) 我在使用jdbc的数据库(firebird)中的时间戳有问题
数据库中的数据
timestamp 1994-10-12T00:00:00.000000000-00:00
Run Code Online (Sandbox Code Playgroud)
我用python测试,结果在数据库中是相同的,但是当我使用jdbc(clojure)时
result is 1994-10-11T17:00:00.000000000-00:00
Run Code Online (Sandbox Code Playgroud)
我认为这取决于时区(我在GMT + 7)
如何解决?
谢谢。
此代码
(ns test.core
(:require [clojure.java.jdbc :as jdbc]))
(def firebird-setting {:description "Firebird Database"
:classname "org.firebirdsql.jdbc.FBDriver"
:subprotocol "firebirdsql"
:subname "//localhost:3051//firebird/data/test.fdb"
:user "user"
:password "pass"})
(jdbc/query firebird-setting
"select ts from TestTB")
Run Code Online (Sandbox Code Playgroud)
和结果
({:ts #inst "1994-10-11T17:00:00.000000000-00:00"})
Run Code Online (Sandbox Code Playgroud) 我已经使用 jaybirds 的 class 创建了一个数据库FBManager,但我找不到default charset为其指定 a 的方法(默认为NONE)。
我错过了什么吗?是否可以在创建数据库后定义它?
这是用于创建它的片段
FBManager fbm = new FBManager();
fbm.start();
fbm.createDatabase("./fb.fdb", "user", "password");
fbm.stop();
Run Code Online (Sandbox Code Playgroud)
此功能现已在 Jaybird 版本 3.0.6 及更高版本中提供。有关更多详细信息,请参阅已接受的答案。
我有一个在 Apache Tomcat 6 上运行的 Web 应用程序,使用 ZK、Hibernate 和 Jaybird JDBC 来访问 Firebird 数据库。由于某些未知原因,在执行动态 SQL 的应用程序中执行尚未映射的操作后,它崩溃并出现以下异常:
错误:org.springframework.transaction.TransactionSystemException:无法回滚 JPA 事务;嵌套异常是 javax.persistence.PersistenceException:回滚时出现意外错误 javax.persistence.PersistenceException:回滚时出现意外错误 org.hibernate.TransactionException:JDBC 回滚失败 [SQL:335544726,HY000] org.firebirdsql.jdbc.FBSQLException:GDS 异常。335544726。从连接读取数据时出错。
原因:从连接读取数据时出错。...
那么,此后用户执行的任何操作都会导致以下错误:
错误:javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException:无法执行查询org.hibernate.exception.GenericJDBCException:无法执行查询[SQL:335544721,HY000] org.firebirdsql.jdbc.FBSQLException:GDS异常。335544721. 无法完成对主机“”的网络请求。原因:无法完成对主机“”的网络请求。
系统崩溃了,就像失去了与数据库的连接一样。
以前有人经历过吗?
有人成功将 spring 连接到 .gdb 数据库或 .fdb 数据库吗?我需要很少的帮助来执行一些查询并将其显示在屏幕上。互联网上几乎没有关于将 spring 与 firebird 连接的信息......
谢谢
我正在尝试使用 JDBC 在现有 Firebird 数据库中插入或更新元素。我使用默认凭据( SYSDBA和masterkey )访问数据库。
根据 JDBC,请求已成功完成,但数据库未修改(当我执行选择时,我的数据未出现)。我还尝试使用 RazorSQL 等软件修改数据库内容,结果是相同的(数据库在会话期间被修改,但如果我断开连接并重新连接到数据库,我的修改就会丢失)。
有人知道如何解决这个问题吗?
可能我会问一个常见的问题,但是当我尝试通过Jaybird与Firebird DB连接时,我真的不知道我做错了什么以及我能忘记什么.我已将Jaybird.jar添加到我的Java构建路径中,但仍然收到错误 java.lang.NoClassDefFoundError.
这是我的简单代码:
public class DBHelper {
public void tryConnect() {
try {
Class.forName("org.firebirdsql.jdbc.FBDriver");
} catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.toString());
System.out.println("org.firebirdsql.jdbc.FBDriver not found");
}
}
}
Run Code Online (Sandbox Code Playgroud)