标签: qsqlquery

如何从数据库中对项目进行分组并显示它们 - Android

我在Android应用程序中有收据和日志模型.收据有很多日志.

我按sortID和等级查询了group_by日志.

//recieve RecepitID and query to group logs
final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute();
Run Code Online (Sandbox Code Playgroud)

这种分组工作正常.问题是下一个.我需要有这样的输出(红圈中的部分): 在此输入图像描述 但我得到这样的:

在此输入图像描述

这是代码的一部分,我是如何做到这一点的.

public class LogsRecapitulation extends AppCompatActivity {

    private ListView mainListView;
    private BaseAdapter listAdapter;
    private TextView logsCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recapitulation_listview);
        mainListView = (ListView) findViewById(R.id.ListViewItem);

        //recieve RecepitID and query to group logs
        final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
        List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute();

        TextView result …
Run Code Online (Sandbox Code Playgroud)

java android android-layout qsqlquery

40
推荐指数
1
解决办法
1339
查看次数

Qt QSqlQuery bindValue适用于?但不是:占位符

我正在使用SQLite,插入表中.Folowwing

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(?)"));
testQuery.bindValue(0, someQStringObg);
testQuery.exec();
Run Code Online (Sandbox Code Playgroud)

有效,但是

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(:val)"));
testQuery.bindValue(":val", someQStringObg);
testQuery.exec();
Run Code Online (Sandbox Code Playgroud)

别.testQuery.lastError().text()返回No query无法获取行

不知道为什么会这样,但真的想知道.

c++ database sqlite qt qsqlquery

9
推荐指数
1
解决办法
2万
查看次数

QSqlQuery :: prepare + MySQL ODBC Connector

我正在使用Qt的MySQL驱动程序和32位MinGW Qt.这是有效的:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("MyDatabase");
//SETUP
if (db.open) {
    QSqlQuery q;
    if (q.prepare("SELECT id FROM Things WHERE parent_id = :pid")) {
        q.bindValue(":pid", 1);
        qDebug() << boundValues();
        if (q.exec) {
            //DO STUFF
}   }   }
Run Code Online (Sandbox Code Playgroud)

但是现在我正在使用64位MSVS Qt,我需要使用MySQL ODBC Connector.我已经设置并更改了代码以反映:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=MyDatabase;");
Run Code Online (Sandbox Code Playgroud)

这就是我所做的一切.没有WHERE子句的SELECT语句按预期工作,我可以像以前一样通过QSqlTableModel操作数据库.

这只是绑定停止工作......我的意思是绑定值在那里,qDebug返回:

QMap((":pid",QVariant(int,1)))

但是现在查询在exec之后没有返回任何行; 但也没有错误...这也有效:

q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

mysql qt odbc qsqltablemodel qsqlquery

8
推荐指数
1
解决办法
253
查看次数

QSqlQuery用prepare和bindValue作为列名Sqlite

void updateDB(const int id, const QString& column, const QVariant& value) const 
 //*****
 //all stuff on open DB etc. 
QSqlQuery query;
query.prepare("UPDATE table SET  :column = :value WHERE id = :id ");
query.bindValue(":column", QVariant(column));   
query.bindValue(":value", value);
query.bindValue(":id", id);
query.exec();
Run Code Online (Sandbox Code Playgroud)

不行.同时如果我重写查询

query.exec("UPDATE table SET " + column + " = " + value.toString() + " WHERE id = " + QString::number(id));
Run Code Online (Sandbox Code Playgroud)

有用.它也适用于我删除:列占位符并写入查询列名称,我正在测试它.所以我似乎不能将bindValue和占位符用于列名,至少使用Sqlite.但我没有在任何文件中找到这一点.

所以没有办法将bindValue和占位符用于列名,或者我错过了什么?

c++ sqlite qt qsqlquery

6
推荐指数
1
解决办法
1万
查看次数

QSqlQuery size()始终返回-1

QSqlQuery query;
QString queryText("SELECT * FROM section");
query.exec(queryText);
qDebug() << query.size(); //always -1
while (query.next()) qDebug() << query.value(0).toString(); //got 16 records
Run Code Online (Sandbox Code Playgroud)

方法size()始终返回-1.请帮忙.谢谢.

c++ sql sqlite qt qsqlquery

6
推荐指数
2
解决办法
3103
查看次数

QT SQL数据类型(QVariant)映射为任意长度的BINARY类型

我有一个SQL查询(调用存储过程到MSSQL),它采用任意长度的BINARY类型作为参数.我正在使用QT对存储过程的支持.但根据这个,对于VARBINARY为ODBC没有相应的QT类型.QT需要一种在将参数传递给sql查询时可以转换为QVariant的类型.

对于长度以字节为单位的二进制类型<= 8,我使用了quint64,它没有抱怨.

