:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
导包 →加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源
mysql导包:maven搜索mysql oracle导包:maven搜索OJDBC
装载MySql驱动:Class.forName(“com.mysql.jdbc.Driver”); 装载Oracle驱动:Class.forName(“oracle.jdbc.driver.OracleDriver”);
获取MySQL数据库连接:
Connection conn = DriverManage`这里写代码片`r.getConnection("jdbc:mysql://host:port/database", "user", "password");获取Oracle数据库连接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:databaseName", "user", "password");获取连接代码实例(Oracle):
try { //1.注册驱动,加载oracle驱动的类对象(具体厂商实现) Class.forName("oracle.jdbc.driver.OracleDriver"); //2.创建连接:通过sun提供的实现类DiverManager来获取连接 Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "system", "123"); System.out.println(conn); //尝试关闭连接 conn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }使用properties作为配置文件,封装获取连接
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class DBTool { private static String url; private static String user; private static String pwd; static{ //使用静态块读取配置文件中的参数 Properties p=new Properties(); try { p.load(DBTool.class.getClassLoader() .getResourceAsStream("db.properties")); String driver=p.getProperty("driver"); url=p.getProperty("url"); user=p.getProperty("user"); pwd=p.getProperty("pwd"); //注册驱动 Class.forName(driver); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("读取db.properties失败",e); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new RuntimeException("找不到这个驱动类",e); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, user,pwd); } public static void close(Connection conn){ if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("关闭异常",e); } } } }同时贴上配置文件(db.properties)注:properties是格式,同.xml
#database connection parameters driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521:xe user=system pwd=123(对比线程池:只要看见“池”就要想到1.管理数量 2.复用,提高效率)
why 3.1使用DriverManager的问题
1).它没有管理连接上限,并发量大时很容易导致数据库崩溃 2).每次调用它,它都创建新连接,而不是复用连接,效率低 连接池可以解决上述问题 1).它能管理连接上限,避免数据库崩溃 2).它可以让我们复用连接,提高效率
3.2连接池是怎么工作的
创建连接池对象时,它会自动连接数据库,并创建一批(配)连接(空闲) 当调用连接池方法时,它会返回一个连接,并将此连接标记为占用态 当使用完连接后,需将连接归还给连接池,它会将连接数据清空,标记为空闲态(不会像diverManager直接杀死) 当连接池发现空闲连接即将用尽(配)时,它会再次自动创建一批(配)新连接 当占用连接已达数据库上限(配)时,连接池会让调用者等待 当高峰期过后,连接池会自动关闭一批(配)连接
3.3要点
连接池由sun设计出接口DataSource
由厂商提供实现类(DBCP提供的实现类是BasicDataSource)
3.4常用的连接池 DBCP C3P0
代码示例:使用连接池(DBCP)创建公共的数据库连接工具类
导包:maven搜索(commons-dbcp)与OJDBC
import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; public class DBUtil { private static BasicDataSource ds; static{ //加载参数 Properties pro=new Properties(); try { pro.load(DBUtil.class.getClassLoader() .getResourceAsStream("db.properties")); //获取这些参数 String driver =pro.getProperty("diver"); String url=pro.getProperty("url"); String user=pro.getProperty("user"); String pwd=pro.getProperty("pwd"); String initsize=pro.getProperty("init_size"); String maxsize=pro.getProperty("max_size"); //创建连接池 ds=new BasicDataSource(); //给它设置参数 ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(user); ds.setPassword(pwd); ds.setInitialSize(Integer.parseInt(initsize)); ds.setMaxActive(Integer.parseInt(maxsize)); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("加载配置文件失败",e); } } /** * 由连接池创建的连接,其实现类由连接池提供 * @return * @throws SQLException */ public static Connection getConnection() throws SQLException{ return ds.getConnection(); } /** * 连接池提供的实现类,其close方法内部逻辑是, * 将连接归还给连接池,即它会清空连接对象中的数据 * 并且将连接标记为空闲态 * @param conn */ public static void close(Connection conn){ if(conn!= null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("归还连接失败",e); } } } public static void rollBack(Connection conn){ if(conn!=null){ try { conn.rollback(); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("回滚事物失败",e); } } } }同时贴上配置文件
#database connection parameters driver=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@127.0.0.1:1521:xe user=system pwd=123 #datasource parameters init_size=1 max_size=3注:一个连接就是一个线程