1.新建一个Java Project 工程,并建立 四个package 包,分别为 dao(存放接口)、daoImp(存放接口实现类)、entry(存放实体类)、util(数据库工具包)java
如图所示建立一个名为JDBC的工程,结构如图所示:mysql
2.导包,链接数据库咱们须要把mysql-connector-java-5.1.7-bin.jar导入到Java项目中。如图新建一个lib用来存放外jar的包。sql
选中加入的jar包,单击右键选择Build Path 中的 Add to Build Path。数据库
3.编辑util包,建立一个class其中编辑数据库的链接、关闭数组
public class JDBCUtil { private static final String driver="com.mysql.jdbc.Driver"; private static final String url="jdbc:mysql://localhost:3306/students"; private static final String user="root"; private static final String password="root"; static{ try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection(){ try { return DriverManager.getConnection(url,user,password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void close(ResultSet rs,PreparedStatement ps,Connection con){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } }
数据库的增删改方法,大部分写法相差无几,所以咱们给他们封装一个方法,三个类型方法皆可调用。工具
/*** * DML操做(增删改) * 1.获取链接数据库对象 * 2.预处理 * 3.执行更新操做 * @param sql * @param obj */ //调用者只需传入一个sql语句,和一个Object数组。该数组存储的是SQL语句中的占位符 public static void executeUpdate(String sql,Object...obj){ Connection con = getConnection();//调用getConnection()方法链接数据库 PreparedStatement ps=null; try { ps = con.prepareStatement(sql);//预处理 for(int i=0;i<obj.length;i++){//预处理声明占位符 ps.setObject(i+1, obj[i]); } ps.executeUpdate();//执行更新操做 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ close( null, ps, con);//调用close()方法关闭资源 } }
2.查询方法ui
/*** * DQL查询 * Result获取数据集 * * @param sql * @param obj * @return */ public static List<Map<String,Object>> executeQuery(String sql,Object...obj){ Connection con = getConnection(); ResultSet rs=null; PreparedStatement ps=null; try { ps = con.prepareStatement(sql); for(int i=0;i<obj.length;i++){ ps.setObject(i+1, obj[i]); } rs = ps.executeQuery(); //new 一个空的list集合用来存放查询结果 List<Map<String ,Object>> list=new ArrayList<>(); //获取结果集的列数 int count = rs.getMetaData().getColumnCount(); //对结果集遍历每一条数据是一个Map集合,列是k,值是v while(rs.next()){ //一个空的map集合,用来存放每一行数据 Map<String, Object> map=new HashMap<String, Object>(); for(int i=0;i<count;i++){ Object ob=rs.getObject(i+1);//获取值 String key = rs.getMetaData().getColumnName(i+1);//获取k即列名 map.put(key, ob); } list.add(map); } return list; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ close(rs, ps, con); } return null; }