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

时间:2023-03-09 00:15:11
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实例:

 drop table user_info;
drop table group_info;
drop table contacts_info; select * from user_info
select * from group_info
select * from contacts_info delete from user_info;
delete from group_info; --创建用户信息表
create table user_info(
user_id int identity(1,1) primary key,
user_name nvarchar(30) unique not null,
user_password nvarchar(30) not null
) --创建联系人群组信息表
create table group_info(
group_id int identity(1,1) primary key,
group_name nvarchar(30),
group_state nchar(3) default '可修改',
check(group_state in ('可修改','不可改')),
user_id int,
foreign key (user_id) references user_info(user_id)
) --创建联系人信息表
create table contacts_info(
con_id int identity(1,1) primary key,
con_name nvarchar(30) not null,
con_sex nchar(1) default '男',
check(con_sex in ('男','女')),
con_age int,
con_cellphone nvarchar(30),
con_telephone nvarchar(30),
con_birth datetime,
con_email nvarchar(30),
con_static nchar(3) default '未删除',
check(con_static in ('未删除','已删除')),
group_id int,
foreign key (group_id) references group_info(group_id)
)

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类

 package com.demo1207;

 import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class JDBCFactory {
// private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
// private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl";
// private static final String USERNAME = "C##java06";
// private static final String PASSWORD = "java123"; static String DRIVER;
static String URL;
static String USERNAME;
static String PASSWORD;
static{
//只会在类第一次加载时被执行一次,适合做资源文件的读取
//加载数据库配置文件资源
Properties pro = new Properties();
//把资源读取成字节输入流
InputStream is = JDBCFactory.class.getResourceAsStream("jdbc.properties"); try {
//通过资源对象加载字节输入流
pro.load(is);
//资源对象通过key来获取对应的文件中的值,注意:静态代码块只能使用静态属性
DRIVER = pro.getProperty("jdbc.driver");
URL = pro.getProperty("jdbc.url");
USERNAME = pro.getProperty("jdbc.username");
PASSWORD = pro.getProperty("jdbc.password");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**
* 获取数据库链接
* @return 如果有异常则会返回null
*/
public static Connection getConn(){
Connection conn = null;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
} public static void closeAll(Connection conn,Statement st,ResultSet rs){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

java实例2:调用工厂类

在java类中写一个Student对象,用来封装学员信息
查询学员信息表,将结果集封装到List<Student>
提示:学员对象的时间字段用util.Date. 每个属性都要封装

  Student.java

 package com.demo1207;

 import java.util.Date;

 public class Student {
private int student_id;
private String student_name;
private String student_sex;
private int student_age;
private int class_id;
private Date birthday;
public int getStudent_id() {
return student_id;
}
public void setStudent_id(int student_id) {
this.student_id = student_id;
}
public String getStudent_name() {
return student_name;
}
public void setStudent_name(String student_name) {
this.student_name = student_name;
}
public String getStudent_sex() {
return student_sex;
}
public void setStudent_sex(String student_sex) {
this.student_sex = student_sex;
}
public int getStudent_age() {
return student_age;
}
public void setStudent_age(int student_age) {
this.student_age = student_age;
}
public int getClass_id() {
return class_id;
}
public void setClass_id(int class_id) {
this.class_id = class_id;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
} }

  JdbcTest.java

 package com.demo1207;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List; public class JdbcTest {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JDBCFactory.getConn();
System.out.println(conn); //处理sql命令的对象
st = conn.createStatement(); String sql = "insert into student_info values(sq_student.nextval,'叶挺',1,22,1,sysdate)";
//st来执行sql语句,注意executeUpdate是执行增删改的语句
st.executeUpdate(sql); //执行查询业务
String sql2 = "select * from student_info";
rs = st.executeQuery(sql2);
List<Student> list = new ArrayList<>();
while(rs.next()){
Student stu = new Student();
stu.setStudent_id(rs.getInt(1));
stu.setStudent_name(rs.getString(2));
stu.setStudent_sex(rs.getString(3));
stu.setStudent_age(rs.getInt(4));
stu.setClass_id(rs.getInt(5));
stu.setBirthday(rs.getTimestamp(6));
list.add(stu);
System.out.print(rs.getInt(1)+"\t");
System.out.print(rs.getString("student_name")+"\t");
System.out.print(rs.getString(3)+"\t");
System.out.print(rs.getInt(4)+"\t");
System.out.print(rs.getInt(5)+"\t");
System.out.println(rs.getTimestamp(6));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, st, rs);
}
}
}

java实例3:调用jdbc工厂类来验证登录

PreparedDemo.java
 package com.demo1207;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class PreparedDemo {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null; try {
conn = JDBCFactory.getConn();
String sql = "select * from user_info where username=? and pass_word=?";
ps = conn.prepareStatement(sql);
//将参数占位符赋值
ps.setString(1, "张三");
ps.setString(2, "123456"); //执行sql 和statement的执行方法一样
rs = ps.executeQuery();
if(rs.next()){
System.out.println(rs.getString(2)+"登录成功");
}else{
System.out.println("登录失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, ps, rs);
}
}
}

java实例4:调用工厂类进行增删改查

 package com.demo1207;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.Date; public class CRUDDemo {
Connection conn;
PreparedStatement ps;
ResultSet rs; public void create(){
try {
conn = JDBCFactory.getConn(); String sql = "insert into student_info values(sq_student.nextval,?,?,?,?,?)";
ps = conn.prepareStatement(sql); ps.setString(1, "田甜");
ps.setString(2, "2");
ps.setInt(3, 22);
ps.setInt(4, 1);
ps.setTimestamp(5, new Timestamp(new Date().getTime()));
ps.executeUpdate();
System.out.println("新增成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, ps, rs);
}
} public void delete(){
try {
conn = JDBCFactory.getConn(); String sql = "delete from student_info where student_id=?";
ps = conn.prepareStatement(sql); ps.setInt(1, 1);
ps.executeUpdate();
System.out.println("删除成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, ps, rs);
}
} public void update(){
try {
conn = JDBCFactory.getConn(); String sql = "update student_info set student_name=?,student_sex=?,student_age=?,class_id=?,birthday=? where student_id=?";
ps = conn.prepareStatement(sql); ps.setString(1, "哈哈");
ps.setString(2, "2");
ps.setInt(3, 28);
ps.setInt(4, 1);
ps.setTimestamp(5, new Timestamp(new Date().getTime()));
ps.setInt(6, 2);
ps.executeUpdate();
System.out.println("修改成功");
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, ps, rs);
}
} public void query(){
try {
conn = JDBCFactory.getConn(); String sql = "select * from student_info";
ps = conn.prepareStatement(sql); rs = ps.executeQuery();
while(rs.next()){
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCFactory.closeAll(conn, ps, rs);
}
}
}

作业:

一。用户管理
1.用户注册:要求用户名不能重复
2.用户登录
二。联系人组群管理
1.用户新建联系人组群:每个用户注册时都会默认新建一个名字叫“我的联系人”这么一个组群,该组群不能修改,
每个用户可以新建n个联系人组群。
2.用户修改联系组群:修改组群名字
3.用户删除组群:删除组群后,将该组的所有联系人移到默认组群“我的联系人”
三。联系人管理
1.用户新建联系人:需要指定联系人到哪个组群。联系人信息(姓名,年龄,性别,移动电话,固定电话,生日,邮箱)
2.用户修改联系人:可以修改联系人所有信息,包括组群
3.用户删除联系人:
4.查询联系人:
a.按姓名模糊查询
b.按组群查询
c.按电话号码模糊查询