Java使用线程池创建数据库连接 使用线程池创建数据库连接 ------------------------------------------------------------------ 使用线程池创建数据库连接: 一:创建单线程直接连接: 二 :使用从 文本文件中读取连接数据库的 注册驱动类 登陆的 URL 用户名和密码 步骤:1:在 程序的 根目录下 创建一个 db.properties 文件 步骤2:创建一个能从文本文件中 读取数据的文件 TestProperties.java 三: 编写一个测试类: TestDML.java 四:编写一个DBUtil类 :用来封装 对数据库的 连接和关闭的 方法类 1:先封装连接方法 2:再把 从文本文件中 读取文件流的 方法封装成静态方法: 五:在把相关参数修改出来 六:在静态代码块中编写线程池 七:修改 连接方法内容 八:修改好的 最后状态 一:创建单线程直接连接: 步骤: ----------------------------------------------------------------- public class DBUtil{ public static void main(String[] args) { Connection con = null; try {//注册驱动类 Class.forName("oracle.jdbc.OracleDriver"); //使用 字符串形式:进行IP 数据库端口 SID 的连接 String ur1="jdbc:oracle:thin:@192.168.0.204:1521:tarena"; //获取 connection接口: 进行 url 账号 密码登陆 con=DriverManager.getConnection(ur1,"jsd1402","jsd1402" ); System.out.println("数据库连接成功"); } catch (Exception ex) { System.out.println("数据库连接失败!"); ex.printStackTrace(); }finally{ try { con.close();//关闭连接 } catch (Exception e) { e.printStackTrace();} } } } } ----------------------------------------------------------------------------- 使用mian方法测试单线程直接连接数据库是否成功 ============================================================================= 二 :使用从 文本文件中读取连接数据库的 注册驱动类 登陆的 URL 用户名和密码 步骤:1:在 程序的 根目录下 创建一个 db.properties 文件 文件内容格式: #key=value username=jsd1402 password=jsd1402 driver=oracle.jdbc.OracleDriver url=jdbc:oracle:thin:@192.168.0.204:1521:tarena 步骤2:创建一个能从文本文件中 读取数据的文件 TestProperties.java public class TestProperties { /**TestProperties.class.getClassLoader().getResourceAsStream("db.properties"); * 类名.class.类加载器.从文件流中获取资源("放在程序根目录下的properties文件中的内容") * loader: 载入程序;装货设备;装填器 */ public static void main(String[] args) { try { /*从properties文件中读取文件思路: * 1:声明对象:Properties props=new Properties(); * 2:调用获取properties文件内容的流方法:props.load(inStream); * 3:将src /db.propreties以InputStream方式载入 * inStream= TestProperties.class.getClassLoader().getResourceAsStream("db.properties"); * 4://读取props中文件信息 * String name=props.getProperty("uesrname"); * */ Properties props=new Properties(); //将src /db.propreties以InputStream方式载入 InputStream inStream= TestProperties .class.getClassLoader().getResourceAsStream("db.properties"); props.load(inStream); //读取props中文件信息 String name=props.getProperty("uesrname"); String password=props.getProperty("password"); String driver=props.getProperty("driver"); String url= props.getProperty("url"); //测试用 :输出获取的文件流 System.out.println(name); System.out.println(password); System.out.println(driver); System.out.println(url); //获取连接 } catch (Exception e) {e.printStackTrace(); } }} =============================================================================== 三: 编写一个测试类: TestDML.java public class TestDML { static Statement stat=null; static Connection con = null; public static void main(String[] args) { try { con=UBUtil.getConnection(); System.out.println("数据库连接成功"); } catch (Exception ex) { System.out.println("数据库连接失败!"); ex.printStackTrace(); }finally{ UBUtil.closeStatement(stat); } }} 四:编写一个DBUtil类 :用来封装 对数据库的 连接和关闭的 方法类 1:先封装连接方法 2:再把 从文本文件中 读取文件流的 方法封装成静态方法: public class UBUtil { public static Connection getConnection() { static String username = null; static String password = null; static String driver = null; static String url = null; static BasicDataSource ds;// 创建线程池对象 static { /** * /*从properties文件中读取文件思路: 1:声明对象:Properties props=new Properties(); * 2:调用获取properties文件内容的流方法:props.load(inStream); 3:将src * /db.propreties以InputStream方式载入 inStream= * TestProperties.class.getClassLoader * ().getResourceAsStream("db.properties"); 4://读取props中文件信息 String * name=props.getProperty("uesrname"); * */ try { Properties props = new Properties(); InputStream inStream = UBUtil.class.getClassLoader() .getResourceAsStream("db.properties"); props.load(inStream); username = props.getProperty("username"); password = props.getProperty("password"); driver = props.getProperty("driver"); url = props.getProperty("url"); // 创建线程池 BasicDataSource bds = new BasicDataSource();// 实例化 :创建线程池对象 // 设置参数 bds.setDriverClassName(driver); bds.setUrl(url); bds.setUsername(username); bds.setPassword(password); // 设置最大有效的 线程池连接数和最初线程池初始化线程数 bds.setMaxActive(100);// active 有效地 活跃的 bds.setInitialSize(10);// initial 最初的 ds = bds; } catch (Exception ex) { ex.printStackTrace(); } } Connection con = null; try {//注册驱动类 Class.forName("oracle.jdbc.OracleDriver"); //使用 字符串形式:进行IP 数据库端口 SID 的连接 String ur1="jdbc:oracle:thin:@192.168.0.204:1521:tarena"; //获取 connection接口: 进行 url 账号 密码登陆 con=DriverManager.getConnection(ur1,"jsd1402","jsd1402" ); System.out.println("数据库连接成功"); } catch (Exception ex) { System.out.println("数据库连接失败!"); ex.printStackTrace(); }finally{ try { con.close();//关闭连接 } catch (Exception e) { e.printStackTrace();} } } } } 五:在把相关参数修改出来 public class DBUtil { static String name = ""; static String password = ""; static String driver = ""; static String url = ""; static DataSource ds;//声明连接池 /** * 使用静态代码块 从根文本文件中获取文件流进行数据库连接 从properties文件中读取文件思路: * 1:声明对象:Properties props=new Properties(); * 2:调用获取properties文件内容的流方法:props.load(inStream); * 3:将src /db.propreties以InputStream方式载入 * inStream= TestProperties.class.getClassLoader().getResourceAsStream("db.properties"); * 4://读取props中文件信息 String * name=props.getProperty("uesrname"); * * @return */ static { try { Properties props = new Properties(); // 将src /db.propreties以InputStream方式载入 InputStream inStream = TestProperties.class.getClassLoader() .getResourceAsStream("db.properties"); props.load(inStream); // 读取props中文件信息 name = props.getProperty("username"); password = props.getProperty("password"); driver = props.getProperty("driver"); url = props.getProperty("url"); // System.out.println(name+password+driver+url);//测试 从文本文件获取文件流内容 } catch (Exception ex) { ex.printStackTrace(); } } /** * 进行数据库连接 * * @return */ public static Connection getConnection() { Connection con = null; // 注册驱动类 try { Class.forName(driver /* "oracle.jdbc.OracleDriver" */); // 使用 字符串形式:进行IP 数据库端口 SID 的连接 // String ur1 = "jdbc:oracle:thin:@192.168.0.204:1521:tarena"; // 获取 connection接口: 进行 账号 密码登陆 con = DriverManager.getConnection(url, name, password); System.out.println("数据库连接"); } catch (Exception e) { e.printStackTrace(); } return con; } } =============================================================================== 六:在静态代码块中编写线程池 static String username = ""; static String password = ""; static String url = ""; static String driver = ""; static DataSource ds;//连接池 static{//只执行一次 try{ Properties props = new Properties(); //将src/db.properties以InputStream方式载入 InputStream inStream = TestProperties.class .getClassLoader() .getResourceAsStream("db.properties"); props.load(inStream); username = props.getProperty("username"); password = props.getProperty("password"); url = props.getProperty("url"); driver = props.getProperty("driver"); //创建连接池对象 BasicDataSource bds = new BasicDataSource(); //设置连接参数 bds.setDriverClassName(driver); bds.setUrl(url); bds.setUsername(username); bds.setPassword(password); bds.setMaxActive(10);//最大连接数 bds.setInitialSize(2);//初始连接数 ds = bds; }catch(Exception ex){ ex.printStackTrace(); } } ========================================================================== 七:修改 连接方法内容 public static Connection getConnection() throws Exception{ return ds.getConnection(); } ============================================================================ 八:创建线程池连接数据库最后状态: package day3; //备份 import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; public class DBUtil1 { static String username = ""; static String password = ""; static String url = ""; static String driver = ""; static DataSource ds;//连接池 static{//只执行一次 try{ Properties props = new Properties(); //将src/db.properties以InputStream方式载入 InputStream inStream = TestProperties.class .getClassLoader() .getResourceAsStream("db.properties"); props.load(inStream); username = props.getProperty("username"); password = props.getProperty("password"); url = props.getProperty("url"); driver = props.getProperty("driver"); //创建连接池对象 BasicDataSource bds = new BasicDataSource(); //设置连接参数 bds.setDriverClassName(driver); bds.setUrl(url); bds.setUsername(username); bds.setPassword(password); bds.setMaxActive(10);//最大连接数 bds.setInitialSize(2);//初始连接数 ds = bds; }catch(Exception ex){ ex.printStackTrace(); } } /** * 返回一个Connection连接对象 * @return * @throws Exception */ public static Connection getConnection() throws Exception{ return ds.getConnection(); } /** * 关闭传入的Connection对象 * @param con */ public static void closeConnection( Connection con){ try { if(con != null){ con.close(); } } catch (SQLException e) { } } public static void closeStatement( Statement stat){ try { if(stat != null){ stat.close(); } } catch (SQLException e) { } } public static void closeResultSet( ResultSet rs){ try { if(rs != null){ rs.close(); } } catch (SQLException e) { } } public static void close( Connection con, Statement stat, ResultSet rs){ closeResultSet(rs);//先关闭rs closeStatement(stat);//再关闭stat closeConnection(con);//最后关闭con } public static void close( Connection con, Statement stat){ closeStatement(stat);//先关闭stat closeConnection(con);//最后关闭con } }
《Java使用线程池创建数据库连接》上暂无评论!