Java jdbc 操作数据库详解
原文地址https://www.cnblogs.com/huguodong/p/5910859.html
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。

/**
* JDBC:文件驱动
* 1.引入jar包 ojdbc.jar 在工程的目录下创建一个lib文件夹用来存放jar包
* 在ojdbc14.jar这个文件上右键==>build Path==> add to build Path
* 2.编写DB类
* a.加载驱动
* b.设置参数url user pwd
* c.连接数据库
* d.编写sql语句
* e.编译sql语句
* f.如果存在条件
* 设置条件后执行sql语句,如果没有条件直接执行sql语句 g.如果是增删改 那么sql执行结束 如果是查询,遍历结果集 f.关闭数据库
*
*
*
*/

二、初始化
1.配置连接:在引入了ojdbc14.jar包之后,我们需要使用Class.forName方法加载驱动,然后通过DriverManager.getConnection来获取连接

// 初始化
public void init() {
// 不同的数据库有不同的驱动
String driverName = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.1.150:1521:XE";
String user = "hr";
String password = "123456"; try {
// 加载驱动
Class.forName(driverName);
// 设置 配置数据
// 1.url(数据看服务器的ip地址 数据库服务端口号 数据库实例)
// 2.user
// 3.password
conn = DriverManager.getConnection(url, user, password);
// 开始连接数据库
System.out.println("数据库连接成功..");
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} }

2.初始化

Connection conn = null;
public static void main(String[] args) {
DB db = new DB();
db.init();
}

三、操作
如果我们需要操作数据,就需要一个容器来保存它,这里我们可以用javabean来保存他们。

public class Student {
private Integer id;
private String name;
private Integer age;
private Integer agestart;
private Integer ageend;
public Integer getAgestart() {
return agestart;
}
public void setAgestart(Integer agestart) {
this.agestart = agestart;
}
public Integer getAgeend() {
return ageend;
}
public void setAgeend(Integer ageend) {
this.ageend = ageend;
}
public Student() {
// TODO 自动生成的构造函数存根
}
public Student(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

1.简单的查询

public List<Student> select() throws SQLException {
List<Student> list = new ArrayList<Student>();
// *查询
// 创建sql语句
String sqlString = "select * from student";
// 编译sql语句
// 执行查询
pst = conn.prepareStatement(sqlString);
rSet = pst.executeQuery();
// 遍历结果
Student student = null;
while (rSet.next()) {
// System.out.print(rSet.getInt(1) + "\t");
// System.out.print(rSet.getString(2) + "\t");
// System.out.print(rSet.getInt(3) + "\t");
// System.out.print("\n");
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
list.add(student);
}
return list;
}


List<Student> students = null;
students = db.select();
for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getId() + "\t");
System.out.print(students.get(i).getName() + "\t");
System.out.print(students.get(i).getAge());
System.out.println();
}

结果:

2.条件查询

public List<Student> selectByStu(int age) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select * from student where sage=? ";
pst = conn.prepareStatement(sql);
// 设置条件(相对于条件查询)
pst.setInt(1, age);
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
}
return students;
}


students = db.selectByStu(20);
for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getId() + "\t");
System.out.print(students.get(i).getName() + "\t");
System.out.print(students.get(i).getAge());
System.out.println();
}

结果:

3.多个条件查询

public List<Student> selectByCondition(Student e) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select * from student where sage>? and sage<? ";
pst = conn.prepareStatement(sql);
pst.setInt(1, e.getAgestart());
pst.setInt(2, e.getAgeend());
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
}
return students;
}


Student stu = new Student();
stu.setAgestart(20);
stu.setAgeend(22);
students = db.selectByCondition(stu); for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getId() + "\t");
System.out.print(students.get(i).getName() + "\t");
System.out.print(students.get(i).getAge());
System.out.println();
}


4.添加数据

public void save(Student student) throws SQLException {
String sql = "insert into student values (?,?,?,null,null,null,null,null)";
pst = conn.prepareStatement(sql);
pst.setInt(1, student.getId());
pst.setString(2, student.getName());
pst.setInt(3, student.getAge());
pst.executeUpdate();
System.out.println("添加成功");
}

5.更新数据

public void update(Student student) throws SQLException {
String sql = "update student set sage=? where sid=?";
pst = conn.prepareStatement(sql);
pst.setInt(1, student.getAge());
pst.setInt(2, student.getId());
pst.executeUpdate();
System.out.println("更新成功");
}

6.删除数据

public void delete(Integer id) throws SQLException {
String sql = "delete student where sid=?";
pst = conn.prepareStatement(sql);
pst.setInt(1, id);
pst.executeUpdate();
System.out.println("删除成功");
}

