SQL';的返回类型是什么;s AVG()函数

SQL';的返回类型是什么;s AVG()函数,sql,jdbc,types,double,average,Sql,Jdbc,Types,Double,Average,我试图通过以下方式将一个表的内容复制到另一个表中: sql ="INSERT INTO customer (nev, quantity, frequency) SELECT " + "?,COUNT(?),AVG(?)" + "FROM tempcustomer GROUP BY ? ORDER BY COUNT(?) DESC"; preparedStmt=conn.prepareStatemen

我试图通过以下方式将一个表的内容复制到另一个表中:

        sql ="INSERT INTO customer (nev, quantity, frequency) SELECT "
                + "?,COUNT(?),AVG(?)"
                + "FROM tempcustomer GROUP BY ? ORDER BY COUNT(?) DESC";

        preparedStmt=conn.prepareStatement(sql);
        preparedStmt.setString(1, "nev");
        preparedStmt.setString(2, "nev");
        preparedStmt.setString(3, "pont");
        preparedStmt.setString(4, "nev");
        preparedStmt.setString(5, "nev");

        preparedStmt.executeUpdate();
我收到以下错误消息:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'pont'
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
at Sample.main(Sample.java:101)

我是JDBC新手,提前谢谢

这取决于参数。正如报告中所述:

SUM()
AVG()
函数返回一个
DECIMAL
值作为精确值 参数(整数或
十进制
),以及 近似值参数(
FLOAT
DOUBLE

通过将字符串参数视为数字,可以将其强制为数字:

AVG(? + 0)

但是,诸如
'pont'
之类的值将转换为0,该值将包含在平均值计算中。

您不能将列名作为参数传递给查询。只有价值观。数据库需要列名来准备查询,这是准备好的语句的要点。如果数据库不知道选择什么、分组什么或订购什么,它就不可能创建执行计划。你是对的,它解决了问题谢谢!非常感谢你
'pont'
是一个INT列名,它以常规方式工作selection@K.Fia . . . 如果是列名,则查询只能基于触发器生成该错误。