Java_(jdbc dbutile c3p0)

JDBC

  • 首先我们要了解什么是JBDC:
    在我们建立了数据库之后,需要与java代码关联,可以通过java代码执行数据库的增删改查.但由于数据库的种类有多种多样的,所有给我们提供了这么一种可以统一访问的java类和接口.jdbc是一种基准,我们可以根据JDBC构建更高级的工作和接口.

  • 如何使用?

    • 首先我们需要导入jdbc的jar包 ->add build path
    • 加载驱动.
    • 获取数据库连接.
    • 获取操作数据的对象.
    • 执行sql语句.
    • 释放对象.

首先声明 我的数据库叫student 表名stu 具体:

Java_(jdbc dbutile c3p0)_第1张图片
数据库表.PNG

具体代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test1 {
        public static void main(String[] args) throws SQLException  {
            //如果是查找接受结果  如果插入 删除 更新不用管(ResultSet)
            
            try {
                Class.forName("com.mysql.jdbc.Driver");//加载驱动
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //获取数据连接(con)
            Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "root");
            PreparedStatement stmt = con.prepareStatement("select *from stu");//获取操作数据的对象(stmt)//执行sql语句
           // int row = stmt.executeUpdate();//增删改
            ResultSet set = stmt.executeQuery();//查找
            while (set.next()) {//读取数据
                //id name age gender
//              int id =set.getInt(1);//通过下标获取
//              String name = set.getString(2);
//              int age = set.getInt(3);
//              String gender = set.getString(4);
                int id = set.getInt("id");//通过字段获取
                String name = set.getString("name");
                int age = set.getInt("age");
                String gender = set.getString("gender");
                System.out.println(id+name+age+gender);
                
            }
          //释放对象 (ResultSet) ->stmt ->con
            set.close();
            stmt.close();
            con.close();
            
        }
}

这是最基本的执行,还有简化版的

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test3 {
    //
    final static    String userName = "root";
    final static    String pass = "root";
    final static    String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8";
    
    public static Connection getConnect() {
        Connection connectuin = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connectuin =DriverManager.getConnection(url, userName, pass);
       } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch(SQLException e){
            e.printStackTrace();
        }
        return connectuin;
    }
        
    public static void main(String[] args)  {
    
      Connection connection = Test3.getConnect();
      PreparedStatement stmt = null;
      ResultSet set = null;
      
     try {
        stmt = connection.prepareStatement("select name from stu where age < ?");
        stmt.setInt(1, 25);
        set =stmt.executeQuery();
        while (set.next()) {
            String name = set.getString("name");
            System.out.println(name);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }  finally{
        try {
            set.close();
            stmt.close();
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
}

上面这个完整的代码中,我们使用?是为了防止SQL注入.使用?会更明了.
这两段代码都是执行的查询语句,如果要执行增加 删除 修改 我们就使用
int row = stmt.executeUpdate();//增删改 就可以了.

DBUtile

  • 什么是DBUtile?
    我们在知道JDBC的基础上就可以很好的了解DBUtile,在 我们使用JDBC的时候会发现我们要重复写很多代码(加载驱动 获取数据库的连接 获取数据库的连接对象) 并且需要重复释放对象,所有就有了一个封装了JDBC代码的一个工具类库.
  • 需要导入相应的jar包.
    具体代码如下:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import jdbc.Test3;

//默认访问权限  只能在自己包内  
//public  全部都可以
//protected  只能在自己的子类中
//private  只能在自己类中用

public class Test1 {
    
      public static void main(String[] args) throws SQLException {
     //获取连接
         Connection con = Test3.getConnect(); // 这是调用上面封装的方面 (本人比较懒 望谅解)
         //执行sql
         QueryRunner runner = new QueryRunner();
         //1.连接  2sql  3.要存储的类型
        List list = runner.query(con, "select * from stu",new BeanListHandler(Student.class));
         //con.close();//关闭数据库
         DbUtils.close(con);//关闭数据库
         //打印结果
         System.out.println(list);
    }
}

这就是一个student类

public class Student {
    private Integer id;
      private String name;
      private String gender;
      private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", gender=" + gender
                + ", age=" + age + "]";
    }
}

c3p0

  • c3p0是一种连接池,概念与线程池类似.通俗点说;就是有一个池子 里面有好几个连接,需要用连接的时候 取走,不用 就放回.这样就可以节省创建连接的时间.
  • 导入jar包.
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Test1 {
    //线程池   
    //c3p0设置配置文件
     // 1.代码配置
     // 2. Property文件
     // xml
    public static void main(String[] args) throws SQLException {
        //作用:读xml 建立线程池       初始化连接   放入线程池
         ComboPooledDataSource dataSource = new ComboPooledDataSource();
         //获取连接
         Connection con = dataSource.getConnection();
         //正常jdbc  不需要关闭连接 c3p0回自动回收连接
PreparedStatement stmt = con.prepareStatement("select *from stu");//获取操作数据的对象(stmt)//执行sql语句
           // int row = stmt.executeUpdate();//增删改
            ResultSet set = stmt.executeQuery();//查找
            while (set.next()) {//读取数据
                int id = set.getInt("id");//通过字段获取
                String name = set.getString("name");
                int age = set.getInt("age");
                String gender = set.getString("gender");
                System.out.println(id+name+age+gender);
                
            }
          //释放对象 (ResultSet) ->stmt ->con
            set.close();
            stmt.close();
            con.close();
        }

}

下面是c3p0 与DBUtile结合的使用的代码

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import dbutiles.Student;

//c3p0 与 Dbutile一起用
public class Test2 {
    public static void main(String[] args) throws SQLException {
        //获取数据库连接池
         ComboPooledDataSource dataSource = new ComboPooledDataSource();
         //创建dbutile操作对象
        QueryRunner query = new QueryRunner(dataSource);
        //执行语句
        List list = query.query("select * from stu",new BeanListHandler(Student.class));
        System.out.println(list);
    }

}

以上纯属是一名码农小白的理解,如果有错误的地方望各位大神指正.
如果有需要jar包的本媛也可以提供哦!

你可能感兴趣的:(Java_(jdbc dbutile c3p0))