作者:一线天24_226 | 来源:互联网 | 2023-05-18 03:31
执行更行语句后的异常:你选择的客户ID号是:10,12发生异常:com.mysql.jdbc.MysqlDataTruncation:Datatruncation:Truncatedinc
执行更行语句后的异常:
你选择的客户ID号是:10,12发生异常:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: '10,12'请联系网站管理员!~
用到的这张表的结构为:mysql> desc test;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| del | enum('N','Y') | YES | | N | |
| id | int(10) | NO | PRI | 0 | |
| cname | varchar(20) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.09 sec)
JSP页面更新语句:
Connection con;
PreparedStatement ps;
try {
Class.forName("com.mysql.jdbc.Driver");
String uri="jdbc:mysql://localhost:3306/deltest?characterEncoding=utf-8";
con=DriverManager.getConnection(uri,"root","tdy218");
String sql="update test set del='Y' where id in('"+s_id+"')"; //这一句应该是没问题的。
ps=con.prepareStatement(sql);
if(ps.execute()){out.print("
操作成功完成!~");}
else{out.print("
删除操作失败!~");}
}
catch(SQLException e){out.println("发生异常:"+e+"请联系网站管理员!~");}
另附:
String s_id="";
if(){
....
.......
....
out.print("你选择的客户ID号是:"+s_id);
}
请问这个异常可能是由什么原因引起的?解决的办法是?还有我写的PreparedStatement ps=con.prepareStatement(sql); 有没有问题?有的话请帮忙改正!~ 先行谢过!。
35 个解决方案
String sql="update test set del='Y' where id in('"+s_id+"')";
改为
String sql="update test set [del]='Y' where id in('"+s_id+"')";
呢???
String sql="update test set del='"+Y+"'where id in('"+s_id+"')";
按照你说的(String sql="update test set [del]='Y' where id in("+s_id+")"; )改后:
你选择的客户ID号是:12,18
发生异常:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[del]='Y' where id in('12,18')' at line 1请联系网站管理员!~
还有String sql="update test set del='Y' where id in('"+s_id+"')"; 是正确的!~
改成:String sql="update test set [del]='Y' where id in(‘+s_id+’)"; 或者
String sql="update test set [del]='Y' where id in(‘s_id’)"; 都会提示:
你选择的客户ID号是:xxx,xxx
删除操作失败!~
楼上的大哥竟然改成String sql="update test set [del]='Y' where id in("+s_id+")"; 哈哈!真有创意!你是学JSP的吗?哈哈!~
我还是把问题归结到数据类型的问题上!~
网上搜
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:这句异常好多英文的解释。中文的网站上没有答案。
我刚把这个表的id字段换了数据类型,原来是int.刚把它换成varchar类型了。不会报那个
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value:异常了
但提示:
你选择的客户ID号是:xxx,xxx
删除操作失败!~
在想改成int类型的,就会报错:
1265-Data truncated for column 'id' at row 1
请问这又是为何?
楼上的大哥竟然改成String sql="update test set [del]='Y' where id in("+s_id+")"; 哈哈!真有创意!你是学JSP的吗?哈哈!~
MYSQL我没具体用过,不知道del是否是保留字,如果是保留字,最好加[],当然如果不是,加了可能会出错
改 id in("+s_id+")这个是没错的
String sql="update test set del='Y' where id in("+s_id+")";
姑且不管这个SQL语句,这句应该没问题。
无论是:
String sql="update test set del='Y' where id in("+s_id+")";
还是:
String sql="update test set del='Y' where id in('"+s_id+"')";
输出的结果都是:
你选择的客户ID号是:12,18
删除操作失败!~
con.setAutoCommit(false);// 设置提交方式为程序控制
加上这个呢
如果不行
改这个试试
Connection con = null;
PreparedStatement ps = null;
倒,没人讨论到重点
用executeUpdate() 或者public int getUpdateCount()
public boolean execute()
throws SQLExceptionExecutes the SQL statement in this PreparedStatement object, which may be any kind of SQL statement. Some prepared statements return multiple results; the execute method handles these complex statements as well as the simpler form of statements handled by the methods executeQuery and executeUpdate.
The execute method returns a boolean to indicate the form of the first result. You must call either the method getResultSet or getUpdateCount to retrieve the result; you must call getMoreResults to move to any subsequent result(s).
Returns:
true if the first result is a ResultSet object; false if the first result is an update count or there is no result
Throws:
SQLException - if a database access error occurs or an argument is supplied to this method
See Also:
Statement.execute(java.lang.String), Statement.getResultSet(), Statement.getUpdateCount(), Statement.getMoreResults()
我刚说的不规范:
加上:
Connection con = null;
PreparedStatement ps = null;
不会报错,就是:
你选择的客户ID号是:xxx,xxx
删除操作失败!~
不知道为啥,自从我跟了"老紫竹"的一个回复后就没见他再回过我的帖子了!~
呵呵o(∩_∩)o...
或许我的问题有点幼稚,毕竟俺是初学者嘛!~
也或许我的话语有些过激,要是的话还请大家原谅.回复我的帖子就是关照我。我不该.....
请大家继续回帖。
谢了!~
execute不是你想想的那样的
如果执行的sql语句返回的是结果集返回true,如果是更新或者没有结果集返回false
ps.execute();
int unum = ps.getUpdateCount() ;
if(unum >= 1) out.print("
操作成功完成!~");}
else if(unum == 0){out.print("
删除操作失败!~");}
我刚查了API:
1.java.sql.PreparedStatement类的解释是:
boolean execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
2.java.sql.DataTruncation类的解释是:
以 DataTruncation 异常形式抛出的异常(写入时),或者由于除数据值超出 MaxFieldSize 之外的某种原因意外地截断该数据值时以 DataTruncation 警告形式报告的异常(读取时)。
读取期间 DataTruncation 的 SQLstate 为 01004。
写入期间 DataTruncation 的 SQLstate 为 22001。
catch(SQLException e){
//加上下面的一句 贴出详细异常我们 好找一点.
e.printStatckTrace();
out.println("发生异常:"+e+"请联系网站管理员!~");
}
建议你把s_id先转换为整形 int id=Integer.parseInt(s_id);然后SQL语句为:
String sql="update test set del='Y' where id in("+id+")";
或者String sql="update test set del='Y' where id in('"+id+"')";
看完了,我的API版本是JDK 6.0 中文版。
execute
boolean execute()
throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些预处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。
execute 方法返回一个 boolean 值,指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法获取该结果,必须调用 getMoreResults 获取任何后续结果。
返回:
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false
抛出:
SQLException - 如果发生数据库访问错误;在关闭的 PreparedStatement 上调用此方法,或者为此方法提供了参数。
但还是不知道杂用。
必须调用 getResultSet 或 getUpdateCount 方法获取该结果,必须调用 getMoreResults 获取任何后续结果。
还有 我干脆把
if(unum >= 1) out.print("
操作成功完成!~");}
else if(unum == 0){out.print("
删除操作失败!~");}
注释掉了,还是不行。
成功了!~
呵呵,激动呀!~ 从上午10点到现在。一直在弄这个问题。午饭还没吃那!~
不过问题解决了比什么都强。它困饶我三四天了!~
一会就出去好好吃点东西去。嘿嘿!~
楼上的大哥,谢谢你的启发。要不是你反复强调execute()的问题。我还一直以为是数据类型的异常那!~
不过我又参照
PreparedStatement从接口 java.sql.Statement 继承的方法:那一栏也有一个:getUpdateCount(),
无意识的点了一下,居然发现了一个秘密。里边的有的例子 使我解决了这个问题。
我改成:
ps.execute();
if((ps.getMoreResults() == false) && (ps.getUpdateCount() == -1)){out.print("
操作成功完成!~");}
else{out.print("
删除操作失败!~");}
就OK了!~
我会在我的博客中写篇文章。题目暂时保密。预计这两天旧可以写完。我先出去玩会,晚上回来整理一下代码。计划明天写出来。
我相信做JSP的你看过绝对没有白看。就像这些异常和上面那句我在Google上搜搜。就没发现解决的办法。
updatedata false这个倒是不少。但就是我上面写的那个判断语句网上(中文网页)网上还没有,或许有我没搜到吧。
激动的说了这么多话。大家见笑了!~
呵呵!~
送大家一句话(引用别人的):学习Java就像挂QQ,坚持下去会看到太阳的。