java连接数据库

11 篇文章 0 订阅
6 篇文章 0 订阅

使用第三方jar包连接数据库

1.选用commons-dbutils-1.6.jar包

 * commons-dbutils-1.6.jar介绍
 * 可以操作jdbc连接数据库并且执行SQL语句
 * 处理返回的结果集
 * 三个核心类:
 * DbUtils   一些关闭资源的方法(安静的关闭 不用异常处理)
 * QueryRunner 执行SQL语句 并且返回你想要的结果集
 * 参数 ResultSetHandler  接口(使用实现类 想要什么结果集就传入什么该接口的实现类)
2.必要jar
mysql-connector-java-5.1.37-bin.jar
//java与数据库的连接驱动
1.创建dbinfo.properties文本文件
  写入匹配信息
  driverClass=com.mysql.jdbc.Driver
  url=jdbc:mysql://localhost:3306/myjdbc
  user=root
  password=123456
2.创建JDBCUtil类后获取文本信息连接数据库
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.SQLException;
  import java.sql.Statement;
  import java.util.ResourceBundle;

   public class JDBCUtil {
    private static String driverClass;
    private static String url;
    private static String user;
    private static String password;
    //使用静态代码块加载驱动 读取配置文件
    static {
        //使用系统类来读取配置文件
        ResourceBundle rb = ResourceBundle.getBundle("dbinfo");
        //获取文件中的数据
        driverClass=rb.getString("driverClass");
        url=rb.getString("url");
        user=rb.getString("user");
        password=rb.getString("password");
         try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        }
    }

    //获取数据库连接数据库方法
    //如果没有结果集需要关闭 直接传空就行
    public static Connection getConnection(){
        Connection connection = null;
        //让驱动加载一次

         try {
            connection = DriverManager.getConnection(url,user,password);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("连接失败");
        }
        return connection;

    }
    //关闭数据库方法
    public  static void closeAll(ResultSet resultSet,
            Statement statement,Connection connection) {

                //关闭资源前判断是否为空 防止空指针出现
                if (resultSet != null) {
                    try {
                        resultSet.close();
                    } catch (Exception e2) {
                        throw new RuntimeException("关闭失败");
                    }
                    //加快系统回收速度
                    resultSet = null;
                }
                if (statement != null) {
                    try {
                        statement.close();
                    } catch (Exception e2) {
                        throw new RuntimeException("关闭失败");
                    }
                    //加快系统回收速度
                    statement = null;
                }
                if (connection != null) {
                    try {
                        connection.close();
                    } catch (Exception e2) {
                        throw new RuntimeException("关闭失败");
                    }
                    //加快系统回收速度
                    connection = null;
                }

    }
}
3.创建Sort类 作为与表对应的 javabean实体类

public class Sort {
    private int sid;
    private String sname;
    private double sprice;
    private String sdesc;
    public Sort() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Sort(int sid, String sname, double sprice, String sdesc) {
        super();
        this.sid = sid;
        this.sname = sname;
        this.sprice = sprice;
        this.sdesc = sdesc;
    }
    @Override
    public String toString() {
        return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]";
    }
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public double getSprice() {
        return sprice;
    }
    public void setSprice(double sprice) {
        this.sprice = sprice;
    }
    public String getSdesc() {
        return sdesc;
    }
    public void setSdesc(String sdesc) {
        this.sdesc = sdesc;
    }
}

3.使用第三方commons-dbutils-1.6.jar包进行观察观察
import java.sql.Connection;
import java.sql.SQLException;

import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;

public class Demo01 {
     public static void main(String[] args) throws SQLException {
//      insert();
         //更新
         QueryRunner qr  = new QueryRunner();
         Connection connection = JDBCUtil.getConnection();
         //使用占位符传入SQL语句
         String sql = "update sort set sname=?,sprice=?,sdesc=? where sid=5";
         //多参数参数 传参方式1
         //利用数组传
         //方式2
         //直接传递参数 注意要和 占位符问号的顺序对应
         Object[] params= {"咖啡",1000,"java里的咖啡"};
         int row = qr.update(connection,sql,"咖啡",1000,"java里的咖啡");
         if (row > 0) {
            System.out.println("修改成功");
        }
         DbUtils.close(connection);//安静的关闭
    }

