Day_0902(JDBC)
——Javee
分页:一页三条
SELECT * FROM
(
SELECT stu.*, ROWNUM r FROM tblstudent stu WHERE ROWNUM <= 6
) WHERE r >= 4
别名:先使用,再得到别名
jdbc:(java database connect) Java数据库连接,是一种用于执行sql的java api,可以为多种关系型数据库提供统一访问。
前台:用户操作的那一端
后台:实现功能和操作数据的那一端,于前台响应的那一端
简单来说:用Java代码来操作数据库
先创建一个表,插入数据等下使用JDBC操作
--创建一个表
CREATE TABLE stuv3
(
ID NUMBER(4),
NAME VARCHAR2(20),
sex VARCHAR2(4),
age NUMBER(4),
PRIMARY KEY(ID) --设置id为主键
);
--创建一个序列
CREATE SEQUENCE seqstuv3;
--插入一条数据
INSERT INTO stuv3
VALUES(seqstuv3.nextval, 'sun09', '男', 18);
INSERT INTO stuv3
VALUES(seqstuv3.nextval, 'sun08', '男', 17);
INSERT INTO stuv3
VALUES(seqstuv3.nextval, 'sun07', '男', 17);
INSERT INTO stuv3
VALUES(seqstuv3.nextval, 'sun06', '男', 19);
INSERT INTO stuv3
VALUES(seqstuv3.nextval, 'sun05', '男', 20);
SELECT * FROM stuv3
JDBC操作步骤:
-
加载驱动
-
建立连接
-
操作数据
src放Java代码,包的功能分开
-
util-工具包,所有工具有关的文件,类,多个地方要用的,比如数据库连接,字符串转码
-
model-基类,javabean 与数据库字段对应的类
-
dao-操作数据表的功能文件(增加数据,删除数据)
Connection
-
一个数据库连接
-
连接的关闭
commit-提交数据,保证数据的实时性
操作数据具体流程代码见我的上一篇博客,今天我们写的代码格式规范点,话不多说,看代码
//DBLink.java
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @Author Javee
* @Date 2019/9/2 10:27
* @Description 连接数据库的类
*/
public class DBLink {
public static Connection getCon() throws Exception {
Connection con = null;
//先加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//再建立连接
//DriverManager
con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "Javee", "123456");
return con;
}
public static void close(Connection con) throws SQLException {
if(con != null){
con.close();
}
}
}
//Stu.java
package model;
/**
* @Author Javee
* @Date 2019/9/2 11:01
* @Description 学生类,用来存储数据库中的数据
*/
public class Stu {
int id;
String name;
String sex;
int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//StuDao.java
package dao;
import model.Stu;
import util.DBLink;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
/**
* @Author Javee
* @Date 2019/9/2 11:05
* @Description 对数据进行操作
*/
public class StuDao {
//操作数据,增加、删除、修改
public static void in(Stu stu) throws Exception {
Connection con = DBLink.getCon();
//?为占位符
//String sql = "insert into stuv3 values (seqstuv3.nextval, ?, ?, ?)";
//String sql = "delete from stuv3 where name = 'Javee1'";
String sql = "update stuv3 set name = 'Javee' where name = 'Javee1'";
//预处理:用来处理含有sql字码的字符串
PreparedStatement ps = con.prepareStatement(sql);
/*ps.setString(1, stu.getName());
ps.setString(2, stu.getSex());
ps.setInt(3, stu.getAge());*/
//开始执行sql
ps.executeUpdate();
DBLink.close(con);
}
//查询
public static ArrayList<Stu> selAll() throws Exception{
Connection con = DBLink.getCon();
ArrayList<Stu> arr = new ArrayList<>();
String sql = "select * from stuv3";
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Stu s = new Stu();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setAge(rs.getInt("age"));
arr.add(s);
}
DBLink.close(con);
return arr;
}
//含有条件的查询
public static ArrayList<Stu> selAll2(Stu stu) throws Exception{
Connection con = DBLink.getCon();
ArrayList<Stu> arr = new ArrayList<>();
String sql = "select * from stuv3 where name like ?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "%" + stu.getName() + "%");
ResultSet rs = ps.executeQuery();
while(rs.next()){
Stu s = new Stu();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setAge(rs.getInt("age"));
arr.add(s);
}
DBLink.close(con);
return arr;
}
//用main来测试
public static void main(String[] args) throws Exception {
Stu s = new Stu();
s.setName("sun");
s.setSex("男");
s.setAge(18);
//in(s);
//查询测试
ArrayList<Stu> arr = selAll2(s);
for (Stu stu : arr) {
System.out.println(stu.getId() + "\t" + stu.getName() + "\t"
+ stu.getSex() + "\t" + stu.getAge());
}
}
}
executeUpdata:int 操作并更新
execute:boolean 只操作
相同点:都可以执行insert update delete
不同点:
-
返回类型不同,execute返回boolean,executeUpdata返回int
-
execute除了做insert update delete 还可以做查询,比如getResultSet
-
executeUpdata因为做的事单一,所以效率更高
-
exexuteUpdata操作并更新,execute只操作
六条数据,分页查询:
//分页查询
public static ArrayList<Stu> selAll3(int a, int b) throws Exception{
Connection con = DBLink.getCon();
ArrayList<Stu> arr = new ArrayList<>();
String sql = "SELECT * FROM\n" +
"(\n" +
" SELECT st.*, ROWNUM r FROM stuv3 st WHERE ROWNUM < ?\n" +
") WHERE r > ?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, b);
ps.setInt(2, a);
ResultSet rs = ps.executeQuery();
while(rs.next()){
Stu s = new Stu();
s.setId(rs.getInt("id"));
s.setName(rs.getString("name"));
s.setSex(rs.getString("sex"));
s.setAge(rs.getInt("age"));
arr.add(s);
}
DBLink.close(con);
return arr;
}
ResultSet 用来存放结果集
Class.forName("oracle.jdbc.driver.OracleDriver");当加载一个Driver类时,它应该创建一个自己的实例,并用DriverManager注册它。这意味着用户可以通过调用以下方式加载和注册驱动程序:目的是要用DriverManager来建议连接.