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 }
View Code

增删改查 -- 删                           

 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 }
View Code

增删改查 -- 改                           

 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 }
View Code

增删改查 -- 查                          

 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 }
View Code 

预编译 -- 防止SQL注入

什么是sql注入?

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
怎样预防SQL注入?
    使用预编译!!!   -- PreparedStatement
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 }
View Code

 

 

posted @ 2018-05-06 17:24  Jin同学  阅读(187)  评论(0)    收藏  举报