jdbc编程基础
jdbc是java程序连接个类型数据库的桥梁,其用法连接各数据库都差不多,用mysql为例说明。
在进行jdbc编程开始之前,需要下载驱动包,可以去maven中央仓库下载。
搜索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