Java中不使用集成开发环境连接数据库

Java中不使用集成开发环境连接数据库

 

        今天学习了J2EE中连接数据库的方法,由此想到了使用java代码连接数据库。于是试验了一下,由于不使用集成的开发环境,那么将数据库的驱动放到哪里。从网上查了很多资料,加上自己的猜测,可以放置的地方有这么几个:

        1. 在CLATHPATH中加上我们的驱动jar包,至于路径可以随意放置了,但是网上有网友的建议是目录要短,并且每一级的长度不要大于8.3。

        2. 第二个想到的目录肯定是当前目录,也就是与主.claa文件所在的目录。

        3. 再想到的目录就是jre的lib目录,这个目录似乎有两种,一个是jre目录,另外一个就是jdk目录下的jre目录中的lib目录。

        4. 最后一个应该就是jdk的lib目录了,但是这个目录怎么想似乎也不靠谱,它是编译使用的路径,并不是执行时使用的,所以想着也不太对。

 

       逐个目录进行试验,都以失败告终,没有办法,只有查找其他的资料。对java的执行进行一个思考,java的.class类是由jvm来解释的,那么数据库驱动的jar包肯定要加载到jvm中,我们的主类才可能找到。那么那个放置到那个目录才会被加载呢?最终也没有找到相关的资料,根据一些现有的资料也没能够实现。

 

       根据上面的分析,我们将jar包内的用到的目录中的文件按照目录结构解压缩到主类的根目录,执行成功。那么我们上面的分析是正确的,现在的问题就是需要我们自己来将用到的jar包在程序执行时加载。

 

        有了这个思路,从网上找到了动态加载jar包的方法,按照一个网友给出的代码,调试后果然成功,下面将主文件的代码和加载jar的代码粘贴出来。

        注:Jar包加载代码从其他网友转载而来,为了编写方便,将包名做了修改,特此声明。

 

        主类:       

        //

       import java.sql.*;
       import java.sql.*;
       import com.AndyGuo.JarLoader;

       public class DatabaseTest
       {
               public static void main(String[] srg) 
               {
                       Connection ct = null;
                       Statement sm = null;
                       ResultSet rs = null;
             
                       JarLoader.loadJarPath("lib");
     
                      try 
                     {
                            // 连接数据库
                            Class.forName("com.mysql.jdbc.Driver");   
                             // 得到连接
                            ct = DriverManager.getConnection("jdbc:mysql://localhost/spdb", "root", "root");
                            // 创建Statement
                            sm = ct.createStatement();
      
                            rs = sm.executeQuery("select * from users");
   
                            // 说明有用户存在
                            if(rs.next())
                            {
                                   String dbPasswd = rs.getString( 1);    
                                   System.out.println( dbPasswd);
                            }      
                   }
                  catch (Exception e) 
                   {
                           e.printStackTrace();
                   }
           }
       }

       /**
        * Copyright (c) YMCN Team
        * All rights reserved.
        *
        */
       package com.AndyGuo;

       import java.io.File;
       import java.lang.reflect.Method;
       import java.net.URL;
       import java.net.URLClassLoader;
       import java.util.ArrayList;
       import java.util.List;

       /**
        * @author obullxl
        *
        * email: obullxl@163.com  MSN: obullxl@hotmail.com  QQ: 303630027
        *
        * Blog: http://obullxl.iteye.com
        */
       public final class JarLoader{
       /** URLClassLoader的addURL方法 */
       private static Method addURL = initAddMethod();
           
        /** 初始化方法 */
       private static final Method initAddMethod() {
              try {
                   Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
                   add.setAccessible(true);
                   return add;
              } 
              catch(Exception e) 
              {
                          e.printStackTrace();
              }
  
              return null;
       }

    private static URLClassLoader system = (URLClassLoader) ClassLoader.getSystemClassLoader();

    /**
     * 循环遍历目录,找出所有的JAR包
     */
    private static final void loopFiles(File file, List<File> files) {
        if (file.isDirectory()) 
         {
                   File[] tmps = file.listFiles();
                   for (File tmp : tmps) 
                   {
                          loopFiles(tmp, files);
                   }
        } 
        else 
         {
                 if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) 
                 {
                       files.add(file);
                 }
         }
    }

    /**
     * <pre>
     * 加载JAR文件
     * </pre>
     *
     * @param file
     */
    public static final void loadJarFile(File file) {
        try {
            addURL.invoke(system, new Object[] { file.toURI().toURL() });
            System.out.println("加载JAR包:" + file.getAbsolutePath());
        } 
         catch (Exception e) 
         {
               e.printStackTrace();
         }
     }

    /**
     * <pre>
     * 从一个目录加载所有JAR文件
     * </pre>
     *
     * @param path
     */
    public static final void loadJarPath(String path) {
        List<File> files = new ArrayList<File>();
        File lib = new File(path);
        loopFiles(lib, files);
        for (File file : files) 
         {
            loadJarFile(file);
        }
    }
}

 

By 北洋小郭

转载请注明出处,谢谢!

       

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值