数据库结构图:
第一种组合 :
只有官方驱动 mysql-connector-java-5.1.13-bin.jar
包结构:
代码:简单实现增删改查可以自己做一个配置文件工具包,见上一篇文章
1 package com.jdbc.onlyconnector; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.util.Scanner; 9 10 import org.junit.Test; 11 12 public class ConnectorTest { 13 @Test 14 public void test01() throws ClassNotFoundException, SQLException { 15 //jdbc四大参数,driver的全限命名,url,user,password 16 String driverClassName = "com.mysql.jdbc.Driver"; 17 String url = "Jdbc:mysql://localhost:3306/db2"; 18 String user = "root"; 19 String password ="123"; 20 /* 21 * public class Driver implements java.sql.Driver 22 * 获取到Driver的对象(创建驱动),com.mysql.jdbc.Driver类的内部有一个静态代码块,当类被加载时就会调用 23 * java.sql.DriverManager.registerDriver(new Driver())这个方法 24 * 该驱动实现了java内部的Driver接口,通过多态传递给驱动管理,进行底层连接 25 */ 26 Class.forName(driverClassName); 27 /* 28 * 通过传递另外三大参数和数据库取得连接,并且返回一个Connection 对象, 29 * Connection对象的数据库能够提供描述其表、所支持的 SQL 语法、存储过程、此连接功能等等的信息 30 * Connection类主要用到的方法 commit 提交上一次修改; rollback 回滚到数据库(不修改) 31 * getAutoCommit() true为自动提交,false为手动事务,默认true 32 * createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库,返回值就是一个Statement 对象 33 * prepareStatement(String sql) 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。 34 * 注意:prepareStatement extends Statement 两个都是接口 Connection也是接口 35 */ 36 Connection connection = DriverManager.getConnection(url, user, password); 37 // /* 38 // * 第一种 :开始 39 // * 调用 createStatement() 方法返回一个Statement对象 40 // * Statement类用于执行静态 SQL 语句并返回它所生成结果的对象。 41 // * Statement类主要用到的方法 42 // * boolean execute(String sql)执行给定的 SQL 语句,该语句可能返回多个结果。 43 // * ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象 ;(查数据库) 44 // * int executeUpdate(String sql) 执行给定 SQL 语句, 45 // * 该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句(如 DDL 语句); (改数据库) 46 // */ 47 // Statement statement = connection.createStatement(); 48 // /* 49 // * 增 数据insert 50 // */ 51 // String zeng = "insert into emp(eid , ename ,did) values (4,'小猪',1)"; 52 // //返回值是表中受影响的行数 53 // int empZeng = statement.executeUpdate(zeng); //返回值是1 代表1行收到影响 54 // /* 55 // * 删 数据 delete 56 // */ 57 // String shan = "delete from emp where eid = 4"; 58 // int empShan = statement.executeUpdate(shan); 59 // /* 60 // * 改 数据update 61 // */ 62 // String gai = "UPDATE emp SET ename = '小红' WHERE eid = 3 "; 63 // int empGai = statement.executeUpdate(gai); 64 // /* 65 // * 重点:查 数据 select 66 // */ 67 // String cha = "select * from emp"; 68 // /* 69 // * 返回值是ResultSet类的对象,表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 70 // * ResultSet类常用方法 71 // * boolean next() 将光标从当前位置向前移一行。 (和迭代器差不多) 72 // * int getInt(int columnIndex) 获取索引列的int类型的值 columnIndex 第一列等于1 73 // * String getString(int columnIndex) 74 // * Object getObject(int columnIndex) 75 // * Object getObject(String columnLabel) 获取此 ResultSet对象中当前行中指定列的值 76 // * (columnLabel 指定的列标签。如果未指定 SQL AS 子句,则标签是列名称 ) 77 // * String getString(String columnLabel) 获取此 ResultSet 对象的当前行中指定列的值。 78 // * int getInt(String columnLabel) 79 // * 80 // */ 81 // ResultSet empCha = statement.executeQuery(cha); 82 // if(empCha!=null) { 83 // while(empCha.next()) { 84 // System.out.println(empCha.getInt(1)); 85 // System.out.println(empCha.getString("ename")); 86 // System.out.println(empCha.getObject(3)); 87 // } 88 // } 89 ///* 90 // 输出结果: 91 //1 92 //张三 93 //1 94 //2 95 //李四 96 //2 97 //3 98 //小红 99 //1 100 // */ 101 /* 102 * 第二种 使用preparedStatement 103 */ 104 /* 105 * 查数据更加方便 好处: 106 * 1.使用占位符而不是语句拼接,可以防止注入攻击; 107 * 2.语句预编译,执行效率高; 108 */ 109 String sql = "select * from emp where eid =?"; 110 Scanner sc = new Scanner(System.in); 111 System.out.println("请输入要查找的员工id"); 112 int eid =sc.nextInt(); 113 PreparedStatement ps = connection.prepareStatement(sql); 114 //setInt(int parameterIndex, int x) parameterIndex占位符下标,第一个是1 x代表占位符的值 115 ps.setInt(1, eid); 116 //执行语句 117 ResultSet rs = ps.executeQuery(); 118 if(!rs.wasNull()) { 119 while(rs.next()) { 120 System.out.println(rs.getObject(1)); 121 System.out.println(rs.getObject(2)); 122 System.out.println(rs.getObject(3)); 123 } 124 } 125 /* 126 执行结果: 127 请输入要查找的员工id 128 1 129 1 130 张三 131 1 132 */ 133 134 } 135 }