我的应用程序目前使用Microsoft Access,但现在可能托管在Linux机器上.此外,当从多台计算机访问时,其中一台计算机可能会更新记录(当其他用户正在读取时).
我还要求嵌入式数据库应该支持复杂的SQL查询 - 比如内部SQL,联接等.
我尝试了SQLite,但是许多现有的查询都失败了,或者需要修复(就像在使用内部联接的简单查询中,在FROM之后的括号不被SQLite接受,并且必须被删除).也不支持右连接.
我开始了解Apache Derby和H2,但首先会更喜欢你的宝贵意见.
编辑:
我忘了提到我的应用程序完全用Java编写.
编辑:
在预设时,我使用Microsoft Access mdb,在网络驱动器上共享,从远程计算机进行无DSN连接.
更新
我使用Firebird进行了试验,它确实看起来非常好,零管理和SQL兼容.它很快,我可以尝试的任何典型查询都没有问题.我对它非常满意,并希望将它用于我提出这个问题的项目.
希望Advantage Server也会很好,但没有时间来审查它.在审查/使用Firebird之后,我觉得不需要尝试其他任何东西.
我在sqlite中使用下面的sql按时间间隔分组.第一个是按天分组,第二个是按小时分组:
select strftime('%Y-%m-%dT%00:00:00.000', date_time),line, count() from entry group by strftime('%Y-%m-%dT%00:00:00.000', date_time)
select strftime('%Y-%m-%dT%H:00:00.000', date_time),line, count() from entry group by strftime('%Y-%m-%dT%H:00:00.000', date_time)
Run Code Online (Sandbox Code Playgroud)
如何按10分钟间隔进行分组
我想在我的下一个项目中提供一个设置功能,我想知道是否可以从头开始用PDO创建一个SQLite 3数据库,或者我只是坚持通过DSN连接到现有数据库?
如果PDO不可能有任何方法通过PHP创建新的数据库?
我正在考虑使用SQLite作为我正在编写的C++应用程序的后端数据库.我已阅读过trh trolltech网站和sqlite上的相关文档,但信息似乎有点脱节,没有简单的代码片段显示完整的CRUD示例.
我想编写一组辅助函数,以便我可以从我的应用程序轻松地在SQLite中执行CRUD操作.
以下smippet是我想要编写的辅助函数的伪代码.我很感激有关如何"填充"存根函数的建议.有一点特别令人沮丧的是,在任何文档中都没有明确提及查询与运行查询的数据库之间的关系 - 因此建议某种默认连接/表.
在我的应用程序中,我需要能够显式指定运行查询的数据库,因此如果任何答案明确说明如何显式指定查询中涉及的数据库/表(或其他数据库操作),这将非常有用. ).
我的伪代码如下:
#include <boost/shared_ptr.hh>
typedef boost::shared_ptr<QSqlDatabase> dbPtr;
dbPtr createConnection(const QString& conn_type = "QSQLITE", const QString& dbname = ":memory:")
{
dbPtr db (new QSQlDatabase::QSqlDatabase());
if (db.get())
{
db->addDatabase(conn_type);
db->setDatabaseName(dbname);
if (!db.get()->open)
db.reset();
}
return db;
}
bool runQuery(const Qstring& sql)
{
//How does SQLite know which database to run this SQL statement against ?
//How to iterate over the results of the run query?
}
bool runPreparedStmtQuery(const QString query_name, const QString& params)
{
//How …Run Code Online (Sandbox Code Playgroud) 我有一个设置的SQLite数据库,所以当我删除一个Person时,删除是级联的.当我手动删除一个Person(删除引用PersonID的所有记录)时,这很好.但是,当我使用Entity Framework删除Person时,我收到一个错误:
System.InvalidOperationException: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
我不明白为什么会这样.我的触发器设置为在删除被告知要删除的对象之前清理所有相关对象.
当我进入模型编辑器并检查关系的属性时,它显示OnDelete属性没有任何操作.为什么不通过从DB中提取它来正确设置?如果我将此值更改为Cascade,一切正常,但我宁愿不依赖于此手动更改,因为如果我从数据库刷新我的模型并且它会丢失它.
这是我的表的重用SQL.
CREATE TABLE [SomeTable]
(
[SomeTableID] INTEGER NOT …Run Code Online (Sandbox Code Playgroud) 我有一个SQLite数据库.
我创建了表格并填充了大量数据.
然后我通过删除并重新创建表来清除数据库.我确认所有数据都已删除,并且使用SQLite Administrator查看表是空的.
问题是数据库文件(*.db3)的大小在清除后保持不变.
这当然是不可取的,因为我希望在我清除它之后重新获得数据占用的空间.
有没有人做出类似的观察和/或知道发生了什么?
可以做些什么呢?
我需要使用SQLite数据库文件作为存储信息的文件,我想将该文件的版本存储在SQLite数据库文件中.
我怎样才能做到这一点?我的意思是,如何在SQLite中存储唯一(仅一个)数据?我不想通过为此创建表来存储信息,因为版本信息只是一个数字.
我能够在我的Android应用程序中创建,编写和读取SQLite数据库.我有一个完全填充数据的数据库副本,我想将这些数据存入App的数据库.是否可以从我的应用程序内部访问我的填充数据库?或者我可以至少创建一个填充数据库的副本,然后使用该副本?或者我是否需要执行.dump并将所有插入内容放入Android代码中?