扫盲:
Classloader 类加载器,用来加载 Java 类到 Java 虚拟机中。与普通程序不同的是。Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。
JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类),ApplicationClassLoader负责加载应用程序自身的类。
当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。
一:工具类
1 package Jdbc_Test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.sql.Connection; 6 import java.sql.DriverManager; 7 import java.sql.ResultSet; 8 import java.sql.Statement; 9 import java.util.Properties; 10 11 public class jdbcutils { 12 private jdbcutils(){}; 13 private static Connection con; 14 public static void main(String[] args)throws IOException{ 15 16 17 } 18 public static Connection getCon(){ 19 /* 20 通过读取properites配置文件来获取数据库连接信息。 21 通过类加载器,读取当前父目录的配置文件。通过class.getClassLoader方法getResourceAstream获取配置文件的 22 内容,然后通过IO流处理properites文件获取对应的key值。 23 配置文件便于灵活配置数据库信息。 24 */ 25 InputStream inp=jdbcutils.class.getClassLoader().getResourceAsStream("database.properties"); 26 Properties pro=new Properties(); 27 try { 28 pro.load(inp); 29 }catch (Exception ex){ 30 throw new RuntimeException(ex+"读取配置文件失败!"); 31 } 32 try { 33 String Drverclass = pro.getProperty("Driver.class"); 34 String url = pro.getProperty("Url"); 35 String username = pro.getProperty("username"); 36 String password = pro.getProperty("password"); 37 Class.forName(Drverclass); 38 con = DriverManager.getConnection(url, username, password); 39 }catch (Exception ex){ 40 throw new RuntimeException(ex+"数据库连接失败!"); 41 } 42 return con; 43 } 44 public static void cls_re(Connection con, Statement sta, ResultSet re){ 45 if(con!=null){ 46 try{ 47 con.close(); 48 }catch (Exception ex){} 49 } 50 if(sta!=null){ 51 try{ 52 sta.close(); 53 }catch (Exception ex){} 54 } 55 if(re!=null){ 56 try{ 57 re.close(); 58 }catch (Exception ex){} 59 } 60 61 } 62 public static void cls_re(Connection con, Statement sta){ 63 if(con!=null){ 64 try{ 65 con.close(); 66 }catch (Exception ex){} 67 } 68 if(sta!=null){ 69 try{ 70 sta.close(); 71 }catch (Exception ex){} 72 } 73 74 } 75 }
二:测试代码:
1 package Jdbc_Test; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 public class jdbc_test { 10 public static void main(String... args)throws Exception{ 11 Connection con =jdbcutils.getCon(); 12 PreparedStatement pre=con.prepareStatement("select * from system_user"); 13 ResultSet re=pre.executeQuery(); 14 List <Sys_User> lis =new ArrayList<Sys_User>(); 15 while (re.next()){ 16 Sys_User sys=new Sys_User(re.getString("username"),re.getString("password")); 17 lis.add(sys); 18 } 19 System.out.print(lis); 20 } 21 } 22 class Sys_User{ 23 private String username; 24 private String password; 25 public Sys_User(String username ,String password){ 26 this.username=username; 27 this.password=password; 28 } 29 30 @Override 31 public String toString() { 32 String info=this.username+" "+this.password; 33 return info; 34 } 35 }
properites配置文件:
1 Driver.class=com.mysql.jdbc.Driver 2 Url=jdbc:mysql://192.168.147.146:3306/homework_day13 3 username=test 4 password=123456
需要注意配置文件中不能有双引号 !