JDBC
准备工作 -- 导入jar包
使用JDBC的jar包在安装oracle的时候就已经有了,只需要找到oracle的安装目录,通过 product\11.2.0\dbhome_1\jdbc\lib 路径找到所需要的jar包,将它复制到项目即可
在 lib 目录下会有很多jar包,选中 ojdbc6.jar 即可
将该jar报复制到项目中的 lib 目录下即可
之后将该jar包Build Path之后就可以使用了
导入后项目中会多出一列,这里面就是已经编译好的class文件,后续会用到
开始使用 -- 最基本的链接测试
1. 加载类驱动
Class.forName(String qd);
括号里面的字符串qd表示驱动类的位置,如下图
找到 oracle.jdbc.driver 包里面找到 OracleDriver.class,将其路径复制后添加到class.forName()里面就可以了,注意后面的 .class
最终结果是:Class.forName("oracle.jdbc.driver.OracleDriver");
2. 建立连接
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123");
这里面一共有3个参数:
参数一: jdbc:oracle:thin:@数据库所在的电脑的IP地址:数据库端口号:要连接的数据库名称
参数二:用户名
参数三:该用户名对应的密码
3. 建立sql语句发送器
Statement stmt = conn.createStatement();
4. 发送sql语句
String sql = "INSERT INTO test2 VALUES ('ERIC', 82)";
int result = stmt.executeUpdate(sql); // 该语句会返回一个数字,0表示操作失败,1表示操作成功
5. So,接下来项数据库插入一条数据试试
1 package Connect; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 /** 9 * @Author: Mr King 10 * @Date: 2018年4月14日 11 * @Time: 下午10:12:51 12 */ 13 public class AddTest { 14 public static void main(String[] args) { 15 Connection conn = null; 16 Statement stmt = null; 17 try { 18 // [1] 加载驱动 19 Class.forName("oracle.jdbc.driver.OracleDriver"); 20 // [2] 建立连接 21 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123"); 22 // [3] 建立sql语句发送器 23 stmt = conn.createStatement(); 24 // [4] 将sql语句发送 25 String sql = "INSERT INTO test2 VALUES ('ERIC', 82)"; 26 int result = stmt.executeUpdate(sql); 27 if(result > 0){ 28 System.out.println("插入成功"); 29 }else{ 30 System.out.println("插入失败"); 31 } 32 } catch (ClassNotFoundException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } catch (SQLException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 }finally{ 39 try { 40 if(stmt != null){ 41 stmt.close(); 42 } 43 if(conn != null){ 44 conn.close(); 45 } 46 } catch (SQLException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } 50 } 51 } 52 }
增删改查 -- 增

1 package Connect; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 /** 9 * @Author: Mr King 10 * @Date: 2018年4月14日 11 * @Time: 下午10:12:51 12 */ 13 public class AddTest { 14 public static void main(String[] args) { 15 Connection conn = null; 16 Statement stmt = null; 17 try { 18 // [1] 加载驱动 19 Class.forName("oracle.jdbc.driver.OracleDriver"); 20 // [2] 建立连接 21 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123"); 22 // [3] 建立sql语句发送器 23 stmt = conn.createStatement(); 24 // [4] 将sql语句发送 25 String sql = "INSERT INTO test2 VALUES ('ERIC', 82)"; 26 int result = stmt.executeUpdate(sql); 27 if(result > 0){ 28 System.out.println("插入成功"); 29 }else{ 30 System.out.println("插入失败"); 31 } 32 } catch (ClassNotFoundException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } catch (SQLException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 }finally{ 39 try { 40 if(stmt != null){ 41 stmt.close(); 42 } 43 if(conn != null){ 44 conn.close(); 45 } 46 } catch (SQLException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } 50 } 51 } 52 }
增删改查 -- 删

1 package Connect; 2 3 import java.sql.Connection; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 import BaseDao.BaseDao; 8 9 /** 10 * @Author: Mr King 11 * @Date: 2018年4月14日 12 * @Time: 下午7:51:56 13 */ 14 public class DeleteTest { 15 public static void main(String[] args) throws SQLException { 16 // 获取连接 17 Connection conn = BaseDao.getConnection(); 18 // 创建sql语句发送器 19 Statement stmt = conn.createStatement(); 20 // 向数据库发送受影响的行数 21 String sql = "DELETE test2 WHERE AGE=26 AND USERNAME='Sam'"; 22 int result = stmt.executeUpdate(sql); 23 if(result > 0){ 24 System.out.println("删除成功"); 25 }else{ 26 System.out.println("删除失败"); 27 } 28 29 30 // 关闭 31 stmt.close(); 32 conn.close(); 33 } 34 }
增删改查 -- 改

1 package Connect; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 8 /** 9 * @Author: Mr King 10 * @Date: 2018年4月14日 11 * @Time: 下午10:00:22 12 */ 13 public class UpdateTest { 14 public static void main(String[] args) throws ClassNotFoundException, SQLException { 15 // [1] 加载驱动 16 Class.forName("oracle.jdbc.driver.OracleDriver"); 17 // [2] 建立连接 18 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123"); 19 // [3] 创建sql语句发送器 20 Statement stmt = conn.createStatement(); 21 22 // [4] 向数据库发送sql语句 23 String sql = "UPDATE test2 SET USERNAME='Tom' WHERE AGE=26"; 24 int result = stmt.executeUpdate(sql); 25 if(result > 0){ 26 System.out.println("修改成功"); 27 }else{ 28 System.out.println("修改失败"); 29 } 30 } 31 }
增删改查 -- 查

1 package Connect; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 9 /** 10 * @Author: Mr King 11 * @Date: 2018年4月14日 12 * @Time: 下午10:23:21 13 */ 14 public class CheckTest { 15 public static void main(String[] args){ 16 Connection conn = null; 17 Statement stmt = null; 18 ResultSet rs = null; 19 try { 20 // [1] 加载驱动 21 Class.forName("oracle.jdbc.driver.OracleDriver"); 22 // [2] 建立连接 23 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123"); 24 // [3] 建立sql语句发送器 25 stmt = conn.createStatement(); 26 // [4] 发送sql语句并处理结果 27 String sql = "SELECT * FROM test2"; 28 rs = stmt.executeQuery(sql); 29 while(rs.next()){ 30 String user_name = rs.getString("USERNAME"); 31 int age = rs.getInt("AGE"); 32 System.out.println(user_name + "\t" + age); 33 } 34 } catch (ClassNotFoundException e) { 35 // TODO Auto-generated catch block 36 e.printStackTrace(); 37 } catch (SQLException e) { 38 // TODO Auto-generated catch block 39 e.printStackTrace(); 40 }finally{ 41 try{ 42 if(conn != null){ 43 conn.close(); 44 } 45 if(stmt != null){ 46 stmt.close(); 47 } 48 if(rs != null){ 49 rs.close(); 50 } 51 }catch(Exception e){ 52 e.printStackTrace(); 53 } 54 } 55 56 } 57 }
预编译 -- 防止SQL注入
什么是sql注入?
String sql = "SELECT * FROM test WHERE USERNAME=? AND AGE=?"; // ?表示占位符 PreparedStatement pstmt = conn.prepareStatement(sql); // 给占位符赋值 pstmt.setString(1, "timo"); // 1表示第一个占位符 pstmt.setString(2, "18"); // 获取结果 ResultSet rs = pstmt.executeQuery();
举个栗子

1 package prepared; 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.sql.Statement; 9 import java.util.Scanner; 10 11 /** 12 * @Author: Mr King 13 * @Date: 2018年4月15日 14 * @Time: 下午11:29:47 15 */ 16 public class PreparedLogin { 17 public static void main(String[] args) { 18 Scanner sc = new Scanner(System.in); 19 System.out.println("请输入用户名:"); 20 String name = sc.nextLine(); 21 System.out.println("请输入年纪:"); 22 String age = sc.nextLine(); 23 24 Connection conn = null; 25 PreparedStatement pstmt = null; 26 ResultSet rs = null; 27 try { 28 // [1] 加载驱动 29 Class.forName("oracle.jdbc.driver.OracleDriver"); 30 // [2] 获取连接 31 conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydatabase", "scott", "123"); 32 // [3] 创建sql语句发送器并发送 33 String sql = "SELECT * FROM test2 WHERE USERNAME=? AND AGE=?"; // 占位符 34 pstmt = conn.prepareStatement(sql); 35 // 给占位符赋值 36 pstmt.setString(1, name); 37 pstmt.setString(2, age); 38 39 // [4] 获取并处理结果 40 rs = pstmt.executeQuery(); 41 if(rs.next()){ 42 System.out.println("登录成功"); 43 }else{ 44 System.out.println("登录失败"); 45 } 46 } catch (ClassNotFoundException e) { 47 // TODO Auto-generated catch block 48 e.printStackTrace(); 49 } catch (SQLException e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 }finally{ 53 try{ 54 if(rs != null){ 55 rs.close(); 56 } 57 if(pstmt != null){ 58 pstmt.close(); 59 } 60 if(conn != null){ 61 conn.close(); 62 } 63 }catch(Exception e){ 64 e.printStackTrace(); 65 } 66 } 67 } 68 }