7.分页

public List<Student> findByPage(int start, int end) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select s_.* from(select s.*,rownum rn from (select * from student order by sid) s where rownum<=?) s_ where rn>?";
pst = conn.prepareStatement(sql);
pst.setInt(1, end);
pst.setInt(2, start);
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
}
return students;
}

四、笔记

package com.hgd.study.JDBC; import java.net.CookieHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; public class DB {
Connection conn = null;
PreparedStatement pst;
ResultSet rSet; public static void main(String[] args) {
DB db = new DB(); List<Student> students = null;
try {
db.initConn();
//students = db.select(); //students = db.selectByStu(20); Student stu = new Student();
stu.setAgestart(20);
stu.setAgeend(22);
students = db.selectByCondition(stu); for (int i = 0; i < students.size(); i++) {
System.out.print(students.get(i).getId() + "\t");
System.out.print(students.get(i).getName() + "\t");
System.out.print(students.get(i).getAge());
System.out.println();
} // Student stu = new Student(123, "李四", 23);
// db.save(stu); // Student stu=new Student();
// stu.setId(10003);
// stu.setAge(23);
// db.update(stu); // db.delete(123); /*
* 事物: 1.原子性:每一个事物都是一个单独的操作 2.一致性:事物中的所有操作,只要成功全部成功,一旦失败全部失败
* 3.隔离性:事物中的操作之间没不会产生影响他们都是一个独立的操作 4.持久性:事物一旦成功将被永久写入数据库
*/
// conn.setAutoCommit(false);// 设置自动事物为false
// conn.setSavepoint();// 设置事物的回滚点
// conn.rollback();//事物回滚
// conn.commit();//事物提交
// db.setAutoCommit(false);
// db.setSavepoint();
// Student stu = new Student();
// stu.setId(10003);
// stu.setAge(0);
// db.update(stu);
// if (stu.getAge() <= 0) {
// db.rollback();
// System.out.println("取消了操作");
// } else {
// db.commit();
// } } catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} finally {
try {
db.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
} // 初始化
public void init() {
// 不同的数据库有不同的驱动
String driverName = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.1.150:1521:XE";
String user = "hr";
String password = "123456"; try {
// 加载驱动
Class.forName(driverName);
// 设置 配置数据
// 1.url(数据看服务器的ip地址 数据库服务端口号 数据库实例)
// 2.user
// 3.password
conn = DriverManager.getConnection(url, user, password);
// 开始连接数据库
System.out.println("数据库连接成功..");
} catch (ClassNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} } public void initConn() throws Exception {
if (conn == null || conn.isClosed()) {
this.init();
}
} public void close() throws Exception {
if (conn != null && !conn.isClosed()) {
conn.close();
conn = null; }
} public void setAutoCommit(boolean fals) throws Exception {
if (conn != null && !conn.isClosed()) {
conn.setAutoCommit(fals);
}
} public void setSavepoint() throws Exception {
if (conn != null && !conn.isClosed()) {
conn.setSavepoint();
}
} public void rollback() throws Exception {
if (conn != null && !conn.isClosed()) {
conn.rollback();
}
} public void commit() throws Exception {
if (conn != null && !conn.isClosed()) {
conn.commit();
}
} // 简单查询
public List<Student> select() throws SQLException { List<Student> list = new ArrayList<Student>();
// *查询
// 创建sql语句
String sqlString = "select * from student";
// 编译sql语句
// 执行查询
pst = conn.prepareStatement(sqlString);
rSet = pst.executeQuery();
// 遍历结果
Student student = null;
while (rSet.next()) {
// System.out.print(rSet.getInt(1) + "\t");
// System.out.print(rSet.getString(2) + "\t");
// System.out.print(rSet.getInt(3) + "\t");
// System.out.print("\n");
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
list.add(student); } return list;
} // 条件查询
public List<Student> selectByStu(int age) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select * from student where sage=? "; pst = conn.prepareStatement(sql);
// 设置条件(相对于条件查询)
pst.setInt(1, age);
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
} return students;
} // 多个条件值查询
public List<Student> selectByCondition(Student e) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select * from student where sage>? and sage<? ";
pst = conn.prepareStatement(sql);
pst.setInt(1, e.getAgestart());
pst.setInt(2, e.getAgeend());
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
}
return students;
} // 添加数据
public void save(Student student) throws SQLException {
String sql = "insert into student values (?,?,?,null,null,null,null,null)"; pst = conn.prepareStatement(sql);
pst.setInt(1, student.getId());
pst.setString(2, student.getName());
pst.setInt(3, student.getAge());
pst.executeUpdate();
System.out.println("添加成功");
} // 更新数据
public void update(Student student) throws SQLException {
String sql = "update student set sage=? where sid=?"; pst = conn.prepareStatement(sql);
pst.setInt(1, student.getAge());
pst.setInt(2, student.getId());
pst.executeUpdate();
System.out.println("更新成功");
} // 删除数据
public void delete(Integer id) throws SQLException {
String sql = "delete student where sid=?"; pst = conn.prepareStatement(sql);
pst.setInt(1, id);
pst.executeUpdate();
System.out.println("删除成功");
} // 分页
public List<Student> findByPage(int start, int end) throws SQLException {
List<Student> students = new ArrayList<Student>();
String sql = "select s_.* from(select s.*,rownum rn from (select * from student order by sid) s where rownum<=?) s_ where rn>?"; pst = conn.prepareStatement(sql);
pst.setInt(1, end);
pst.setInt(2, start);
rSet = pst.executeQuery();
Student student = null;
while (rSet.next()) {
student = new Student();
student.setId(rSet.getInt(1));
student.setName(rSet.getString(2));
student.setAge(rSet.getInt(3));
students.add(student);
}
return students;
} }

