Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在Postgres商店中使用OrmLite?_Java_Postgresql_Ormlite - Fatal编程技术网

Java 有没有办法在Postgres商店中使用OrmLite?

Java 有没有办法在Postgres商店中使用OrmLite?,java,postgresql,ormlite,Java,Postgresql,Ormlite,我们目前正在使用PostgreSQL数据库和OrmLite。我们现在有了一个使用的用例,但是找不到任何通过OrmLite访问该表的方法。我希望避免打开单独的数据库连接只是为了选择并插入一个表,但我看不到任何其他选项 至少我想要一个OrmLite正在使用的现有连接的句柄,这样我就可以重用它来构建一个准备好的语句,但是我还没有找到一种从OrmLite ConnectionSource开始获取java.sql.connection的方法。 我看到OrmLite有一个JdbcCompiledStatem

我们目前正在使用PostgreSQL数据库和OrmLite。我们现在有了一个使用的用例,但是找不到任何通过OrmLite访问该表的方法。我希望避免打开单独的数据库连接只是为了选择并插入一个表,但我看不到任何其他选项

至少我想要一个OrmLite正在使用的现有连接的句柄,这样我就可以重用它来构建一个准备好的语句,但是我还没有找到一种从OrmLite ConnectionSource开始获取java.sql.connection的方法。 我看到OrmLite有一个JdbcCompiledStatement,但它只是PreparedStatement的包装器,需要将PreparedStatement传递给构造函数。不确定这是什么用例

我曾尝试使用DatabaseConnection.compileStatement…,但这需要了解所使用的字段类型,而OrmLite似乎不知道什么是hstore

我尝试过使用updateRaw,但该函数只存在于我没有的OrmLite dao上,因为我要链接dao的表有一个字段类型OrmLite无法识别。有没有办法让一个泛型dao发出原始查询


我知道HStore是特定于数据库的,OrmLite可能不支持它,但我真的很想找到一种方法,使用不受支持的字段,而不仅仅是不受支持的查询,在数据库之间传输数据。

听起来ConnectionSource实际上可能是由JdbcConnectionSource实现的,并可能返回JdbcDatabaseConnection。该对象有一个getInternalConnection方法,该方法与您要查找的方法类似

至少我想要一个OrmLite正在使用的现有连接的句柄,这样我就可以重用它来构建一个准备好的语句

好的,那很容易。正如@jsight所提到的,JDBC的ConnectionSource是JdbcConnectionSource。当您使用connectionSource.getReadOnlyConnection从该类获得连接时,您将获得一个数据库连接,它实际上是一个JdbcDatabaseConnection,可以强制转换到它。有一个方法返回关联的java.sql.Connection

我尝试过使用updateRaw,但该函数只存在于我没有的OrmLite dao上

您确实可以使用任何DAO类在任何表上执行原始函数。可以方便地将其视为对DAO对象表的非结构化更新。但是,如果您有任何DAO,您可以对任何其他表执行原始更新

找到一种方法,使用不受支持的字段(而不仅仅是不受支持的查询)在数据库之间传输数据


如果您使用的是不受支持的字段,那么您必须将其作为原始语句执行—SELECT或UPDATE。如果您编辑您的帖子以显示您尝试过的原始语句,我可以提供更具体的帮助。

@Gray我在SourceForge上提交了一个ORMLite修补程序,可以启用其他数据类型。补丁ID是3566779。使用此修补程序,可以支持hstores

用户需要将PGHStore类添加到他们的项目中。这个类的代码是

用户还需要添加一个persister类,如下所示:

package com.mydomain.db.persister;

import com.mydomain.db.PGHStore;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.field.SqlType;
import com.j256.ormlite.field.types.BaseDataType;
import com.j256.ormlite.support.DatabaseResults;
import java.sql.SQLException;

public class PGHStorePersister extends BaseDataType {

    private static final PGHStorePersister singleton = new PGHStorePersister();

    public static PGHStorePersister getSingleton() {
        return singleton;
    }

    protected PGHStorePersister() {
        super(SqlType.OTHER, new Class<?>[] { PGHStore.class });
    }

    protected PGHStorePersister(SqlType sqlType, Class<?>[] classes) {
        super(sqlType, classes);
    }

    @Override
    public Object parseDefaultString(FieldType ft, String string) throws SQLException {
        return new PGHStore(string);
    }

    @Override
    public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException {
        return results.getString(columnPos);
    }

    @Override
    public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException {
        return new PGHStore((String) sqlArg);
    }

    @Override
    public boolean isAppropriateId() {
        return false;
    }
}

+蒂姆,谢谢你尝试了这么多东西。我以前从未听说过商店。让我读一读……对不起,我不是有意暗示我的dao上没有updateRaw。我的意思是我没有dao,因为我不能在类中用hstore注释数据库中表示的字段。没有类注释,就没有dao。据我所知。我不太明白为什么要在dao级别发出原始查询。查询可以将多个表连接在一起,或者访问一个与dao所暗示的完全不同的表,对吗?Good point@Tim。人们使用ORMLite在数据库中存储帐户。有时,它们需要执行非结构化查询,因此需要在Dao上使用原始查询方法,尽管实际上您可以使用任何Dao来执行查询。此外,DAO还有很多需要使用的数据库连接代码。上面提到的补丁将包含在ORMLite的4.42版中。
@DatabaseField(columnName = "myData", persisterClass=PGHStorePersister.class)