数据库连接和数据库连接池连接
数据库直连
方式:DriverManager
需要引入的jar包:我用的版本是mysql-connecton-java-5.1.7-bin.jar
//1.加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); //2. 获得数据库连接 con = (Connection) DriverManager.getConnection(DB_URL,USER,PASS); //3.操作数据库,实现增删改查 stmt = (Statement) con.createStatement(); String sql; sql = "select name,password from a"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String name = rs.getString("name"); String password = rs.getString("password"); //System.out.println("name:"+name); //System.out.println("password:"+password); } rs.close(); stmt.close(); con.close();
数据库连接池
方式一:DBCP
方式二:C3P0
DBCP:
配置文件context.xml
<Context> <Resource name ="jdbc/test" auth = "Container" type = "javax.sql.DataSource" maxTotal = "100" maxIdle = "30" maxWaitMillis="10000" username="root" password="******" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" /> </Context>
与数据库直连相比,连接池是从连接池中获取一个连接,然后进行增删改查操作。
//lookup()中如果是非本地数据库直接/jdbc/test //如果是本地数据库需要java:comp/env/jdbc/test //jdbc/test应该与配置文件中的name一致 DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/test"); Connection conn = ds.getConnection(); Statement stmt = (Statement) conn.createStatement(); String sql; sql = "select name,password from a"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String name = rs.getString("name"); String password = rs.getString("password"); //System.out.println("name:"+name); //System.out.println("password:"+password); } rs.close(); stmt.close(); conn.close();
C3P0:
参考了同学的知乎,挺受益的
详见:https://zhuanlan.zhihu.com/p/28831891