Java JDBC | 四种连接数据库的方法

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)   

〇、连接步骤

//第一步,注册驱动程序
//com.MySQL.jdbc.Driver
Class.forName("数据库驱动的完整类名");

//第二步,获取一个数据库的连接
Connection conn = DriverManager.getConnection("连接URL","用户名","密码");

//第三步,创建一个会话
Statement stmt=conn.createStatement();

//第四步,执行SQL语句,增加,删除,修改记录
stmt.executeUpdate("增加,删除,修改记录的SQL语句");

//或者查询记录
ResultSet rs = stmt.executeQuery("查询记录的SQL语句");

//第五步,对查询的结果进行处理
while(rs.next()){
//对记录的操作
}

//第六步,关闭连接
rs.close();
stmt.close();
conn.close();


一、环境 
  1、数据库驱动jar文件    

  2、DBCP方法 
        Commons-dbcp.jar:连接池的实现 Commons-pool.jar:连接池实现的依赖库 资源文件 
  3、c3p0方法: c3p0-0.9.1.2.jar 
        配置文件:c3p0-config.xml 

二、连接操作 

1、DriverManager方法

package demo.jdbcpool.test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConnection {
 private static String driverClass = "com.mysql.jdbc.Driver";
 private static String url = "jdbc:mysql://localhost:3306/test";
 private static String username = "root";
 private static String password = "123456";
 private static Connection conn = null;
 static {
  try {
   // 注册驱动
   // 不要把conn = DriverManager.getConnection(url, username, password);
   // 放在这里。防止所有用户都用一个Connection
   Class.forName(driverClass);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }
 public static Connection getConnection() throws SQLException {
  conn = DriverManager.getConnection(url, username, password);
  return conn;
 }
}

2、使用DataSource子类方法;

资源文件 DBConnection.properties

driverClass = com.mysql.jdbc.Driver    
url = jdbc:mysql://localhost:3306/test  
username = root    
password = 123456
模拟数据连接池 
DataSourcePool.java  
package cn.langzi.jdbc.DataSource; 
import java.io.InputStream;       
import java.io.PrintWriter; 
import java.lang.reflect.InvocationHandler;        
import java.lang.reflect.Method;        
import java.lang.reflect.Proxy;        
import java.sql.Connection;        
import java.sql.DriverManager;        
import java.sql.SQLException;        
import java.util.LinkedList;        
import java.util.Properties;        
import javax.sql.DataSource;        
import javax.sql.DataSource; 
 public class DataSourcePool implements DataSource { 
    private static String url = null;         
    private static String username = null;        
    private static String password = null;     
    private static int size = 10;     
    private static LinkedList<Connection> list = new LinkedList<Connection>();         
static{
    try {                 
      InputStream in = DataSourcePool.class.getClassLoader()                       
          .getResourceAsStream       ("cn/langzi/jdbc/DataSource/DBConnection.properties");              
     Properties prop = new Properties();                   
     prop.load(in);                
     Class.forName(prop.getProperty("driverClass"));                 
     url = prop.getProperty("url");                 
     username = prop.getProperty("username");                 
     password = prop.getProperty("password");                
       } catch (Exception e) {                    
        throw new ExceptionInInitializerError(e);                  }         }         
       private static DataSourcePool pool = new DataSourcePool();            
       //创建对象就初始化size个数据库连接        
       private DataSourcePool(){             
            for(int i=0;i<size;i++){
                  try {                   
                   Connection conn = DriverManager.getConnection(url, username, password);                   
                    System.out.println(conn);                         
                     list.add(conn);                   
                      } catch (SQLException e) {                              
                           e.printStackTrace();
                        } 
}

DataSource有两种实现方式

1.直连数据库方式 
当调用DataSource.getConnection()时,其实它调用的是DriverManager.getConnection(url, user, password)来获取一个Connection,Connection使用完后被close,断开与数据库的连接,我们称这总方式是直连数据库,因为每次都需要重新建立与数据库之间的连接,而并没有把之前的Connection保留供下次使用.

2.池化连接方式 
可以说这种方式就是使用了连接池技术.DataSource内部封装了一个连接池,当你获取DataSource的时候,它已经敲敲的与数据库建立了多个Connection,并将这些Connection放入了连接池,此时调用DataSource.getConnection()它从连接池里取一个Connection返回,Connection使用完后被close,但这个close并不是真正的与数据库断开连接,而是告诉连接池"我"已经被使用完,"你"可以把我分配给其它"人"使用了.就这样连接池里的Connection被循环利用,避免了每次获取Connection时重新去连接数据库.
对DataSource的两种实现方式已经介绍完毕,现在知道DataSource与连接池之间的是关系而不是区别了吧,因为DataSource与连接池根本就不是同一类型的东西,只有同一类型的东西才存在区别,例如:oracle与db2都是数据库,它们才存在区别.我们这里仅仅实现了数据库的链接,并没有池化链接

3、使用C3P0

ComboPooledDataSource cpds = new ComboPooledDataSource();  
  
// 加载数据库驱动  
try {  
    cpds.setDriverClass("com.ibm.db2.jcc.DB2Driver");  
} catch (PropertyVetoException e1) {  
    e1.printStackTrace();  
}  
  
// 设置访问数据库的地址、用户名和密码  
cpds.setJdbcUrl("jdbc:db2://10.10.38.138:50000/malltest");  
cpds.setUser("db2inst1");  
cpds.setPassword("db2inst1");  
  
// 设置C3P0的一些配置,不设置则使用默认值  
cpds.setMinPoolSize(5);  
cpds.setAcquireIncrement(5);  
cpds.setMaxPoolSize(20);  
cpds.setMaxStatements(180);  
  
Connection conn = null;  
Statement stmt = null;  
ResultSet rs = null;  
try {  
    // 创建数据库连接  
    conn = cpds.getConnection();  
      
    // 获取数据库操作对象  
    stmt = conn.createStatement();  
      
    // 操作数据库获取结果集  
    rs = stmt.executeQuery("select * from ly.t_merinf where merid='M0000178'");  
      
    // 处理结果集  
    while (rs.next()) {  
        System.out.println(rs.getString("mername"));  
    }  
} catch (SQLException e) {  
    e.printStackTrace();  
} finally {  
    // 关闭结果集  
    if(rs != null) {  
        try { rs.close(); } catch (SQLException e) { }  
    }  
    // 关闭数据库操作对象  
    if(stmt != null) {  
        try { stmt.close(); } catch (SQLException e) { }  
    }  
    // 关闭数据库连接  
    if(conn != null) {  
        try { conn.close(); } catch (SQLException e) { }  
    }  
    try {  
        DataSources.destroy(cpds);  
    } catch (SQLException e) {  
        e.printStackTrace();  
    }  
}  

4、使用DBCP

配置文件:

driverClassName=com.ibm.db2.jcc.DB2Driver  
url=jdbc:db2://10.10.38.138:50000/malltest  
username=db2inst1  
password=db2inst1  
initialSize=3  
maxActive=5  
maxIdle=3  
minIdle=1  
maxWait=30000  
代码:

// 1.创建连接池  
DataSource ds = null;  
try {  
    Properties prop = new Properties();  
    // 通过类路径来加载属性文件  
    prop.load(DbcpTest.class.getClassLoader().getResourceAsStream("database/dbcp/dbcp.properties"));  
    // 获取数据源  
    ds = BasicDataSourceFactory.createDataSource(prop);  
} catch (IOException e) {  
    e.printStackTrace();  
} catch (Exception e) {  
    e.printStackTrace();  
}  
  
Connection conn = null;  
Statement stmt = null;  
ResultSet rs = null;  
try {  
    // 2.获取数据库连接  
    conn = ds.getConnection();  
      
    // 3.创建数据库操作对象  
    stmt = conn.createStatement();  
      
    // 4.操作数据库获取结果集  
    rs = stmt.executeQuery("select * from ly.t_merinf where merid='M0000178'");  
  
    // 5.处理结果集  
    while (rs.next()) {  
        System.out.println(rs.getString("mername"));  
    }  
} catch (SQLException e) {  
    e.printStackTrace();  
} finally {  
    // 关闭结果集  
    if(rs != null) {  
        try { rs.close(); } catch (SQLException e) { }  
    }  
    // 关闭数据库操作对象  
    if(stmt != null) {  
        try { stmt.close(); } catch (SQLException e) { }  
    }  
    // 关闭数据库连接  
    if(conn != null) {  
        try { conn.close(); } catch (SQLException e) { }  
    }  
}  





  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要使用Java JDBC连接SQL Server数据库,需要遵循以下步骤: 1. 下载并安装 SQL Server JDBC驱动程序。 2. 在Java代码中加载驱动程序。例如: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 3. 使用以下代码创建数据库连接: String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=your_database_name;user=your_username;password=your_password"; Connection con = DriverManager.getConnection(connectionUrl); 其中,"localhost"是SQL Server主机名或IP地址,"1433"是SQL Server端口号,"your_database_name"是要连接的数据库名称,"your_username"和"your_password"是登录SQL Server所需的凭据。 4. 使用创建的连接对象创建Statement对象,以便向SQL Server发送SQL查询。例如: Statement stmt = con.createStatement(); String sql = "SELECT * FROM your_table_name"; ResultSet rs = stmt.executeQuery(sql); 其中,"your_table_name"是要查询的表的名称。 5. 使用ResultSet对象处理查询结果。例如: while (rs.next()) { String column1 = rs.getString("column1_name"); int column2 = rs.getInt("column2_name"); // 处理查询结果 } 完整示例代码: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JdbcSqlServerExample { public static void main(String[] args) { // 加载SQL Server JDBC驱动程序 try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); return; } // 创建数据库连接 String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=your_database_name;user=your_username;password=your_password"; try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) { // 查询数据 String sql = "SELECT * FROM your_table_name"; try (ResultSet rs = stmt.executeQuery(sql)) { // 处理查询结果 while (rs.next()) { String column1 = rs.getString("column1_name"); int column2 = rs.getInt("column2_name"); // 处理查询结果 } } } catch (SQLException e) { e.printStackTrace(); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值