初识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 + "\t" + 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 + "\t" + 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 +"\t" + 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+"\t");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+"\t");54 }55 System.out.println();56 }57 58 }59 60 61 // 3:封装资源的释放 null stat conn62 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 }