1、原生jdbc連接oracle數據庫簡單介紹


一。jbdc的常用API
1.Connection:數據庫的鏈接對象
2.statement:數據庫sql執行對象
3.preparedStatment:sql的預編譯處理對象,是statement子接口
4.resultset:返回查詢的結果集

二。jdbc開發步驟
1.在項目中加入驅動jar包
2.寫jdbc鏈接代碼
注意:日期對象的處理。從結果集中獲取時間是用getTimestamp(),得到的是Timestamp對象(時間戳)
Timestamp是util.Date的子類。他們之間的互相轉換是:
util.Date = Timestamp直接轉換
Timestamp = new TimeStamp(util.Date.getTime());

三。工廠模式
1.工廠類,專門用來生產某一個對象的實例

四。preparedStatment 預編譯sql命令接口
1.會對sql語句進行編譯檢查,可以用參數占位符的方式編寫sql語句
2.作用:比普通statement接口執行效率更高。可以防止sql注入的侵入

 

  SQL實例:

 1 drop table user_info;
 2 drop table group_info;
 3 drop table contacts_info;
 4 
 5 select * from user_info
 6 select * from group_info
 7 select * from contacts_info
 8 
 9 delete from user_info;
10 delete from group_info;
11 
12 
13 --創建用戶信息表
14 create table user_info(
15     user_id int identity(1,1) primary key,
16     user_name nvarchar(30) unique not null,
17     user_password nvarchar(30) not null
18     )
19     
20 --創建聯系人群組信息表
21 create table group_info(
22     group_id int identity(1,1) primary key,
23     group_name nvarchar(30),
24     group_state nchar(3) default '可修改',
25     check(group_state in ('可修改','不可改')),
26     user_id int,
27     foreign key (user_id) references user_info(user_id)
28     )
29     
30 --創建聯系人信息表
31 create table contacts_info(
32     con_id int identity(1,1) primary key,
33     con_name nvarchar(30) not null,
34     con_sex nchar(1) default '',
35     check(con_sex in ('','')),
36     con_age int,
37     con_cellphone nvarchar(30),
38     con_telephone nvarchar(30),
39     con_birth datetime,
40     con_email nvarchar(30),
41     con_static nchar(3) default '未刪除',
42     check(con_static in ('未刪除','已刪除')),
43     group_id int,
44     foreign key (group_id) references group_info(group_id)
45     )

 

java實例1:創建jdbc工廠類

  jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=C##java06
jdbc.password=java123

    JDBCFactory.java類

 1 package com.demo1207;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.sql.Connection;
 6 import java.sql.DriverManager;
 7 import java.sql.ResultSet;
 8 import java.sql.SQLException;
 9 import java.sql.Statement;
