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 . . . 如果是列名,则查询只能基于触发器生成该错误。