但是,对于任意长度的varbinary,如果我使用QString,我会收到此错误:

QODBCResult :: exec:无法执行语句:"[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]不允许从数据类型nvarchar到二进制的隐式转换.使用CONVERT函数运行此查询.

如果我使用QByteArray,我会收到此错误:

QODBCResult :: exec:无法执行语句:"[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效参数79(''):数据类型0x22是不推荐使用的大对象或LOB,但标记为输出参数.不支持不推荐使用的类型作为输出参数.请改用当前的大对象类型."

如果有人有任何建议会很好.

@a binary(2) = NULL,
@b binary(5) = NULL,
@c binary(3) = NULL,
@d binary(3) = NULL,
@e binary(8) = NULL,
@f binary(32) = NULL,

QSqlQuery query(QSqlDatabase::database(dbname));
setQueryStatement(queryString);
prepareQuery(query);
query.bindValue(":f",/* what datatype variable should i put here */);
query.exec();
Run Code Online (Sandbox Code Playgroud)

c++ sql-server qt qvariant qsqlquery

6
推荐指数
1
解决办法
313
查看次数

QSqlQuery for SQLite 在与 next() 的前向迭代中只会找到一行

不时讨论以下问题。然而,问题本身从来没有解决方案。正如我发现的那样,向前和向后迭代行是有区别的。与向前迭代QSqlQuery::next() 可能导致只有一行,但是落后的迭代QSqlQuery::previous()永远找不到的所有行。无论是否显式设置前向迭代,都没有影响。

编辑: 参考文献已删除

关于 Qt 文档,正确的方法如下:

QSqlQuery q = db.exec("SELECT * FROM Table");
while (q.next()) {
    // Do something with row...
}
Run Code Online (Sandbox Code Playgroud)

但是,这将导致只有一行。向后迭代将找到所有行。

QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
    do {
        // Do something with row...
    } while (q.previous());
}
Run Code Online (Sandbox Code Playgroud)

向后迭代可能非常缓慢,应该避免。有谁知道为什么这在前向迭代中不起作用?

编辑:这种行为对我来说并不总是可以重现,有时会发生,有时不会。该数据库包含多个在这种情况下,多行。问题恰好出现在此代码片段中。有没有人有同样的问题?

编辑 2:似乎该错误已在 Qt 4.8.5 中修复。

我当前的环境:Windows 7 (SP1)、Qt 4.8.5。

database sqlite select qt qsqlquery

5
推荐指数
1
解决办法
899
查看次数

Qt 5与SQLite:bindValue()导致“参数计数不匹配”错误

我正在使用SQLite驱动程序在Windows 7上使用Qt 5.3.1(64位)进行简单的参数化查询。当我bindValue()用来设置查询的单​​个参数的值时,我系统地得到了可怕的“参数计数不匹配”错误。我使用时一切正常addBindValue()。请注意,带有的代码bindValue()可以在Qt 4.8.5(64位)上正常工作。

以下是完整的代码(main.cpp):

#include <QtSql>

int main(int, char* [])
{
    auto db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("db.sqlite");
    db.open();

    {
        QSqlQuery query("CREATE TABLE IF NOT EXISTS hashes (filepath TEXT, modified INTEGER, hash TEXT)", db);
        query.exec();
    }

    QSqlQuery query("SELECT modified FROM hashes WHERE filepath = :fp", db);
    query.bindValue(":fp", "test.jpg");

    if (!query.exec())
        qDebug() << query.lastError();

    db.close();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

QtCreator项目文件(qtsqltest.pro):

QT += core sql
TARGET = qtsqltest
TEMPLATE = app
SOURCES += main.cpp …
Run Code Online (Sandbox Code Playgroud)

sqlite qt qtsql qt5 qsqlquery

5
推荐指数
2
解决办法
1万
查看次数

使用 Rest-API 查询 Azure SQL 数据库

我在 Microsoft Azure 中有一个 SQL 数据库服务器。我想使用 Azure Rest-API 从表中选择一些记录。当我提到Azure SQL 数据库 REST API 时,我找不到任何用于此目的的部分,只能获取数据库信息、服务器信息或类似内容。这里没有合适的 API 来选择或更新表。请你帮助我好吗?

sql-server api azure restful-url qsqlquery

5
推荐指数
1
解决办法
1万
查看次数

在 Qt 中执行 %LIKE% 查询

我想使用值绑定在 qt 中执行参数化。

这是代码:

QString name = "Foo";
query->prepare("SELECT Name, Surname FROM employee WHERE Surname LIKE %:surname%");
query->bindValue(":surname", name);
Run Code Online (Sandbox Code Playgroud)

问题在于%字符:它在执行查询时生成错误,但我不知道如何将它与 qt 一起使用。

c++ qt qt5 qsqlquery

5
推荐指数
1
解决办法
1439
查看次数