Java jdbc 操作数据库详解的更多相关文章
- JAVA采用JDBC连接操作数据库详解
JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- java jdbc操作数据库通用代码
1.准备工作 1> 新建一个配置文件,名为jdbc.properties将其放入src中 2>在项目中导入jdbc驱动,注意连接不同的数据库,所用到的驱动是不一样的,这些在网上都能找到 具 ...
- JAVA连接各种数据库详解
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- jdbc 操作步骤详解
package com.itheima.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...
- JAVA通过JDBC连接Oracle数据库详解【转载】
JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.htm ...
- Java笔记(第七篇 JDBC操作数据库)
JDBC是连接数据库和java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.学习java语言,必须学习JDBC技术,因为JDBC技术实在java语言中被广泛使用的一种操作数据库 ...
- Java基础之原生JDBC操作数据库
前言 日常开发中,我们都习惯了使用ORM框架来帮我们操作数据库,本文复习.记录Java如何使用原生JDBC操作数据库 代码编写 封装几个简单方法 find查询方法 findOne查询方法 update ...
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
随机推荐
- python tkinter教程-事件绑定
一个Tkinter主要跑在mainloop进程里.Events可能来自多个地方,比如按键,鼠标,或是系统事件. Tkinter提供了丰富的方法来处理这些事件.对于每一个控件Widget,你都可以为其绑 ...
- jenkins部署war包到远程服务器的tomcat
一.目的 jenkins上将war包,部署到远程服务器的tomcat上. 这边tomcat在windows 主机A上,版本apache-tomcat-8.5.23. jenkins在主机B上,cent ...
- Autojump:一个可以在 Linux 文件系统快速导航的高级 cd 命令
相关博客:https://linux.cn/article-3401-1.html 对于那些主要通过控制台或终端使用 Linux 命令行来工作的 Linux 用户来说,他们真切地感受到了 Linux ...
- 安装sqlite3.8的方法
wget http://www.sqlite.org/2015/sqlite-autoconf-3081101.tar.gz tar -xvzf sqlite-autoconf-3081101.tar ...
- Unity3D笔记 切水果三 切水果
一.创建一个Apple00,拖拽Prfabs下的Sprite命名为Apple00,添加碰撞器Box Collider,编写代码Knife Rey1.js 二.做被切的苹果 步骤和一是一样的,但是被切的 ...
- smarty模板的配置
smarty下载: http://www.smarty.net/download 建议使用一个兼容性好的smary版本. 太新的版本往往对php的版本支持不好. php推荐使用的模板是:sma ...
- xcode vs visual studio
不得不说,VS做的还是不错的,尤其是对C++的debug功能傲视群IDE. 一个VS与XCODE的对比. http://development-software.findthebest.com/com ...
- ArcEngine TextElement 定位点的问题
做ArcGIS Add-In开发,需要在ArcMap中数据视图的左上角加一个上标,如果上标与数据中的地名图层重合,则放在右上角. 上标通过ITextElement,IElement,ITextSymb ...
- 专访msup创始人兼CEO刘付强:追求卓越是数据时代下企业和个人的生存之道
近些年,"信息化带动工业化"策略的深入人心,这为信息技术本身开辟了一个更加广阔的应用天地,在这样的大环境下国内IT培训市场得了飞速发展.那么在云计算.大数据时代,如何让企业的IT团 ...
- Scikit-learn技巧(拓展)总结
Scikit-learn技巧(拓展)总结 本文转载自:http://www.jianshu.com/p/516f009c0875 最近看了<Python数据挖掘入门与实战>,网上有说翻译地 ...