jdbc编程

jdbc编程基础

jdbc是java程序连接个类型数据库的桥梁,其用法连接各数据库都差不多,用mysql为例说明。

在进行jdbc编程开始之前,需要下载驱动包,可以去maven中央仓库下载。

https://mvnrepository.com/ 

搜索mysql的第一个就是的。

选择5.x的版本。

然后在eclipse里面导入jia包。

先试着编写一个简单的jdbc连接的工具类,然后实现对jdbc数据库的增删改查的功能。

jdbc的工具类

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

public class  JDBCUtils {
    //数据库连接信息
    private static String URL="jdbc:mysql://10.0.0.11:3306/demo?"
            + "useUnicode=true&characterEncoding=utf8&useSSL=true";
    private static String DRIVER="com.mysql.jdbc.Driver";
    private static String USER="root";
    private static String PASSWORD="admin.123";
    
    
    //通过反射加载类文件
    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            
            e.printStackTrace();
        }
    }
    
    public static Connection  getConnection() {
        try {
            return DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        return null;
    }
    
    public static void close(Connection conn) {
        if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                
                e.printStackTrace();
            }
        }
    }
    
}

jdbc增加数据

package com.liqh.JdbcTest;

import java.sql.Connection;
import java.sql.PreparedStatement;
import com.liqh.utils.JDBCUtils;

/**
 * 
 * @author liqh
 * @version 创建时间:2019年5月24日 下午12:20:36
 * @Description: TODO
 */
public class JdbcTestDemo01 {
    public static boolean insertEmp() throws Exception {
        PreparedStatement pst = null;
        Connection conn = JDBCUtils.getConnection();
        String sql = "INSERT INTO EMP VALUES  
" + "        (1001, 'MILLER', 'CLERK',     7782,  
"
                + "        DATE_FORMAT(SYSDATE(), '%Y-%m-%d'), 13000, NULL, 10); ";
        pst = conn.prepareStatement(sql);
        int row = pst.executeUpdate();
        JDBCUtils.close(conn);
        return row > 0;
    }

    public static void main(String[] args) {
        try {
            if (insertEmp()) {
                System.out.println("插入数据成功");

            } else {
                System.out.println("插入数据失败");
            }

        } catch (Exception e) {

            e.printStackTrace();
        }
    }

}

jdbc修改数据并实现事务的功能

import java.sql.Connection;
import java.sql.PreparedStatement;
import com.liqh.utils.JDBCUtils;

/**
 * 
 * @author liqh
 * @version 创建时间:2019年5月24日 下午12:20:36
 * @Description: TODO
 */
public class JdbcTestDemo02 {
    public static boolean insertEmp(double money) throws Exception {
        Connection conn = JDBCUtils.getConnection();
        //取消自动提交事务
        conn.setAutoCommit(false);
        boolean falg=true;
        String sql1 ="UPDATE emp SET deposit=1000-"+money+" WHERE ename='SMITH';";
        String sql2 ="UPDATE emp SET deposit=1000+"+money+" WHERE ename='ALLEN';";
        try {
            PreparedStatement pst1 = conn.prepareStatement(sql1);
            PreparedStatement pst2 = conn.prepareStatement(sql2);
            pst1.executeUpdate();
            pst2.executeUpdate();
            //提交事务
            conn.commit();
        } catch (Exception e) {
            falg=false;
            conn.rollback();
            e.printStackTrace();
        }
        finally {
            JDBCUtils.close(conn);
        }
        return falg;
    }

