JDBC连接mysql时,Connection对象已经成功建立,可是还是有问题~~~请教

时间:2020-12-12 22:49:15
我的驱动已经放到D:\JBuilderX\jdk1.4\jre\lib\ext,也就是我的jbuilder使用的jdk目录下了

驱动已经成功加载

mysql也处于启动状态,在的命令行登陆时正常用

用mysql-front登陆127.0.0.1我的数据库也很正确

但是在程序里面执行各种操作时总是有异常
java.sql.SQLException: Can not issue data manipulation statements with executeQuery()

另外查询出来的结果全部是null,好像根本没有结果


附部分代码供参考:

 url = "jdbc:mysql://127.0.0.1:3306/WangGang";

 con = DriverManager.getConnection(url);

 System.out.println("Connection Established");
 stmt=con.createStatement();

 String  sql  =  "create table mmmm";//我想建这个表,结果出现了异常,如果不建这个表直接
 stmt.executeQuery(sql);             //向下执行,结果出来全是null

 rs=stmt.executeQuery("select * from books");//books是我已经建好的表,里面有数据
 while(rs.next()){
     String co1=rs.getString(1);
     String co2=rs.getString(2);
     String co3=rs.getString(3);
     String co4=rs.getString(4);
     String co5=rs.getString(5);
}





多谢啦~~~~~给100分

13 个解决方案

#1


stmt.executeQuery(sql);    这行有问题,你上面的是建表语句,不是查询语句,可以用:
Statement.executeUpdate(sql) 或 Statement.execute(sql)
(象update,delete之类操作都不该用executeQuery,select 语句才用这个)

#2


自己顶

#3


这个句子已经改了,已经成功执行建表和插入什么的操作了

可是为什么我的查询结果是null呢??
这个问题再解决了
100分就是你的了兄弟

谢谢~~~

#4


你数据库没连错吧(是本机的),你直接进入到本机的WangGang数据库里:mysql>select * from books,看看是不是有记录的。你在while(rs.next()){}里面System.out.println("col1="+col1)看是不是null啊

#5


在本机命令行的  mysql>select * from books

能正确打印出我的表~~
换成 ("col1="+col1) 也是null

这么换和以前不一样么?就是加了个字符串吧

#6


单就看你上面贴的那点代码看不出什么,我试了连本机的mysql,也建了books,就你上面的哪个查询,基本一样的代码,一点问题都没有,所有col都是有值的,不知道你是怎么弄的。

#7


终于搞定了

是这样的,我前面的代码已经声明了
  String co1;
  String co2;
  String co3;

下面又出现了

while(rs.next()){
     String co1=rs.getString(1);//把这三个String去掉后就好了
     String co2=rs.getString(2);//难道前面声明了后面再声明就不行了么?
     String co3=rs.getString(3);//看来我的java基本知识的理解还很不够啊
     }

虽然最后出来结果了,但是String把我搞糊涂了




#8


呵呵,我说嘛,我就拿你那做了试验,明明正常的吗,前面我是没定义这几个变量,只是输出测试了下

#9


你前面已经声明了(不太清楚具体位置,应该是全局变量了)
String co1;
String co2;
String co3;
做为全局变量对全局有效,而
while(rs.next()){
     String co1=rs.getString(1);
     String co2=rs.getString(2);
     String co3=rs.getString(3);
     String co4=rs.getString(4);
     String co5=rs.getString(5);
}
里面声明的变量只在这个while循环中有效,这等于是不同的变量了,如果你在这个while循环中用System.out.println("co1="+co1),输出应该是有值的,但是你在循环体外输出,系统会认为你输出的是最前面定义那些全局变量,而这些全局变量你是没有赋值的,你把循环体中的String去掉了,那就代表循环体中的变量就是前面你定义的全局变量了,后面再输出当然有值了。

#10


多谢你帮忙,帮我弄明白了不少问题]

最后还把基础知识学习了一下,100分给你啦~~~~

再次感谢
对了,还想问问你是做什么的,好像一直在线啊

#11


还有一件事情想问问你,就是关于mysql的驱动问题

我这里一共有两个:
目录结构如下:
mysqldriver\com\mysql\jdbc

mysqldriver\org\gjt\mm\mysql
后者里面只有一个Driver的class文件,而前者里面除了Driver外还有很多
这两个驱动有什么区别么?为什么这样放着呢?还有,如果我用Tomcat和Jsp的话使用哪个驱动呢?

#12


我做软件的
mysql JDBC Driver
常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Driver
详情请参见网站:http://www.gjt.org/
或在本网站下载mysql JDBC Driver(mm.jar)

另一个是mysql官方提供的JDBC Driver,其JAVA类名为:com.mysql.jdbc.Driver
驱动下载网址:http://dev.mysql.com/downloads/,进入其中的MySQL Connector/J区域下载。
mysql 最新提供的JDBC驱动已经建议改用com.mysql.jdbc.Driver了

#13


太感谢了,不知道说什么好了,给分了

#1


stmt.executeQuery(sql);    这行有问题,你上面的是建表语句,不是查询语句,可以用:
Statement.executeUpdate(sql) 或 Statement.execute(sql)
(象update,delete之类操作都不该用executeQuery,select 语句才用这个)

#2


自己顶

#3


这个句子已经改了,已经成功执行建表和插入什么的操作了

可是为什么我的查询结果是null呢??
这个问题再解决了
100分就是你的了兄弟

谢谢~~~

#4


你数据库没连错吧(是本机的),你直接进入到本机的WangGang数据库里:mysql>select * from books,看看是不是有记录的。你在while(rs.next()){}里面System.out.println("col1="+col1)看是不是null啊

#5


在本机命令行的  mysql>select * from books

能正确打印出我的表~~
换成 ("col1="+col1) 也是null

这么换和以前不一样么?就是加了个字符串吧

#6


单就看你上面贴的那点代码看不出什么,我试了连本机的mysql,也建了books,就你上面的哪个查询,基本一样的代码,一点问题都没有,所有col都是有值的,不知道你是怎么弄的。

#7


终于搞定了

是这样的,我前面的代码已经声明了
  String co1;
  String co2;
  String co3;

下面又出现了

while(rs.next()){
     String co1=rs.getString(1);//把这三个String去掉后就好了
     String co2=rs.getString(2);//难道前面声明了后面再声明就不行了么?
     String co3=rs.getString(3);//看来我的java基本知识的理解还很不够啊
     }

虽然最后出来结果了,但是String把我搞糊涂了




#8


呵呵,我说嘛,我就拿你那做了试验,明明正常的吗,前面我是没定义这几个变量,只是输出测试了下

#9


你前面已经声明了(不太清楚具体位置,应该是全局变量了)
String co1;
String co2;
String co3;
做为全局变量对全局有效,而
while(rs.next()){
     String co1=rs.getString(1);
     String co2=rs.getString(2);
     String co3=rs.getString(3);
     String co4=rs.getString(4);
     String co5=rs.getString(5);
}
里面声明的变量只在这个while循环中有效,这等于是不同的变量了,如果你在这个while循环中用System.out.println("co1="+co1),输出应该是有值的,但是你在循环体外输出,系统会认为你输出的是最前面定义那些全局变量,而这些全局变量你是没有赋值的,你把循环体中的String去掉了,那就代表循环体中的变量就是前面你定义的全局变量了,后面再输出当然有值了。

#10


多谢你帮忙,帮我弄明白了不少问题]

最后还把基础知识学习了一下,100分给你啦~~~~

再次感谢
对了,还想问问你是做什么的,好像一直在线啊

#11


还有一件事情想问问你,就是关于mysql的驱动问题

我这里一共有两个:
目录结构如下:
mysqldriver\com\mysql\jdbc

mysqldriver\org\gjt\mm\mysql
后者里面只有一个Driver的class文件,而前者里面除了Driver外还有很多
这两个驱动有什么区别么?为什么这样放着呢?还有,如果我用Tomcat和Jsp的话使用哪个驱动呢?

#12


我做软件的
mysql JDBC Driver
常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysql.Driver
详情请参见网站:http://www.gjt.org/
或在本网站下载mysql JDBC Driver(mm.jar)

另一个是mysql官方提供的JDBC Driver,其JAVA类名为:com.mysql.jdbc.Driver
驱动下载网址:http://dev.mysql.com/downloads/,进入其中的MySQL Connector/J区域下载。
mysql 最新提供的JDBC驱动已经建议改用com.mysql.jdbc.Driver了

#13


太感谢了,不知道说什么好了,给分了