JDBC连接oracle的实例

好久没写过jdbc,基本忘干净了,随意插一个图,简单学习一下。然后干别的。。。。。

使用jdbc操作数据库步骤是固定的

1.将驱动包导入到数据库,每一个数据库的驱动包都不一样,下面我提供一个Oracle数据库的驱动包http://download.csdn.net/detail/hncsy403/4530830将它下载后放入web项目中的 web-inf中的lib中

2.选择项目右键,选择Build Bath,在libraries中add JARs,选择刚才的jar包

学生类bean

package jdbc.bean;

import java.util.Date;

public class Student {

	private int id;
private String name;
private String password;
private String sex;
private int age;
private Date birthday;
private String memo;
private String photo;
private Date regTime; public int getAge() {
return age;
} public Date getBirthday() {
return birthday;
} public int getId() {
return id;
} public String getMemo() {
return memo;
} public String getName() {
return name;
} public String getPassword() {
return password;
} public String getPhoto() {
return photo;
} public Date getRegTime() {
return regTime;
} public String getSex() {
return sex;
} public void setAge(int age) {
this.age = age;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public void setId(int id) {
this.id = id;
} public void setMemo(String memo) {
this.memo = memo;
} public void setName(String name) {
this.name = name;
} public void setPassword(String password) {
this.password = password;
} public void setPhoto(String photo) {
this.photo = photo;
} public void setRegTime(Date regTime) {
this.regTime = regTime;
} public void setSex(String sex) {
this.sex = sex;
} }

工具类:DBUtil

package jdbc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class DBUtil { private static final String driverClass = "oracle.jdbc.driver.OracleDriver";
private static final String jdbcUrl = "jdbc:oracle:thin:@liumo:1521:ORCL";
private static final String user = "test_lm";
private static final String password = "test_lm"; public static Connection getConn() {
// 1.注册驱动
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} // 2.创建Connection(数据库连接对象)
Connection conn = null;
try {
conn = DriverManager.getConnection(jdbcUrl, user, password);
conn.setAutoCommit(false);
return conn;
} catch (SQLException e) {
e.printStackTrace();
}
/*
* Connection是Statement的工厂,一个Connection可以生产多个Statement。
* Statement是ResultSet的工厂,一个Statement却只能对应一个ResultSet(它们是一一对应的关系)。
* 所以在一段程序里要用多个ResultSet的时候,必须再Connection中获得多个Statement,然后一个Statement对应一个ResultSet。
*/
return null;
} /**
* 关闭连接(数据库连接对象)
* @param conn
*/
public static void close(Connection conn) {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 关闭编译的 SQL 语句的对象
* @param stmt
*/
public static void close(Statement stmt) {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 关闭结果集
* @param rs
*/
public static void close(ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 提交事务
* @param conn
*/
public static void commit(Connection conn) {
try {
if (conn != null) {
conn.commit();
}
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 回滚事务
* @param conn
*/
public static void rollback(Connection conn) {
try {
if (conn != null) {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

  实际的dao:StudentDao

 

package jdbc.dao;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import jdbc.bean.Student;
import jdbc.util.DBUtil; public class StudentDao { /**
* 保存
* @param student
*/
public void save(Student student) { Connection conn = DBUtil.getConn(); PreparedStatement pstmt = null;
String sql = " insert into t_student(name,password,sex,age,birthday,memo,photo,reg_time) ";
sql += " values(?,?,?,?,?,?,?,?) ";
try {
pstmt = conn.prepareStatement(sql); pstmt.setString(1, student.getName());
pstmt.setString(2, student.getPassword());
pstmt.setString(3, student.getSex());
pstmt.setInt(4, student.getAge());
pstmt.setDate(5, new java.sql.Date(student.getBirthday().getTime())); // 只存年月日这种形式
pstmt.setString(6, student.getMemo());
try {
// 构建一个输入流存blob
pstmt.setBlob(7, new FileInputStream(student.getPhoto()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
pstmt.setTimestamp(8, new java.sql.Timestamp(student.getRegTime().getTime())); // 完整的时间格式
pstmt.executeUpdate();
DBUtil.commit(conn);
} catch (SQLException e) {
DBUtil.rollback(conn);
e.printStackTrace();
} finally {
DBUtil.close(pstmt);
DBUtil.close(conn);
}
} /**
* 删除
* @param id
*/
public void delete(int id) {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = null;
String sql = " delete from t_student where id=?";
try {
pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id);
pstmt.executeUpdate();
DBUtil.commit(conn);
} catch (SQLException e) {
DBUtil.rollback(conn);
e.printStackTrace();
} finally {
DBUtil.close(pstmt);
DBUtil.close(conn);
}
} /**
* 批量删除
* @param ids
*/
public void deleteBatch(int[] ids) { Connection conn = DBUtil.getConn();
PreparedStatement pstmt = null;
String sql = " delete from t_student where id=?";
try {
pstmt = conn.prepareStatement(sql);
for (int id : ids) {
pstmt.setInt(1, id);
pstmt.addBatch();
}
pstmt.executeBatch();
DBUtil.commit(conn);
} catch (SQLException e) {
DBUtil.rollback(conn);
e.printStackTrace();
} finally {
DBUtil.close(pstmt);
DBUtil.close(conn);
}
} /**
* 修改
* @param student
*/
public void update(Student student) {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = null;
String sql = " update t_student set name=?,password=?,sex=?,age=?,birthday=?,memo=?,photo=?,reg_time=? where id=?";
try {
pstmt = conn.prepareStatement(sql); pstmt.setString(1, student.getName());
pstmt.setString(2, student.getPassword());
pstmt.setString(3, student.getSex());
pstmt.setInt(4, student.getAge());
pstmt.setDate(5, new java.sql.Date(student.getBirthday().getTime())); // 只存年月日这种形式
pstmt.setString(6, student.getMemo());
try {
// 构建一个输入流存blob
pstmt.setBlob(7, new FileInputStream(student.getPhoto()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
pstmt.setTimestamp(8, new java.sql.Timestamp(student.getRegTime().getTime())); // 完整的时间格式
pstmt.setInt(9, student.getId()); pstmt.executeUpdate();
DBUtil.commit(conn);
} catch (SQLException e) {
DBUtil.rollback(conn);
e.printStackTrace();
} finally {
DBUtil.close(pstmt);
DBUtil.close(conn);
}
} /**
* 查找
* @param id
* @return
*/
public Student find(int id) {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet = null;
String sql = " select * from t_student where id=?";
Student student = null;
try {
pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id);
resultSet = pstmt.executeQuery(); if (resultSet.next()) {
student = new Student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
student.setBirthday(resultSet.getDate("birthday"));
student.setMemo(resultSet.getString("memo"));
student.setPassword(resultSet.getString("password"));
student.setRegTime(resultSet.getTimestamp("reg_time"));
student.setSex(resultSet.getString("sex"));
InputStream in = resultSet.getBlob("photo").getBinaryStream();
String path = "d:\\ltf.jpg";
try {
OutputStream out = new FileOutputStream(path);
copy(in, out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
student.setPhoto(path);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(resultSet);
DBUtil.close(pstmt);
DBUtil.close(conn);
}
return student;
} private void copy(InputStream in, OutputStream out) {
int i = 0;
try {
while ((i = in.read()) != -1) {
out.write(i);
}
out.flush();
} catch (IOException e) { e.printStackTrace();
}
} /**
* 查询多条记录
* @return
*/
public List<Student> query() {
Connection conn = DBUtil.getConn();
PreparedStatement pstmt = null;
ResultSet resultSet = null;
String sql = " select * from t_student ";
List<Student> studentList = new ArrayList<Student>(); try {
pstmt = conn.prepareStatement(sql); resultSet = pstmt.executeQuery(); while (resultSet.next()) {
Student student = new Student();
student.setId(resultSet.getInt("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
student.setBirthday(resultSet.getDate("birthday"));
student.setMemo(resultSet.getString("memo"));
student.setPassword(resultSet.getString("password"));
student.setRegTime(resultSet.getTimestamp("reg_time"));
student.setSex(resultSet.getString("sex"));
InputStream in = resultSet.getBlob("photo").getBinaryStream();
String path = "d:\\ltf.jpg";
try {
//将数据库存的图片放到磁盘的某个位置
OutputStream out = new FileOutputStream(path);
copy(in, out);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
student.setPhoto(path);
studentList.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(resultSet);
DBUtil.close(pstmt);
DBUtil.close(conn);
}
return studentList;
} }

  测试类:DaoTest

package jdbc.test;
import static org.junit.Assert.fail; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import jdbc.bean.Student;
import jdbc.dao.StudentDao; import org.junit.Test; public class DaoTest { @Test
public void test() {
fail("Not yet implemented"); Student s=new Student();
//s.setId(3);
s.setName("zss");
s.setPassword("zss");
s.setSex("女");
s.setAge(21);
try {
s.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1980-01-01"));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
s.setMemo("我人还不错");
s.setPhoto("c:\\ltf.jpg");
s.setRegTime(new Date()); StudentDao sd=new StudentDao();
//sd.save(s);
//sd.update(s);
//sd.delete(1);
//sd.deleteBatch(new int[]{2,3});
System.out.println(sd.query().size());
} }

  

每次SQL操作都需要建立和关闭连接,这势必会消耗大量的资源开销,如何避免

分析:可以采用连接池,对连接进行统一维护,不必每次都建立和关闭。事实上这是很多对JDBC进行封装的工具所采用的。(等看到hibernate,spring连接数据库和事务的时候在研究一下。)

参考:

通过JDBC进行简单的增删改查(以MySQL为例) http://www.cnblogs.com/wuyuegb2312/p/3872607.html

JDBC学习之-如何获取Connection  http://blog.csdn.net/luohuacanyue/article/details/8770450

java_jdbc_oracle简单总结(2016-11-23)的更多相关文章

  1. 最新的 cocoapods 安装与使用(2016.11)

    cocoapods简介: cocoapods 是iOS的类库管理工具,可以让开发者很方便集成各种第三方库,而不用去网站上一个个下载,再一个个文件夹的拖进项目中,还得添加相关的系统依赖库.只需要安装好c ...

  2. 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理

    2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...

  3. U3D笔记11:47 2016/11/30-15:15 2016/12/19

    11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...

  4. 微信iphone7、 ios10播放视频解决方案 2016.11.10

    2016.11.10日更新以下方法 微信最新出同层播放规范 即使是官方的也无法解决所有android手机的问题. 另外iphone 5 .5s 某些手机始终会弹出播放,请继续采用 “以下是老的解决办法 ...

  5. 【转载】webstorm11(注册,激活,破解,码,一起支持正版,最新可用)(2016.11.16更新)

    很多人都发现 http://idea.lanyus.com/ 不能激活了 很多帖子说的 http://15.idea.lanyus.com/ 之类都用不了了 最近封的厉害仅作测试 选择 License ...

  6. Beta周第14次Scrum会议(11/23)【王者荣耀交流协会】

    一.小组信息 队名:王者荣耀交流协会 小组成员 队长:高远博 成员:王超,袁玥,任思佳,王磊,王玉玲,冉华 小组照片 二.开会信息 时间:2017/11/23 17:02~17:14,总计12min. ...

  7. 第35次Scrum会议(11/23)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文小组照片 二.开会信息 时间:2017/11/23 17:03~17:24,总计21min.地点:东北师 ...

  8. Murano Weekly Meeting 2016.08.23

    Meeting time: 2016.August.23 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: ...

  9. github javascript相关项目star数排行榜(前30,截止2016.11.18):

    github javascript相关项目star数排行榜(前30,截止2016.11.18): 前端开源框架 TOP 100 前端 TOP 100:::::https://www.awesomes. ...

  10. 2018.11.23 浪在ACM 集训队第六次测试赛

    2018.11.23 浪在ACM 集训队第六次测试赛 整理人:刘文胜 div 2: A: Jam的计数法 参考博客:[1] 万众 B:数列 参考博客: [1] C:摆花 参考博客: [1] D:文化之 ...

随机推荐

  1. 参考SQLHelper编写的OracleHelper

    使用 Oracle.ManagedDataAccess.Client 类库参考SQLHelper编写的OracleHelper: // ================================ ...

  2. 为什么JavaScript开发如此疯狂

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! Web开发太有意思了! 但是JavaScript则……令人望而生畏. Web开发中其他一切对你而言都是小菜一碟, ...

  3. nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】

    士兵杀敌(四) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...

  4. 小物件之select单选下拉列表

    有时候在控制器中做了一个数组 然后需要在模板view中循环 同时还需要判断是否有选中的值,就会造成很多开始闭合标签 以前都是这样写 这样实在太繁琐了,不如封装一个小物件 封装函数如下: 代码如下: f ...

  5. Yii 通过composer 安装的方法

    Yii2框架可以通过两种方式 安装 : 第一种方法: Yii2有两个模板 一个是基础模板,一个是高级模板,基础可能简单点吧.........,现在直接从   https://github.com/yi ...

  6. iOS 隐藏Tabbar

    两种方法用来隐藏tabBar 1.在本页面隐藏 #pragma mark - 隐藏tabBar - (void)viewWillAppear:(BOOL)animated{  self.tabBarC ...

  7. 利用ServletFileUpload组件上传文件

    自己的运用: public void UploadNoteFile(HttpServletRequest request,HttpServletResponse response){  String ...

  8. 【转】android多分辨率适配

    前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机.因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法. 先介绍一下所走的弯路, ...

  9. 数据库:JDBC编程

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于运行SQL语句的Java API.能够为多种关系数据库提供统一訪问.它由一组用Java语言编写的类和接口 ...

  10. 【转】SVN:Android Studio设置忽略文件

    Android Studio创建的Android项目一般需要忽略 参考: http://blog.csdn.net/qq_22780533/article/details/51965007 1..id ...