一。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.按电话号码模糊查询

1、原生jdbc连接oracle数据库简单介绍的更多相关文章

  1. jdbc连接oracle数据库

    /*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...

  2. JDBC连接Oracle数据库的问题

    场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题. 问题1:jdbc连接不上Ubuntu Oracle服务器? 后来发现这个问题的原因是由于连接字符串写错了,修 ...

  3. jdbc连接oracle数据库问题

    下面是JDBC连接oracle数据库流程: String dbURL = "jdbc:oracle:thin:@url:1521:service_name"; String use ...

  4. JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库

    首先是JDBC 连接Oracle  数据库 package com.util; import com.pojo.UserInfo; import java.sql.*; public class DB ...

  5. JAVA通过JDBC连接Oracle数据库详解【转载】

    JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...

  6. jdbc连接oracle数据库字符串

    jdbc连接oracle数据库有两种方式: 连接数据库SID 连接数据库service_name 当连接SID时,字符串如下: url::orcl1" password="xxxx ...

  7. 简单的JDBC连接oracle数据库例子

    java连接Oracle数据库 JDBC(Java Data Base Connectivity,java数据库连接),那么我们该如何用java进行数据库的连接呢. import java.sql.C ...

  8. JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法

    转载至http://www.blogjava.net/itspy/archive/2007/12/20/169072.html Oracle 问题描述:今天使用jdbc连接oracle 10.2.0. ...

  9. JDBC 连接Oracle数据库 各个对象的理解

    JDBC: 1. **代码实现:(连接oracle数据库) ​    1.导入驱动jar包 ​    2.注册驱动 ​     Class.forName("oracle.jdbc.driv ...

随机推荐

  1. 【mysql】2003-Can't connect to MySQL server (10060)

    使用navicat或者其他数据库管理工具连接mysql时出现2003-Can’t connect to MySQL server (10060)错误 可能造成出现的原因: 1.网络不通畅 2.mysq ...

  2. 大事记 - 安卓微信浏览器 video 标签层级过高

    // 为什么叫<大事记>? // 以前总有面试官问这样一个问题:“你在项目中遇到过最头疼的问题是什么,是怎么解决的?” // 当时总觉得,已解决的问题都算不上头疼,所以回答总是不尽人意. ...

  3. HTML 介绍及标签

    HTML htyper text markup language 即超文本标记语言 超文本: 就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 标记语言: 标记(标签)构成的语言. 标签 ...

  4. CSS3属性animation-play-state控制动画运行或暂停的技巧

    animation-play-state介绍 animation-play-state 属性规定动画正在运行还是暂停. div{ animation-play-state:paused; -webki ...

  5. Python运维开发:初识Python(一)

    一.Pythton简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...

  6. react 的双向数据绑定

    学习过angular和vue的人都知道,它俩在实现双向数据绑定都是有一个专门的内置指令ngModel和v-model 但是在react中没有这些. 所以我们在react中想要实现双向数据绑定要调用一个 ...

  7. [随时更新][Android]小问题记录

    此文随时更新,旨在记录平时遇到的不值得单独写博客记录的细节问题,当然如果问题有拓展将会另外写博客. 原文地址请保留http://www.cnblogs.com/rossoneri/p/4040314. ...

  8. php post接口,注册功能

    功能描述:仅输入手机号和密码,实现注册功能.手机号有简单的验证,不可重复输入,否则会报500错误. 在使用 RestClient 进行post测试时,如果你把参数放在 [Headers]区块了,那么, ...

  9. 测者的性测试手册:SWAP的监控

    swap是什么 swap是磁盘上的一块区域,可以使一个磁盘分区,也可以是一个文件,也可能是一个两种的组合.当物理内存资源紧张的时候,操作系统(Linux)会将一些不常访问的数据放到swap里.为其他常 ...

  10. Linux中对逻辑卷进行扩容与缩小

    一.在扩容之前,先查看自己逻辑卷,卷组,物理卷的信息:(在上一篇的基础上:Linux中对逻辑卷的建立) 查看物理卷: # pvdisplay /dev/sdc1 查看卷组: vgdisplay /de ...