Postgresql Postgres jdbc PreparedStatement setObject不强制转换值?

Postgresql Postgres jdbc PreparedStatement setObject不强制转换值?,postgresql,jdbc,prepared-statement,Postgresql,Jdbc,Prepared Statement,我正在尝试将数据插入不同的数据库。用于合并批量插入。这适用于SQL Server,它将数据强制转换为相应的类型。我在PostgreSQL上也做了同样的尝试,但没有效果。我尝试了一个示例插入,但在PostGres中失败,这验证了我的声明,而SQL Server的插入成功: private void postGrestest() throws ClassNotFoundException, SQLException { Class.forName("org.postgresql.Driver

我正在尝试将数据插入不同的数据库。用于合并批量插入。这适用于SQL Server,它将数据强制转换为相应的类型。我在PostgreSQL上也做了同样的尝试,但没有效果。我尝试了一个示例插入,但在PostGres中失败,这验证了我的声明,而SQL Server的插入成功:

private void postGrestest() throws ClassNotFoundException, SQLException
{
    Class.forName("org.postgresql.Driver");

    String dropStmt = "DROP TABLE PUBLIC.TEST";
    String createStmt = "CREATE TABLE PUBLIC.TEST(COL1 VARCHAR(10), COL2 BOOLEAN)";
    String insertStmt = "INSERT INTO PUBLIC.TEST(COL1, COL2) VALUES (?, ?)";
    try (Connection connection = DriverManager.getConnection(
            "jdbc:postgresql://<host>:5432/<dbname>", "<username>", "<password>");
            Statement stmt = connection.createStatement();
            PreparedStatement ps = connection.prepareStatement(insertStmt);)
    {
        //stmt.execute(dropStmt);
        stmt.execute(createStmt);
        Random r = new Random();
        for (int i = 0; i < 100; i++)
        {
            Object str = "Test" + i;
            ps.setObject(1, str);
            Object obj = String.valueOf(r.nextBoolean());
            ps.setObject(2, obj);
            ps.executeUpdate();
        }
    }
}
private void postGrestest()抛出ClassNotFoundException、SQLException
{
Class.forName(“org.postgresql.Driver”);
String dropStmt=“DROP TABLE PUBLIC.TEST”;
String createStmt=“CREATE TABLE PUBLIC.TEST(COL1-VARCHAR(10),COL2-BOOLEAN)”;
String insertStmt=“插入PUBLIC.TEST(COL1,COL2)值(?,)”;
try(Connection=DriverManager.getConnection(
“jdbc:postgresql://:5432/”、“”、“”);
语句stmt=connection.createStatement();
PreparedStatement ps=connection.prepareStatement(insertStmt);)
{
//执行(dropStmt);
执行(createStmt);
随机r=新随机();
对于(int i=0;i<100;i++)
{
Object str=“Test”+i;
ps.setObject(1,str);
Object obj=String.valueOf(r.nextBoolean());
ps.setObject(2,obj);
ps.executeUpdate();
}
}
}
线程“main”org.postgresql.util.psqleexception中的异常:错误: 列“col2”为布尔类型,但表达式为字符类型 不同提示:您需要重写或强制转换表达式。
职位:49

private void sqlserverTest()抛出SQLException,ClassNotFoundException
{
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
String dropStmt=“DROP TABLE DBO.TEST”;
String createStmt=“createtable DBO.TEST(COL1-VARCHAR(10),COL2-BIT)”;
String insertStmt=“插入DBO.TEST(COL1,COL2)值(?,)”;
try(Connection=DriverManager.getConnection(
“jdbc:sqlserver://:”、“”、“”);
语句stmt=connection.createStatement();
PreparedStatement ps=connection.prepareStatement(insertStmt);)
{
//执行(dropStmt);
执行(createStmt);
随机r=新随机();
对于(int i=0;i<100;i++)
{
Object str=“Test”+i;
ps.setObject(1,str);
Object obj=String.valueOf(r.nextBoolean());
ps.setObject(2,obj);
ps.executeUpdate();
}
}
}
我必须强制转换的原因是,我从文件中读取数据,并将其作为对象数组获取。我事先不知道该类型,希望使用setObject而不是特定类型setBoolean、setInteger等

在我的应用程序级别,我还可以使用哪些其他方法而不用强制转换,让驱动程序处理强制转换?

能够解决这个问题。参考:能够解决它。参考:
private void sqlserverTest() throws SQLException, ClassNotFoundException
{
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    String dropStmt = "DROP TABLE DBO.TEST";
    String createStmt = "CREATE TABLE DBO.TEST(COL1 VARCHAR(10), COL2 BIT)";
    String insertStmt = "INSERT INTO DBO.TEST(COL1, COL2) VALUES (?, ?)";
    try (Connection connection = DriverManager.getConnection(
            "jdbc:sqlserver://<host>:<port>", "<username>", "<password>");
            Statement stmt = connection.createStatement();
            PreparedStatement ps = connection.prepareStatement(insertStmt);)
    {
        //stmt.execute(dropStmt);
        stmt.execute(createStmt);
        Random r = new Random();
        for (int i = 0; i < 100; i++)
        {
            Object str = "Test" + i;
            ps.setObject(1, str);
            Object obj = String.valueOf(r.nextBoolean());
            ps.setObject(2, obj);
            ps.executeUpdate();
        }
    }
}