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.按电话号码模糊查询
1、原生jdbc连接oracle数据库简单介绍的更多相关文章
- jdbc连接oracle数据库
/*** 通过改变配置文件来连接不同数据库*/package com.xykj.jdbc; import static org.junit.Assert.*; import java.io.Input ...
- JDBC连接Oracle数据库的问题
场景:最近做一个java web项目,使用jdbc连接Oracle数据库,遇到了两个问题. 问题1:jdbc连接不上Ubuntu Oracle服务器? 后来发现这个问题的原因是由于连接字符串写错了,修 ...
- jdbc连接oracle数据库问题
下面是JDBC连接oracle数据库流程: String dbURL = "jdbc:oracle:thin:@url:1521:service_name"; String use ...
- JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库
首先是JDBC 连接Oracle 数据库 package com.util; import com.pojo.UserInfo; import java.sql.*; public class DB ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- jdbc连接oracle数据库字符串
jdbc连接oracle数据库有两种方式: 连接数据库SID 连接数据库service_name 当连接SID时,字符串如下: url::orcl1" password="xxxx ...
- 简单的JDBC连接oracle数据库例子
java连接Oracle数据库 JDBC(Java Data Base Connectivity,java数据库连接),那么我们该如何用java进行数据库的连接呢. import java.sql.C ...
- JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法
转载至http://www.blogjava.net/itspy/archive/2007/12/20/169072.html Oracle 问题描述:今天使用jdbc连接oracle 10.2.0. ...
- JDBC 连接Oracle数据库 各个对象的理解
JDBC: 1. **代码实现:(连接oracle数据库) 1.导入驱动jar包 2.注册驱动 Class.forName("oracle.jdbc.driv ...
随机推荐
- jquery中each中使用break和continue
在jquery中each中直接使用break或者continue会提示:必须在循环中使用.会报错不能直接使用. 但是,是不是就不能用呢,答案是的,但是换种方法可以达到相同的效果: 可以只用return ...
- Win7怎么录制电脑屏幕视频
我们在看视频的时候,经常会看到自己特别喜爱的视频,想要把其中的某些片段给录制下来,那么Win7怎么录制电脑屏幕视频?其实步骤很简单,下面就来分享下具体的步骤. 使用工具: 电脑 操作方法: 第一步.首 ...
- Vue 组件之间传值
一.父组件向子组件传递数据 在 Vue 中,可以使用 props 向子组件传递数据. 子组件部分: 这是 header.vue 的 HTML 部分,logo 是在 data 中定义的变量. 如果需要从 ...
- C#:读取视频的宽度和高度等信息
读取方式:使用ffmpeg读取,所以需要先下载ffmpeg.网上资源有很多. 通过ffmpeg执行一条CMD命令可以读取出视频的帧高度和帧宽度信息. 如图: 蓝线框中可以看到获取到的帧高度和帧宽度. ...
- 性能测试 查看Android APP 帧数FPS的方法
(下述需要先安装eclipse,不然无法抓包) 1.保证手机与PC连接是正常的 2.打开手机“设置”→“开发者选项”(没有开发者选项就点击“关于手机”“版本号”连续点击就会出现开发者选项了).找到监控 ...
- python线程同步原语--源码阅读
前面两篇文章,写了python线程同步原语的基本应用.下面这篇文章主要是通过阅读源码来了解这几个类的内部原理和是怎么协同一起工作来实现python多线程的. 相关文章链接:python同步原语--线程 ...
- Django APP打包重用
引言 有时候,我们需要将自己写的app分发(dist)给同事,分享给朋友,或者在互联网上发布,这都需要打包.分发我们的app. Django的子系统重用是基于app级别的.也就是一个项目可以包含多个互 ...
- linux安装教程
一.安装准备工作 虚拟机VMWARE10 镜像文件CentOs6.5 二.安装过程 1.启动VMWARE10,点击创建新的虚拟机. 2.选择典型安装即可 3.这里我们选择稍后再进行安装操作系统,因为这 ...
- Linux系统网络文件配置
/etc 一.修改配置文档(需要重启网络配置,永远生效) 1.修改IP地址[MariaDB@db1]$ vi /etc/sysconfig/network-scripts/ifcfg-eth0DEV ...
- Spring Cloud Config 配置属性覆盖优先级。
/** * Flag to indicate that the external properties should override system properties. * Default tru ...