10 import java.util.Properties;
11 
12 public class JDBCFactory {
13  //    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
14 //    private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
15 //    private static final String USERNAME = "C##java06";
16 //    private static final String PASSWORD = "java123";
17 
18     static String DRIVER;
19     static String URL;
20     static String USERNAME;
21     static String PASSWORD;
22     static{
23         //只會在類第一次加載時被執行一次,適合做資源文件的讀取
24         //加載數據庫配置文件資源
25         Properties pro = new Properties();
26         //把資源讀取成字節輸入流
27         InputStream is = JDBCFactory.class.getResourceAsStream("jdbc.properties");
28         
29         try {
30             //通過資源對象加載字節輸入流
31             pro.load(is);
32             //資源對象通過key來獲取對應的文件中的值,注意:靜態代碼塊只能使用靜態屬性
33             DRIVER = pro.getProperty("jdbc.driver");
34             URL = pro.getProperty("jdbc.url");
35             USERNAME = pro.getProperty("jdbc.username");
36             PASSWORD = pro.getProperty("jdbc.password");
37         } catch (IOException e) {
38             // TODO Auto-generated catch block
39             e.printStackTrace();
40         }
41     }
42     
43     /**
44      * 獲取數據庫鏈接
45      * @return 如果有異常則會返回null
46      */
47     public static Connection getConn(){
48         Connection conn = null;
49         try {
50             Class.forName(DRIVER);
51             conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55         return conn;
56     }
57     
58     public static void closeAll(Connection conn,Statement st,ResultSet rs){
59         if(conn!=null){
60             try {
61                 conn.close();
62             } catch (SQLException e) {
63                 e.printStackTrace();
64             }
65         }
66         if(st!=null){
67             try {
68                 st.close();
69             } catch (SQLException e) {
70                 e.printStackTrace();
71             }
72         }
73         if(rs!=null){
74             try {
75                 rs.close();
76             } catch (SQLException e) {
77                 // TODO Auto-generated catch block
78                 e.printStackTrace();
79             }
80         }
81     }
82 }

java實例2:調用工廠類

在java類中寫一個Student對象,用來封裝學員信息
查詢學員信息表,將結果集封裝到List<Student>
提示:學員對象的時間字段用util.Date. 每個屬性都要封裝

  Student.java

 1 package com.demo1207;
 2 
 3 import java.util.Date;
 4 
 5 public class Student {
 6     private int student_id;
 7     private String student_name;
 8     private String student_sex;
 9     private int student_age;
10     private int class_id;
11     private Date birthday;
12     public int getStudent_id() {
13         return student_id;
14     }
15     public void setStudent_id(int student_id) {
16         this.student_id = student_id;
17     }
18     public String getStudent_name() {
19         return student_name;
20     }
21     public void setStudent_name(String student_name) {
22         this.student_name = student_name;
23     }
24     public String getStudent_sex() {
25         return student_sex;
26     }
27     public void setStudent_sex(String student_sex) {
28         this.student_sex = student_sex;
29     }
30     public int getStudent_age() {
31         return student_age;
32     }
33     public void setStudent_age(int student_age) {
34         this.student_age = student_age;
35     }
36     public int getClass_id() {
37         return class_id;
38     }
39     public void setClass_id(int class_id) {
40         this.class_id = class_id;
41     }
42     public Date getBirthday() {
43         return birthday;
44     }
45     public void setBirthday(Date birthday) {
46         this.birthday = birthday;
47     }
48     
49     
50 }

  JdbcTest.java

 1 package com.demo1207;
 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 import java.util.ArrayList;
 9 import java.util.List;
10 
11 public class JdbcTest {
12     public static void main(String[] args) {
13         Connection conn = null;
14         Statement st = null;
15         ResultSet rs = null;
16         try {
17             conn = JDBCFactory.getConn();
18             System.out.println(conn);
19             
20             //處理sql命令的對象
21             st = conn.createStatement();
22             
23             String sql = "insert into student_info values(sq_student.nextval,'葉挺',1,22,1,sysdate)";
24             //st來執行sql語句,注意executeUpdate是執行增刪改的語句
25             st.executeUpdate(sql);
26             
27             //執行查詢業務
28             String sql2 = "select * from student_info";
29             rs = st.executeQuery(sql2);
30             List<Student> list = new ArrayList<>();
31             while(rs.next()){
32                 Student stu = new Student();
33                 stu.setStudent_id(rs.getInt(1));
34                 stu.setStudent_name(rs.getString(2));
35                 stu.setStudent_sex(rs.getString(3));
36                 stu.setStudent_age(rs.getInt(4));
37                 stu.setClass_id(rs.getInt(5));
38                 stu.setBirthday(rs.getTimestamp(6));
39                 list.add(stu);
40                 System.out.print(rs.getInt(1)+"\t");
41                 System.out.print(rs.getString("student_name")+"\t");
42                 System.out.print(rs.getString(3)+"\t");
43                 System.out.print(rs.getInt(4)+"\t");
44                 System.out.print(rs.getInt(5)+"\t");
45                 System.out.println(rs.getTimestamp(6));
46             }
47         } catch (Exception e) {
48             e.printStackTrace();
49         } finally {
50             JDBCFactory.closeAll(conn, st, rs);
51         }
52     }
53 }

java實例3:調用jdbc工廠類來驗證登錄

PreparedDemo.java
 1 package com.demo1207;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 
 7 public class PreparedDemo {
 8     public static void main(String[] args) {
 9         Connection conn = null;
10         PreparedStatement ps = null;
11         ResultSet rs = null;
12         
13         try {
14             conn = JDBCFactory.getConn();
15             String sql = "select * from user_info where username=? and pass_word=?";
16             ps = conn.prepareStatement(sql);
17             //將參數占位符賦值
18             ps.setString(1, "張三");
19             ps.setString(2, "123456");
20             
21             //執行sql 和statement的執行方法一樣
22             rs = ps.executeQuery();
23             if(rs.next()){
24                 System.out.println(rs.getString(2)+"登錄成功");
25             }else{
26                 System.out.println("登錄失敗");
27             }
28         } catch (Exception e) {
29             e.printStackTrace();
30         } finally {
31             JDBCFactory.closeAll(conn, ps, rs);
32         }
33     }
34 }

java實例4:調用工廠類進行增刪改查

 1 package com.demo1207;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.Timestamp;
 7 import java.util.Date;
 8 
 9 public class CRUDDemo {
10     Connection conn;
11     PreparedStatement ps;
12     ResultSet rs;
13     
14     public  void create(){
15         try {
16             conn = JDBCFactory.getConn();
17             
18             String sql = "insert into student_info values(sq_student.nextval,?,?,?,?,?)";
19             ps = conn.prepareStatement(sql);
20             
21             ps.setString(1, "田甜");
22             ps.setString(2, "2");
23             ps.setInt(3, 22);
24             ps.setInt(4, 1);
25             ps.setTimestamp(5, new Timestamp(new Date().getTime()));
26             ps.executeUpdate();
27             System.out.println("新增成功");
28         } catch (Exception e) {
29             e.printStackTrace();
30         } finally {
31             JDBCFactory.closeAll(conn, ps, rs);
32         }
33     }
34     
35     public void delete(){
36         try {
37             conn = JDBCFactory.getConn();
38             
39             String sql = "delete from student_info where student_id=?";
40             ps = conn.prepareStatement(sql);
41             
42             ps.setInt(1, 1);
43             ps.executeUpdate();
44             System.out.println("刪除成功");
45         } catch (Exception e) {
46             e.printStackTrace();
47         } finally {
48             JDBCFactory.closeAll(conn, ps, rs);
49         }
50     }
51     
52     public void update(){
53         try {
54             conn = JDBCFactory.getConn();
55             
56             String sql = "update student_info set student_name=?,student_sex=?,student_age=?,class_id=?,birthday=? where student_id=?";
57             ps = conn.prepareStatement(sql);
58             
59             ps.setString(1, "哈哈");
60             ps.setString(2, "2");
61             ps.setInt(3, 28);
62             ps.setInt(4, 1);
63             ps.setTimestamp(5, new Timestamp(new Date().getTime()));
64             ps.setInt(6, 2);
65             ps.executeUpdate();
66             System.out.println("修改成功");
67         } catch (Exception e) {
68             e.printStackTrace();
69         } finally {
70             JDBCFactory.closeAll(conn, ps, rs);
71         }
72     }
73     
74     public void query(){
75         try {
76             conn = JDBCFactory.getConn();
77             
78             String sql = "select * from student_info";
79             ps = conn.prepareStatement(sql);
80             
81             rs = ps.executeQuery();
82             while(rs.next()){
83                 System.out.println();
84             }
85         } catch (Exception e) {
86             e.printStackTrace();
87         } finally {
88             JDBCFactory.closeAll(conn, ps, rs);
89         }
90     }
91 }

 

作業:

一。用戶管理
1.用戶注冊:要求用戶名不能重復
2.用戶登錄
二。聯系人組群管理
1.用戶新建聯系人組群:每個用戶注冊時都會默認新建一個名字叫“我的聯系人”這么一個組群,該組群不能修改,
                每個用戶可以新建n個聯系人組群。
2.用戶修改聯系組群:修改組群名字
3.用戶刪除組群:刪除組群后,將該組的所有聯系人移到默認組群“我的聯系人”
三。聯系人管理
1.用戶新建聯系人:需要指定聯系人到哪個組群。聯系人信息(姓名,年齡,性別,移動電話,固定電話,生日,郵箱)
2.用戶修改聯系人:可以修改聯系人所有信息,包括組群
3.用戶刪除聯系人:
4.查詢聯系人:
    a.按姓名模糊查詢
    b.按組群查詢
    c.按電話號碼模糊查詢

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM