执行更行语句后的异常:
你选择的客户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("<br>操作成功完成!~");}
else{out.print("<br>删除操作失败!~");} }
catch(SQLException e){out.println("发生异常:"+e+"请联系网站管理员!~");}另附:
String s_id="";
if(){
....
.......
....
out.print("你选择的客户ID号是:"+s_id);
}
请问这个异常可能是由什么原因引起的?解决的办法是?还有我写的PreparedStatement ps=con.prepareStatement(sql); 有没有问题?有的话请帮忙改正!~ 先行谢过!。
你选择的客户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("<br>操作成功完成!~");}
else{out.print("<br>删除操作失败!~");} }
catch(SQLException e){out.println("发生异常:"+e+"请联系网站管理员!~");}另附:
String s_id="";
if(){
....
.......
....
out.print("你选择的客户ID号是:"+s_id);
}
请问这个异常可能是由什么原因引起的?解决的办法是?还有我写的PreparedStatement ps=con.prepareStatement(sql); 有没有问题?有的话请帮忙改正!~ 先行谢过!。
解决方案 »
- 郁闷的问题,急需解决 Could not find action or result
- 关于iframe边框拖拽的问题
- 想练手jsp的 不论新手,大侠,请补全这个代码
- 求解:Java 操作 Excel (读取Excel2007,Poi实现)
- 关于向标签中传值的问题,各位大侠请指教
- 死循环 问题?
- 将时间插入数据库中遇到的问题
- 打印问题
- 求一个简单问题
- 标题是:各位大侠请帮忙!各位大侠帮帮小弟,我的程序怎么了,程序对了,怎么就是运行不出来.
- Struts2自定义转换错误 No result defined for action com.test.PointAction and result input
- dtree 如何时间鼠标事件!
改为
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:这句异常好多英文的解释。中文的网站上没有答案。
update test set del='Y'where id in(201,302); 是正确的!~
mysql> update test set del='Y'where id in(201,302);
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0忘了说了!~ Y不是变量。不用加"+" s_id才是变量!~
但提示:
你选择的客户ID号是:xxx,xxx
删除操作失败!~
在想改成int类型的,就会报错:
1265-Data truncated for column 'id' at row 1
请问这又是为何?
MYSQL我没具体用过,不知道del是否是保留字,如果是保留字,最好加[],当然如果不是,加了可能会出错
改 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
删除操作失败!~
con.setAutoCommit(false);// 设置提交方式为程序控制
加上这个呢
改这个试试
Connection con = null;
PreparedStatement ps = null;
不好意思,不行!~
con.setAutoCommit(false);// 设置提交方式为程序控制执行时报错!~Connection con = null;
PreparedStatement ps = null;
加上之后照样报错!~
加不加null,初始化与否不影响结果。起码我这个JSP页面就这一句SQL语句要执行,没有影响。
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...
或许我的问题有点幼稚,毕竟俺是初学者嘛!~
也或许我的话语有些过激,要是的话还请大家原谅.回复我的帖子就是关照我。我不该.....
请大家继续回帖。
谢了!~
我注释掉了:
if(ps.execute()){out.print("<br>操作成功完成!~");}
else{out.print("<br>删除操作失败!~");}
还是一样.
你选择的客户ID号是:xxx,xxx
删除操作失败!~
int unum = ps.getUpdateCount() ;
if(unum >= 1) out.print(" <br>操作成功完成!~");}
else if(unum == 0){out.print(" <br>删除操作失败!~");}
1.java.sql.PreparedStatement类的解释是:
boolean execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
2.java.sql.DataTruncation类的解释是:
以 DataTruncation 异常形式抛出的异常(写入时),或者由于除数据值超出 MaxFieldSize 之外的某种原因意外地截断该数据值时以 DataTruncation 警告形式报告的异常(读取时)。 读取期间 DataTruncation 的 SQLstate 为 01004。 写入期间 DataTruncation 的 SQLstate 为 22001。
//加上下面的一句 贴出详细异常我们 好找一点.
e.printStatckTrace();out.println("发生异常:"+e+"请联系网站管理员!~");
}
第一条,楼上说的没错,但是请吧boolean execute()方法的说明看完,重点看他返回值的定义,你的api没的话看我上面的回帖,官方网站上复制下来的
String sql="update test set del='Y' where id in("+id+")";
或者String sql="update test set del='Y' where id in('"+id+"')";
我还是相信事实,所以我还是加上:
int id=Integer.parseInt(s_id);
out.print(id);
结果不出我所料:
你选择的客户ID号是:1010
删除操作失败!~ 看见了吧?
我本来选择的id 是 10,一转后就错误了。
你选择的客户ID号是:12,18
删除操作失败!~
这些数字之间是由"," 号隔开的。
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(" <br>操作成功完成!~");}
else if(unum == 0){out.print(" <br>删除操作失败!~");}
注释掉了,还是不行。
2.检查你的sql语句是否有问题,用System.out.println()输出,放到数据库里执行
3.这个你看完api应该已经知道了
if(ps.execute()){out.print(" <br>操作成功完成!~");}
else{out.print(" <br>删除操作失败!~");}
这里的ps.execute()肯定返回false
String sql = "UPDATE test SET del = 'Y' WHERE id IN (" + str + ")";
组成 SQL 后是:
UPDATE test SET del = 'Y' WHERE id IN (2,4,6)
这个 SQL 是正确的而你开始的那个
String sql = "update test set del='Y' where id in('"+s_id+"')";
组成 SQL 后是:
UPDATE test SET del = 'Y' WHERE id IN ("2,4,6")这种样子怎么可能对呢?
测试代码:import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class MysqlTest {
public static void main(String[] args) {
String str = "2,4,6";
MysqlTest mysql = new MysqlTest();
mysql.update(str);
}
public void update(String str) {
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
String sql = "UPDATE test SET del = 'Y' WHERE id IN (" + str + ")";
ps = con.prepareStatement(sql);
ps.execute();
}catch(SQLException e) {
e.printStackTrace();
}finally{
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
private Connection getConnection() throws SQLException {
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "";
return DriverManager.getConnection(url, username, password);
}
}
String sql = "UPDATE test SET del = 'Y' WHERE id IN (" + str + ")";
ps = con.prepareStatement(sql);
int n = ps.executeUpdate(); int len = str.split(",").length;
if(n <= 0) {
System.out.println("没有发生更新");
}else if (n == len) {
System.out.println("全部更新");
}else{
System.out.println("不完全更新,更新了 " + n + " 条,可能由于数据库不存在某些记录");
}
呵呵,激动呀!~ 从上午10点到现在。一直在弄这个问题。午饭还没吃那!~
不过问题解决了比什么都强。它困饶我三四天了!~
一会就出去好好吃点东西去。嘿嘿!~
楼上的大哥,谢谢你的启发。要不是你反复强调execute()的问题。我还一直以为是数据类型的异常那!~
不过我又参照
PreparedStatement从接口 java.sql.Statement 继承的方法:那一栏也有一个:getUpdateCount(),
无意识的点了一下,居然发现了一个秘密。里边的有的例子 使我解决了这个问题。我改成:
ps.execute();
if((ps.getMoreResults() == false) && (ps.getUpdateCount() == -1)){out.print(" <br>操作成功完成!~");}
else{out.print(" <br>删除操作失败!~");}
就OK了!~
我会在我的博客中写篇文章。题目暂时保密。预计这两天旧可以写完。我先出去玩会,晚上回来整理一下代码。计划明天写出来。
我相信做JSP的你看过绝对没有白看。就像这些异常和上面那句我在Google上搜搜。就没发现解决的办法。updatedata false这个倒是不少。但就是我上面写的那个判断语句网上(中文网页)网上还没有,或许有我没搜到吧。
激动的说了这么多话。大家见笑了!~
呵呵!~
送大家一句话(引用别人的):学习Java就像挂QQ,坚持下去会看到太阳的。