    public static void main(String[] args) {
        try {
            insertEmp(200);
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }

}

jdbc删除一条数据和删除多条数据

package com.liqh.JdbcTest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;

import com.liqh.utils.JDBCUtils;

/**
* 
* @author liqh
* @version 创建时间:2019年5月24日 下午3:36:32
* @Description: TODO
*/
public class JdbcTestDemo03 {
    static boolean falg=false;
/**
 *     
* @Title: deletebatch  
* @Description: 通过id删除多条数据 
* @param @param empnos
* @param @return
* @param @throws Exception    参数  
* @return boolean    返回类型  
* @throws
 */
public static boolean deletebatch(Set<Integer> empnos) throws Exception {
        //jdbc工具类得到connection对象
        Connection conn = JDBCUtils.getConnection();
        StringBuffer sql = new StringBuffer("delete from emp where empno in (");
        try {
            for (Integer empno : empnos) {
                sql.append(empno+",");
            }
            //删除最后一个逗号
            sql.delete(sql.length()-1, sql.length());
            sql.append(")");
//            conn.setAutoCommit(false);
            //预编译对象编译sql语句,将sql转化为字符串
            PreparedStatement pst = conn.prepareStatement(sql.toString());
            //执行更新操作
            pst.executeUpdate();
            //事务提交
//            conn.commit();
            falg=true;
        } catch (SQLException e) {
            falg=false;
            //事务回滚
            e.printStackTrace();
        }
        return falg;    
    }
    /**
     * 
    * @Title: deleteEmp  
    * @Description: 通过id删除单条数据  
    * @param @param id
    * @param @return
    * @param @throws Exception    参数  
    * @return boolean    返回类型  
    * @throws
     */
    public static boolean deleteEmp(double id) throws Exception {
        
        //jdbc工具类得到connection对象
        Connection conn = JDBCUtils.getConnection();
        String sql="delete from emp where empno="+id+"";
        try {
            //预编译对象编译sql语句
            PreparedStatement pst = conn.prepareStatement(sql);
            //执行更新操作
            pst.executeUpdate();

            falg=true;
        } catch (SQLException e) {
            falg=false;
            e.printStackTrace();
        }finally {
            JDBCUtils.close(conn);
        }
        return falg;    
    }
    
    public static void main(String[] args) throws Exception {
    //    System.out.println(deleteEmp(1001));
        Set<Integer> empnos =new HashSet<>();
        empnos.add(7900);
        empnos.add(7876);
        System.out.println(deletebatch(empnos));
    }

}

jdbc查询单条和多条数据

package com.liqh.JdbcTest;

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


import com.liqh.utils.JDBCUtils;

/**
 * 
 * @author liqh
 * @version 创建时间:2019年5月24日 下午12:20:36
 * @Description: jdbc查询数据
 */
public class JdbcTestDemo04 {
    /**
     * 
    * @Title: selectById  
    * @Description: TODO(这里用一句话描述这个方法的作用)  
    * @param @param id    参数  
    * @return void    返回类型  
    * @throws
     */
    public static void selectById(Integer id) {
        Connection conn = JDBCUtils.getConnection();
        String sql="SELECT empno,ename,job,sal,hiredate FROM emp WHERE empno='"+id+"';";
        try {
            PreparedStatement pts = conn.prepareStatement(sql);
            ResultSet resultSet = pts.executeQuery();
            if (resultSet.next()) {
                System.out.println("个人编号:"+resultSet.getObject("empno")+"	姓名:"+resultSet.getObject("ename")
                +"	工作:"+resultSet.getObject("job")+"	工资:"+resultSet.getObject("sal")+"	入职日期:"+resultSet.getObject("hiredate"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(conn);
        }
    }
    /**
     * 
    * @Title: selectSplitAll  
    * @Description: jdbc where条件分页查询所有信息
    * @param @param value
    * @param @param cp
    * @param @param ls
    * @param @throws Exception    参数  
    * @return void    返回类型  
    * @throws
     */
    public static void selectSplitAll(String value,Integer cp,Integer ls) throws Exception {
        ResultSet resultSet=null;
        PreparedStatement pts=null;
        Connection conn = JDBCUtils.getConnection();
        //分页查询的sql语句
        String sql="SELECT empno,ename,job,sal,hiredate FROM emp where ename LIKE '%"+value+"%'"
                        + "LIMIT "+(cp-1)*ls+","+ls+";";
        System.out.println(sql);
        try {
            pts = conn.prepareStatement(sql);
            resultSet = pts.executeQuery();
            while(resultSet.next()) {
                System.out.println("个人编号:"+resultSet.getObject("empno")+"	姓名:"+resultSet.getObject("ename")
                +"	工作:"+resultSet.getObject("job")+"	工资:"+resultSet.getObject("sal")+"	入职日期:"+resultSet.getObject("hiredate"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            resultSet.close();
            pts.close();
            JDBCUtils.close(conn);
        }
    }
    public static void main(String[] args) throws Exception {
//        selectById(7369);
        selectSplitAll("l", 1, 3);
        
    }
}

结果

SELECT empno,ename,job,sal,hiredate FROM emp where ename LIKE '%l%'LIMIT 0,3;
个人编号:7499    姓名:ALLEN    工作:SALESMAN    工资:1600.0    入职日期:1981-02-20
个人编号:7698    姓名:BLAKE    工作:MANAGER    工资:2850.0     入职日期:1981-03-01
个人编号:7782    姓名:CLARK    工作:MANAGER    工资:2450.0     入职日期:1981-07-09
原文地址:https://www.cnblogs.com/lqhhome/p/10919929.html