Java_(jdbc dbutile c3p0)

JDBC

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

  • 如何使用?

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

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

数据库表.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<Student> list = runner.query(con, "select * from stu",new BeanListHandler<Student>(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<Student> list = query.query("select * from stu",new BeanListHandler<Student>(Student.class));
        System.out.println(list);
    }

}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,566评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,713评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,274评论 25 707
  • 众所周知,家用新风系统属于系统安装工程,除了在选材和设计上消费者需严格把关,安装质量更是重中之重,所谓三分靠机器,...
    再见贰哥哥阅读 333评论 0 0
  • 2007.7 我很早就起床了,起床后花了很长时间来梳洗,因为今天我将去一家很大的科技公司进行复试,在之前的两轮面试...
    叨叨小少阅读 208评论 0 0