当前位置:编程学习 > JAVA >>

谢谢哪位能帮小弟看看这是什么原因

在linux系统下的一个简单的测试,代码如下:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/username?","root","");
Statement st = conn.createStatement();
String sql = "select passwd,username from user";
ResultSet rs = st.executeQuery(sql);
while(){
 out.println(rs.getString(1));
 out.println(rs.getString(2));
}
rs.close();
st.close();
conn.close();

开启tomcat后输入地址,显示的内容正确,可是刷新一下就出错了,重启tomcat后又可以了。好像只能连接一次数据库似的,不知道是tomcat的问题,还是数据库的问题。

显示正确内容后,刷新就报错:java.sql.SQLException: ResultSet is from UPDATE.No DATA --------------------编程问答--------------------
这样才对吧
while(rs.next()){
 out.println(rs.getString(1));
 out.println(rs.getString(2));
}
--------------------编程问答-------------------- 是这样的,我少打了。

不过这个问题该怎么解决?

急急急! --------------------编程问答-------------------- Class.forName("com.mysql.jdbc.Driver").newInstance();你试试这句话执行两次什么效果。 --------------------编程问答-------------------- 加载数据库好像没有问题,

不知道Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/username?","root","");
有没有问题,不过第一次正常,刷新一下就出错,我就是想不明白 --------------------编程问答-------------------- --------------------编程问答-------------------- 错误报告截图:
[img=http://my.csdn.net/my/album/detail/1141035][/img] --------------------编程问答-------------------- 错误截图 看看 --------------------编程问答-------------------- 在我空间,不知道怎么传到贴子上 --------------------编程问答-------------------- 1、你的数据库名字叫username?,为什么后面有个问号?
2、while这里不对,1楼已经说了
3、不知道你的访问情形如何
4、你的代码一点都不规范,把你的代码用try catch语句包裹起来,外加finally,在finally中,将资源关闭。



try{
  Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/username?","root","");
Statement st = conn.createStatement();
String sql = "select passwd,username from user";
ResultSet rs = st.executeQuery(sql);
while(rs.next()){
 out.println(rs.getString(1));
 out.println(rs.getString(2));
}
}catch(Exception e){
System.err.println("数据库连接失败!");
}finally{
  if(rs != null){
      rs.close();
  }
 if(st != null){
      st.close();
  }
 if(conn != null){
      conn.close();
  }

}


--------------------编程问答-------------------- 在executeQuery之后用while(rs.next)要注意select from的表里面要有数据,如果没有数据就会出现 java.sql.SQLException: ResultSet is from UPDATE. No Data.  
--------------------编程问答-------------------- 数据库后面那个?应该不是重点,第一次能运行出来,数据库里有内容,而且第一次访问的时候页面也显示了 --------------------编程问答-------------------- 在finally里关闭的时候为什么报错,提示rs,st,conn cannot be resolved --------------------编程问答--------------------
引用 12 楼  的回复:
在finally里关闭的时候为什么报错,提示rs,st,conn cannot be resolved


你注意局部变量呀。你定义的conn,st,rs的作用域。
--------------------编程问答--------------------
引用 13 楼  的回复:
引用 12 楼 的回复:

在finally里关闭的时候为什么报错,提示rs,st,conn cannot be resolved


你注意局部变量呀。你定义的conn,st,rs的作用域。

我按着你说的写的,改了作用域格式是规范了,可是问题还没有解决 --------------------编程问答-------------------- 1、你的数据库名字叫username?,为什么后面有个问号?
2、 Class.forName("com.mysql.jdbc.Driver").newInstance();改为

 Class.forName("com.mysql.jdbc.Driver"); --------------------编程问答--------------------
引用 15 楼  的回复:
1、你的数据库名字叫username?,为什么后面有个问号?
2、 Class.forName("com.mysql.jdbc.Driver").newInstance();改为

 Class.forName("com.mysql.jdbc.Driver");


照你说的该了,还是没有办法刷新,关掉页面就不能进行第二次访问了 --------------------编程问答-------------------- 在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了 --------------------编程问答--------------------
引用 17 楼  的回复:
在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了


跟你说话,干着急。你能不能每次把出错信息都说一下。 --------------------编程问答--------------------
引用 18 楼  的回复:
引用 17 楼 的回复:

在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了


跟你说话,干着急。你能不能每次把出错信息都说一下。

说来说去还是那一个错误,不能进行二次访问,第一次可以读取数据库的内容,刷新页面后就报错,错误截图不知道怎么贴到贴子上,在我空间相册里有 --------------------编程问答--------------------
引用 19 楼  的回复:
引用 18 楼  的回复:
引用 17 楼 的回复:

在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了


跟你说话,干着急。你能不能每次把出错信息都说一下。

说来说去还是那一个错误,不能进行二次访问,第一次可以读取数据库的内容,刷新页面后就报错,错误截图不知道怎么贴到贴子上,在我空间相册里有


你是如何访问的,什么清醒下?你都不说清楚。
--------------------编程问答--------------------
引用 20 楼  的回复:
引用 19 楼 的回复:

引用 18 楼 的回复:
引用 17 楼 的回复:

在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了


跟你说话,干着急。你能不能每次把出错信息都说一下。

说来说去还是那一个错误,不能进行二次访问,第一次可以读取数据库的内容,刷新页面后就报错,错误截图不知道怎么贴到贴子上,在我空间相册里有


你是如何访……

开启tomcat,打开浏览器输入url,还有什么?
只是想测试linux下的Tomcat+mysql+jdk环境能否正常工作 --------------------编程问答--------------------
引用 21 楼  的回复:
引用 20 楼  的回复:
引用 19 楼 的回复:

引用 18 楼 的回复:
引用 17 楼 的回复:

在windows上做这样的测试,代码没问题,可是到了linux上不知道为什么不行了


跟你说话,干着急。你能不能每次把出错信息都说一下。

说来说去还是那一个错误,不能进行二次访问,第一次可以读取数据库的内容,刷新页面后就报错,错误截图不知道怎么贴到贴子上,在我空……


linux中,你的mysql有没有一个数据库叫/username?
你最好把linux中mysql默认root密码改掉。 --------------------编程问答-------------------- 密码我改掉过了,数据库中有username --------------------编程问答--------------------
引用 23 楼  的回复:
密码我改掉过了,数据库中有username


你确定在windows中一切ok?在linux中才会这样?

你linux中的username 和 windows中的username这个库,数据都一样? --------------------编程问答--------------------
引用 24 楼  的回复:
引用 23 楼  的回复:

密码我改掉过了,数据库中有username


你确定在windows中一切ok?在linux中才会这样?

你linux中的username 和 windows中的username这个库,数据都一样?


这个异常,我在mysql官方搜索了一下,以前也有人遇到过,还给mysql报bug了。
不知道你这款mysql版本。
你试着去连接你windows中的mysql,试试,看是否是mysql的问题。 --------------------编程问答-------------------- linux中的username是我自己写进去的,正常访问的时候显示的内容也是正确的 --------------------编程问答-------------------- 如果程序有问题的话,刚开启tomcat的时候是不能显示正确内容的,问题是为什么关闭网页后就出错了呢 --------------------编程问答-------------------- --------------------编程问答-------------------- 我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这 --------------------编程问答--------------------
引用 29 楼  的回复:
我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这


所以我让你改成;连接Windows中mysql看看是否ok --------------------编程问答-------------------- mark学习帮顶下,虽说不太规范,但测试用也差不多。
lz说下mysql版本吧
希望不是有一个bug --------------------编程问答--------------------
引用 30 楼  的回复:
引用 29 楼 的回复:

我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这


所以我让你改成;连接Windows中mysql看看是否ok

不知道怎么搞的,登陆密码为000000,连接密码为空,换一下不行
虚拟机暂时连不上window主机 --------------------编程问答--------------------
引用 32 楼  的回复:
引用 30 楼  的回复:
引用 29 楼 的回复:

我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这


所以我让你改成;连接Windows中mysql看看是否ok

不知道怎么搞的,登陆密码为000000,连接密码为空,换一下不行
虚拟机暂时连不上window主机


那明显这里有文章。虚拟机为什么连不上宿主机?应该是可以的呀。
--------------------编程问答-------------------- --------------------编程问答--------------------
引用 33 楼  的回复:
引用 32 楼 的回复:

引用 30 楼 的回复:
引用 29 楼 的回复:

我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这


所以我让你改成;连接Windows中mysql看看是否ok

不知道怎么搞的,登陆密码为000000,连接密码为空,换一下不行
虚拟机暂时连不上window主机


那明……

跟这没关系,我mysql是安装在linux虚拟机上的
我今天试试连一下window吧 --------------------编程问答--------------------
引用 35 楼  的回复:
引用 33 楼  的回复:
引用 32 楼 的回复:

引用 30 楼 的回复:
引用 29 楼 的回复:

我在终端用的是root 密码为000000能够登录
可是程序里连接数据库的时候密码为空才能登录,会不会问题出在这


所以我让你改成;连接Windows中mysql看看是否ok

不知道怎么搞的,登陆密码为000000,连接密码为空,换一下不行
虚拟机暂时连不上……


我说的是你的密码问题。你命名密码改了,居然却还能用空密码登陆mysql。改了密码,要重启mysql的。你重启了吗? --------------------编程问答-------------------- 厉害

既然人生无法预知,那就让我们淡定面对吧,因为有些事情是逃避不了的。加油吧!
刚开了一个淘宝,支持一下。。

淘宝店铺名:年轻的谢老头  
网址是:    http://shop70432849.taobao.com/   --------------------编程问答-------------------- 我觉得应该是9楼的问题 没有关闭连接啊 之类的东西  上一次都没有完成 你这一次又来........... --------------------编程问答-------------------- --------------------编程问答-------------------- 昨天弄了半天,谁知道Linux系统怎么崩溃了,今天起不来了
所以今天重新装了系统 --------------------编程问答-------------------- 应该是MySql 连接池的问题  你应该每次连接的时候判断一下是否连接上 断开就重新连接 --------------------编程问答--------------------
引用 41 楼  的回复:
应该是MySql 连接池的问题 你应该每次连接的时候判断一下是否连接上 断开就重新连接

能不能说的在清楚点
每次程序运行的时候conn都为了空了
Connection conn = null;
conn =DriverManager.getConnection(""); --------------------编程问答-------------------- 我也遇到这个问题,等找到解决办法再来留言 --------------------编程问答-------------------- DriverManager.getConnection("jdbc:mysql://localhost:3306/username?","root","");有看没有懂
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,