    private static void insert() throws SQLException {
        //插入一条数据使用QueryRunner
        QueryRunner qr = new QueryRunner();
        Connection connection = null;         
    connection = JDBCUtil.getConnection();
        String  sql = "insert into sort value(null,'显示器',5,'这是一台显示器')";
        int row = qr.update(connection, sql);
        if (row > 0) {
            System.out.println("插入成功");
        }
        DbUtils.close(connection);
    }
}
4.查询操作


   1. ArrayHandler:把结果集中的第一行数据转成对象数组。
   2. ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
   3. BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中。
   4.BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
   5. ColumnListHandler:将结果集中某一列的数据存放到List中。
   6. KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
   7. MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
   8. MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List9. ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。

public class Demo02 {
    private static final char[] Object = null;
    private static final char[] Objec = null;
    private static final java.lang.Object Value = null;
    @Test
     public void select1() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        //调用查询方法
        //传入什么容器 该类就把数据放到什么容器中给你返回
        Object[] objects = qr.query(connection, sql,new ArrayHandler());
        for(Object object : objects) {
            System.out.println(object);
        }
        DbUtils.close(connection);
    }
    //ArrayListHandler
    //查询每一条记录 放到List集合中
    //每一条记录 是一个对象数组
    @Test
    public void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection conn = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());

        for (Object[] objects : list) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println();
        }
        DbUtils.close(conn);
    }
    /*
     * BeanHandler
     * 将结果集中的第一行数据封装到一个对应的JavaBean实例中。
     * JavaBean对象规则
     * 1.成员变量私有化
     * 2.提供空参的构造方法
     * 3.提供set/get方法
     * 符合以上规则的实体类创建出来的对象
     * 就是一个JavaBean对象
     */
    @Test
    public void select3() throws SQLException{
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select  * from sort"; 
        //要把使用哪个JavaBean实体类传进去
        //类名.class
        Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
        if (sort == null) {
            System.out.println("没有该条数据");
        }
        System.out.println(sort);
    }  
    /*
     * BeanListHandler对象 
     * 将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
     */
    @Test
    public void select4() throws SQLException {
    QueryRunner qr = new QueryRunner();
    Connection conn = JDBCUtil.getConnection();
    String sql = "select * from sort";
    List<Sort> sort = qr.query(conn, sql, new BeanListHandler<>(Sort.class));
    if (sort == null) {
        System.out.println("没有该条数据");
    }
    for (Sort sort2 : sort) {
        System.out.println(sort2);
    }
    }

    /*
     * ColumnlistHandle
     * 将结果集中某一列的数据存放到List中。
     */
    @Test
    public void select5() throws SQLException {
    QueryRunner qr = new QueryRunner();
    Connection conn = JDBCUtil.getConnection();
    String sql = "select  * from sort";
    List<String> list = qr.query(conn, sql, new ColumnListHandler<String>("sname"));
         for(String string:list) {
                System.out.println(string);
         }
         DbUtils.close(conn);
    }
    /*
     * ScalarHandler
     * 获取结果集中第一行数据指定列的值,常用来进行单值查询
     */
    @Test
    public void select6() throws SQLException {
    QueryRunner qr = new QueryRunner();
    Connection conn = JDBCUtil.getConnection();
    String sql = "select avg(sid) from sort";
    BigDecimal query = qr.query(conn,sql,new ScalarHandler<BigDecimal>());
    System.out.println(query);
    DbUtils.close(conn);
    }
    /*
     * MapHandler
     * 将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
     */
    @Test
    public void select7() throws SQLException {
    QueryRunner qr = new QueryRunner();
    Connection conn = JDBCUtil.getConnection();
    String sql = "select * from sort";
     Map<String,Object> query = qr.query(conn,sql,new MapHandler());
     query.keySet();
     query.values();
     System.out.println(query.keySet());
     System.out.println(query.values());
     System.out.println(query);
        for (String key : query.keySet()) {
            System.out.println(key + "\t" + query.get(key));
        }
     DbUtils.close(conn);
    }
    /*
     * MapListHandler 
     * 将结果集中的每一行数据都封装到一个Map里,然后再存放到List
     */
    @Test
    public void select8() throws SQLException {
    QueryRunner qr = new QueryRunner();
    Connection conn = JDBCUtil.getConnection();
    String sql = "select * from sort";
     List<Map<String,Object>> query = qr.query(conn,sql,new MapListHandler());

     for (Map<String, Object> map : query) {
            for (String key : map.keySet()) {
                System.out.println(map.keySet());
            System.out.println(map.values());
            }
        }

     DbUtils.close(conn);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值