JDBC和DBCP链接数据库

来源:互联网 发布:淘宝助理图片效验出错 编辑:程序博客网 时间:2024/06/05 05:11

JDBC链接数据库。
这是最基本的连接数据库方式,思路是这样的:

  • 导入jar包,并add to path。
  • 加载数据库驱动。
  • 获取数据库链接。
  • 创建Statement对象。
  • 操作数据库(执行SQL语句)。
  • 得到结果集。
  • 最后关闭数据库链接。

简单例子:

package DB;import java.sql.*;public class JDBCUtils {    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";      static final String URL="jdbc:mysql://localhost:3306/Demo";    static final String name = "root";    static final String password = "9527";    public static void main(String[] args) {        // TODO Auto-generated method stub        Connection con = null;        Statement st = null;            try{            //注册驱动            Class.forName(JDBC_DRIVER);            //获得数据库链接            con = DriverManager.getConnection(URL, name, password);            //创建Statement对象            st = con.createStatement();            //操作数据库            ResultSet rs = st.executeQuery("select * from user");            //读取数据            while(rs.next()){                String name = rs.getString("name");                String pwd = rs.getString("password");                String phone = rs.getString("phone");                System.out.println("-----");                System.out.println("name is:"+name);                System.out.println("password is:"+pwd);                System.out.println("phone is:"+phone);                System.out.println("-----");            }            // 完成后关闭            rs.close();            st.close();            con.close();        }catch(Exception e){            e.printStackTrace();        }    }}

DBCP链接数据
数据库连接池的操作思路是这样的:
(1)建立数据库连接池对象。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。

配置文件,最重要的是driverClassName,url,username,password:

driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/Demousername=rootpassword=9527initialSize=10maxActive=50maxIdle=20minIdle=5maxWait=60000connectionProperties=useUnicode=true;characterEncoding=utf8defaultAutoCommit=truedefaultReadOnly=defaultTransactionIsolation=REPEATABLE_READ
package DB;import java.io.InputStream;import java.sql.Connection;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement;  import java.util.Properties;  import javax.sql.DataSource;  import org.apache.commons.dbcp2.BasicDataSourceFactory; public class DBCPUtils {    static DataSource DS = null;    static{        try{            Properties prop = new Properties();            InputStream b = DBCPUtils.class.getClassLoader().getResourceAsStream(                    "../DBCP.properties");            System.out.println(b);            prop.load(DBCPUtils.class.getClassLoader().getResourceAsStream(                    "DBCP.properties"));            DS = BasicDataSourceFactory.createDataSource(prop);         }catch(Exception e){            e.printStackTrace();        }    }    public static Connection getConnection(){          try {              return DS.getConnection();          } catch (SQLException e) {              throw new RuntimeException(e);          }      }    public static void close(Connection conn, Statement st, ResultSet rs){        if(rs!=null){              try{                     rs.close();              }catch(Exception e){                     e.printStackTrace();              }              rs=null;              }          if(st!=null){              try{                     st.close();              }catch(Exception e){                     e.printStackTrace();              }              st=null;          }          if(conn!=null){             try{                     conn.close();              }catch(Exception e){                    e.printStackTrace();             }             conn=null;         }    }    public static void main(String[] args) throws SQLException {        // TODO Auto-generated method stub        Connection con = DBCPUtils.getConnection();        Statement st = con.createStatement();        ResultSet rs = st.executeQuery("select * from user");        while(rs.next()){            String name = rs.getString("name");            String pwd = rs.getString("password");            String phone = rs.getString("phone");            System.out.println("-----");            System.out.println("name is:"+name);            System.out.println("password is:"+pwd);            System.out.println("phone is:"+phone);            System.out.println("-----");        }        DBCPUtils.close(con, st, rs);    }}