1、原生jdbc连接oracle数据库简单介绍

Wesley13
• 阅读 367

一。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
提示:学员对象的时间字段用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.按电话号码模糊查询
点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
Jacquelyn38 Jacquelyn38
1年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
1年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
1年前
cobol学习之十数据库的增删改查模板
这次连接数据库使用的是ODBC连接access数据库,里面主要是一个增删改查的模板备份,方便以后查询。000001IDENTIFICATIONDIVISION.000002PROGRAMID.SAMPLEDB2.00
Wesley13 Wesley13
1年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为