linux的java连接mysql的老问题,相信很多人也遇到过或正面临同样的问题!100分相送!

时间:2022-04-14 21:27:21
我在linux下,把JDK装在/usr/java/j2sdk1.4.1_01下,mysql已经装好并启动。jdbc驱动是connect/J,即mysql-connector-java-3.0.6-stable-bin.jar,并将其拷贝到/usr/java/j2sdk1.4.1_01/lib中。环境变量在/root/.bash_profile和/etc/profile都加入了同样的下面这些语句:
JAVA_HOME=/usr/java/j2sdk1.4.1_01
CLASSPATH=$CLASSPATH:/usr/java/j2sdk1.4.1_01/lib/tools.jar:/usr/java/j2sdk1.4.1_01/lib/dt.jar:/usr/java/j2sdk1.4.1_01/lib:/usr/java/j2sdk1.4.1_01/jre/lib:/usr/java/j2sdk1.4.1_01/lib/mysql-connector-java-3.0.6-stable-bin.jar
PATH=$PATH:/bin:/usr/bin:/usr/local:/usr/local/bin:/usr/java/j2sdk1.4.1_01/bin:/usr/java/j2sdk1.4.1_01/jre/bin
export JAVA_HOME  CLASSPATH PATH

程序源代码如下:
import java.lang.*;
import java.sql.*;

public class Connect
   {
       public static void main (String[] args)
       {
           Connection conn = null;

           try
           {
               String userName = "root";
               String password = "";
               String url = "jdbc:mysql://localhost/tryjava";
               Class.forName("com.mysql.jdbc.Driver").newInstance();
               conn = DriverManager.getConnection (url, userName, password);
           
               System.out.println ("Database connection established");
           }
           catch (Exception e)
           {
              // System.err.println ("Cannot connect to database server");
              throw new SQLException(e.toString());
           }
           finally
           {
               if (conn != null)
               {
                   try
                   {
                       conn.close ();
                       System.out.println ("Database connection terminated");
                   }
                   catch (Exception e) { /* ignore close errors */ }
               }
           }
       }
   }
我的源程序在/root下,为Connect.java。
在shell下编译:
#javac Connect.java
结果出现如下错误:
Connect.java:55:error:Exception "java.sql.SQLException" is not catched and does not appear in throws list [JLS 8.4.4]

这个问题这些天一直困着我,我发过帖子,很多高手也回应了,我上面的环境变量等觉得就是按高手们的说法写的,可是问题究竟在哪里呢?再次谢谢大家。只要问题解决,分数不成问题!!! 

20 个解决方案

#1


另外,我的linux是redhat7.2的,mysql是3。23。41的

#2


这段程序不是你整个的源代码吧?

#3


这是因为你没有捕获(catch)这类错误,却要抛出(thrown)这类错误所造成的,我上次只是告诉你要抛出系统捕获的错误告诉你要添加throw new SQLException(e.toString())一句而没有告诉你要改上面的catch,呵呵。

解决办法有两种:
throw new SQLException(e.toString());
改为
throw new Exception(e.toString());

或者catch (Exception e)
改为catch(SQLException e)

#4


把下面的语句去掉:
throw new SQLException(e.toString());

#5


好,我试一试。叶三耿,太谢谢你了!:)

#6


呵呵,不客气,不要给我分,你也很不容易的,解决了问题就好。

#7


UP

#8


叶三耿,我把catch (Exception e)改为catch(SQLException e),错误变为:
Connect.java:50:error:Exception "java.sql.InstantiationException" 
is not catched and does not appear in throws list [JLS 8.4.4]
   我看见一些代码例子中的下面这句:
   Class.forName("com.mysql.jdbc.Driver").newInstance();
没有“.newInstance()”,是不是这里有问题?不过有的例子又有,什么原
因呢?
   

#9


xiaozhenchun(xzc)驱动的版本和mysql的版本不适应!

#10


我看了mm和connector/J的区别,就是把“Class.forName"com.mysql.jdbc.Driver").newInstance();“
的com.mysql.jdbc.Driver改为"mm.。。。。。。。"就好像可以了。

#11


活着的穿马甲中,"驱动的版本和mysql的版本不适应!"我的connector/J是最新的啊?
难道mysql太老?

#12


咱们先不管那么多,你先采用我上面告诉你的第一种改法,看看系统说什么,也就是catch 和throw 部分改为如下:

 catch (Exception e)
           {
              // System.err.println ("Cannot connect to database server");
              throw new Exception(e.toString());
           }

系统反馈什么你再告诉我。

#13


叶三耿,我改了,呵呵(苦笑),错误变为:
    Connect.java:58:error:Exception "java.lang.Exception" 
is not catched and does not appear in throws list [JLS 8.4.4]
    正是琢磨不定,是不是还要import什么???

#14


环境变量的设置我觉得应该没有问题了

#15


又没有搞错?方法头都没有抛出异常,方法中竟然能够抛出?
public static void main (String[] args)
...
catch (Exception e)
           {
              // System.err.println ("Cannot connect to database server");
              throw new Exception(e.toString());
           }
...
如果想跑出,至少在方法头中作如下处理:
public static void main (String[] args) throws Exception{
...

#16


是版本问题吗?大家说说看呀

#17


你的源程序本身就有问题,应该改成:
(我用的org.gjt.mm.mysql.Driver与你的驱动程序不一样,不过我已经试通了!)
import java.lang.*;
import java.sql.*;

public class Connect
   {
       public static void main (String[] args)
       {
           Connection conn = null;

           try
           {
               String userName = "root";
               String password = "";
               String url = "jdbc:mysql://localhost/tryjava";
               Class.forName("com.mysql.jdbc.Driver").newInstance();
               conn = DriverManager.getConnection (url, userName, password);
           
               System.out.println ("Database connection established");
           }
           catch (Exception e)//这样测试把一切错误都捕捉并进行处理了
           {
              System.err.println ("Cannot connect to database server");
           }
           finally
           {
               if (conn != null)
               {
                   try
                   {
                       conn.close ();
                       System.out.println ("Database connection terminated");
                   }
                   catch (Exception e) { /* ignore close errors */ }
               }
           }
       }
   }

#18


你这样到是省事了!

我觉得既然抛出异常,当然要具体异常具体分析

#19


估计是mysql-connector-java-3.0.6-stable-bin.jar的驱动和MySQL的版本不匹配,还是看看它里面有没有文档,我也遇到过这样的问题,用com.mysql.jdbc.Driver驱动,能连上数据库,但查不出数据,报错说找不到列,后来换了驱动就好了!

#20


wylove(阿刚),你说得对,在main后面加上throws exception就可以了.真是谢谢大家了!!!觉得分不够的尽管说!!!

#1


另外,我的linux是redhat7.2的,mysql是3。23。41的

#2


这段程序不是你整个的源代码吧?

#3


这是因为你没有捕获(catch)这类错误,却要抛出(thrown)这类错误所造成的,我上次只是告诉你要抛出系统捕获的错误告诉你要添加throw new SQLException(e.toString())一句而没有告诉你要改上面的catch,呵呵。

解决办法有两种:
throw new SQLException(e.toString());
改为
throw new Exception(e.toString());

或者catch (Exception e)
改为catch(SQLException e)

#4


把下面的语句去掉:
throw new SQLException(e.toString());

#5


好,我试一试。叶三耿,太谢谢你了!:)

#6


呵呵,不客气,不要给我分,你也很不容易的,解决了问题就好。

#7


UP

#8


叶三耿,我把catch (Exception e)改为catch(SQLException e),错误变为:
Connect.java:50:error:Exception "java.sql.InstantiationException" 
is not catched and does not appear in throws list [JLS 8.4.4]
   我看见一些代码例子中的下面这句:
   Class.forName("com.mysql.jdbc.Driver").newInstance();
没有“.newInstance()”,是不是这里有问题?不过有的例子又有,什么原
因呢?
   

#9


xiaozhenchun(xzc)驱动的版本和mysql的版本不适应!

#10


我看了mm和connector/J的区别,就是把“Class.forName"com.mysql.jdbc.Driver").newInstance();“
的com.mysql.jdbc.Driver改为"mm.。。。。。。。"就好像可以了。

#11


活着的穿马甲中,"驱动的版本和mysql的版本不适应!"我的connector/J是最新的啊?
难道mysql太老?

#12


咱们先不管那么多,你先采用我上面告诉你的第一种改法,看看系统说什么,也就是catch 和throw 部分改为如下:

 catch (Exception e)
           {
              // System.err.println ("Cannot connect to database server");
              throw new Exception(e.toString());
           }

系统反馈什么你再告诉我。

#13


叶三耿,我改了,呵呵(苦笑),错误变为:
    Connect.java:58:error:Exception "java.lang.Exception" 
is not catched and does not appear in throws list [JLS 8.4.4]
    正是琢磨不定,是不是还要import什么???

#14


环境变量的设置我觉得应该没有问题了

#15


又没有搞错?方法头都没有抛出异常,方法中竟然能够抛出?
public static void main (String[] args)
...
catch (Exception e)
           {
              // System.err.println ("Cannot connect to database server");
              throw new Exception(e.toString());
           }
...
如果想跑出,至少在方法头中作如下处理:
public static void main (String[] args) throws Exception{
...

#16


是版本问题吗?大家说说看呀

#17


你的源程序本身就有问题,应该改成:
(我用的org.gjt.mm.mysql.Driver与你的驱动程序不一样,不过我已经试通了!)
import java.lang.*;
import java.sql.*;

public class Connect
   {
       public static void main (String[] args)
       {
           Connection conn = null;

           try
           {
               String userName = "root";
               String password = "";
               String url = "jdbc:mysql://localhost/tryjava";
               Class.forName("com.mysql.jdbc.Driver").newInstance();
               conn = DriverManager.getConnection (url, userName, password);
           
               System.out.println ("Database connection established");
           }
           catch (Exception e)//这样测试把一切错误都捕捉并进行处理了
           {
              System.err.println ("Cannot connect to database server");
           }
           finally
           {
               if (conn != null)
               {
                   try
                   {
                       conn.close ();
                       System.out.println ("Database connection terminated");
                   }
                   catch (Exception e) { /* ignore close errors */ }
               }
           }
       }
   }

#18


你这样到是省事了!

我觉得既然抛出异常,当然要具体异常具体分析

#19


估计是mysql-connector-java-3.0.6-stable-bin.jar的驱动和MySQL的版本不匹配,还是看看它里面有没有文档,我也遇到过这样的问题,用com.mysql.jdbc.Driver驱动,能连上数据库,但查不出数据,报错说找不到列,后来换了驱动就好了!

#20


wylove(阿刚),你说得对,在main后面加上throws exception就可以了.真是谢谢大家了!!!觉得分不够的尽管说!!!

#21