初识JDBC
一.JDBC概念
jdbc 英文全称:java database connectivity ,是java访问数据库的一套规范,通俗可以理解为,java为连接数据库提供的一套类和接口
jdbc与数据库驱动的关系图:
二.jdbc简单使用
使用流程:(在使用之前需要将驱动的jar导入进去)
①:注册驱动
②:连接数据库
③:获得sql语句的执行平台
④:执行sql语句
⑤:处理结果
⑥:释放资源
执行流程图:
代码实现(数据增删改操作):
1 public class Demo13 { 2 public static void main(String[] args)throws Exception { 3 //1.注册驱动 4 /* 5 * 因为查看Driver源码发现这个类静态代码块中已经注册了驱动,我们也就没必要二次注册 6 * 注意:jdk1.6以后也可以省略注册驱动这一步,不写系统自动注册 7 * 贴上源码: 8 * static { 9 * try { 10 * java.sql.DriverManager.registerDriver(new Driver()); 11 * } catch (SQLException E) { 12 * throw new RuntimeException("Can't register driver!"); 13 * } 14 * } 15 * 16 * 17 */ 18 //DriverManager.registerDriver(new Driver()); 19 Class.forName("com.mysql.jdbc.Driver"); 20 21 22 //2.连接数据库 23 /* 24 * 参数一: 连接ip port 数据库名称 固定格式 25 * 参数二:数据库用户名 26 * 参数三:数据库密码 27 */ 28 Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root"); 29 //3.获得sql语句执行平台 30 Statement stat= con.createStatement(); 31 //4.执行sql语句 32 /* 33 * executeUpdate()方法是用来执行增删改语句的 34 * 参数是sql语句 35 * 返回值是个int类型的,执行成功几条语句 36 */ 37 int result= stat.executeUpdate("insert into car values(null,'宝马')"); 38 //5.处理结果 39 /* 40 * 在这里结果的处理其实就是需要看业务逻辑了,一般是个判断这条语句执行成功了没有 41 */ 42 if(result>0){ 43 System.out.println("执行成功"); 44 }else{ 45 System.out.println("执行失败"); 46 } 47 //6.释放资源 48 stat.close(); 49 con.close(); 50 } 51 52 }
下面来研究查询操作的代码:
1 public class Demo03JDBC { 2 public static void main(String[] args) throws ClassNotFoundException, SQLException { 3 // 1:注册驱动 4 Class.forName("com.mysql.jdbc.Driver"); 5 // 2:获取和服务器的连接 6 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04db", "root", "123"); 7 // 3:向服务器发送sql指令 8 // 3.1 获取Statement接口的实现类对象 9 Statement stat = conn.createStatement(); 10 // 3.2 执行sql (查询数据) 11 ResultSet rs = stat.executeQuery("select * from product"); 12 13 // 4:处理返回的结果集(知道列名和列的类型) 14 /* 15 while (rs.next()) {// 判断有没有下一行数据 16 int cid = rs.getInt("cid"); // 取出cid列 17 String cname = rs.getString("cname"); // 取出came列 18 System.out.println(cid + " " + cname); 19 } 20 */ 21 //处理返回的结果集(不知道列名,知道列的类型):通过列的索引来获取 22 /* 23 while (rs.next()) {// 判断有没有下一行数据 24 int cid = rs.getInt(1); // 取出第一列 25 String cname = rs.getString(2); // 取出第二列 26 System.out.println(cid + " " + cname); 27 } 28 */ 29 //处理返回的结果集(不知道列名,不知道列的类型):通过列的索引来获取 30 /* 31 while (rs.next()) {// 判断有没有下一行数据 32 Object obj1 = rs.getObject(1); 33 Object obj2 = rs.getObject(2); 34 System.out.println(obj1 +" " + obj2); 35 } 36 */ 37 //处理返回的结果集(不知道列名,不知道列的类型,不知道多少列):通过列的索引来获取 38 ResultSetMetaData metaData = rs.getMetaData(); //获取表的原始数据 39 //获取列数 40 int count = metaData.getColumnCount(); 41 while(rs.next()){ //13次 42 for (int i = 1; i <=count; i++) { //4次 43 Object obj = rs.getObject(i); 44 System.out.print(obj+" "); 45 } 46 System.out.println(); 47 } 48 49 // 5:释放资源 50 rs.close(); 51 stat.close(); 52 conn.close(); 53 } 54 }
简单封装的jdbc工具类:(主要是体会思想)
1 /* 2 * 此文件用于封装JDBC的常用功能: 3 * 4 * 1:封装驱动的注册 5 * 2:封装数据库的连接 6 * 3:封装资源的释放 7 * 8 * JDK1.6之后,Java会自动注册驱动 9 */ 10 public class MyJDBCUtils { 11 private static String classDriverName = null; 12 private static String url = null; 13 private static String username = null; 14 private static String password = null; 15 // 1:封装驱动的注册 16 /* 17 * 由于驱动的注册只需要执行一次,所以可以将该代码封装在静态代码块 18 * 由于解析Properties只需要解析一次,所以还是将解析的代码放在静态代码块 19 */ 20 static { 21 try { 22 //1:创建Properties对象 23 Properties prop = new Properties(); 24 //2:将文件的数据读取到集合 25 prop.load(new FileInputStream("jdbc.properties")); 26 //3:获取集合的数据 27 classDriverName = prop.getProperty("driverClassName"); 28 url = prop.getProperty("url"); 29 username = prop.getProperty("username"); 30 password = prop.getProperty("password"); 31 32 33 Class.forName(classDriverName); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 39 // 2:封装数据库的连接 40 public static Connection getConnection() throws SQLException { 41 Connection conn = DriverManager.getConnection(url, username, password); 42 return conn; 43 } 44 45 //封装方法:处理结果集 46 public static void printResultSet(ResultSet rs) throws SQLException{ 47 ResultSetMetaData metaData = rs.getMetaData(); 48 int count = metaData.getColumnCount(); 49 50 while(rs.next()){ 51 for (int i = 1; i <= count; i++) { 52 Object obj = rs.getObject(i); 53 System.out.print(obj+" "); 54 } 55 System.out.println(); 56 } 57 58 } 59 60 61 // 3:封装资源的释放 null stat conn 62 public static void closeAll(ResultSet rs, Statement stat, Connection conn) { 63 if (rs != null) { 64 try { 65 rs.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 } 70 if (stat != null) { 71 try { 72 stat.close(); 73 } catch (SQLException e) { 74 e.printStackTrace(); 75 } 76 } 77 if (conn != null) { 78 try { 79 conn.close(); 80 } catch (SQLException e) { 81 e.printStackTrace(); 82 } 83 } 84 } 85 }