Java学习笔记——Statement数据库操作接口

当获取了java.sql.Connection接口对象之后,那么其核心目的一定不是只为了连接,而是为了进行数据库的操作,而进行数据库的开发操作应该使用标准SQL语句来完成,所以需要有一个SQL的执行器,而执行器就可以利用Statement接口完成。

Statement接口简介

java.sql.Statement是JDBC之中提供的数据库的操作接口,利用其可以实现数据的更新与查询的处理操作,该接口定义如下:
public interface Statement extends Wrapper,AutoCloseable
该接口是AutoCloseable子接口,所以可以得出结论:每一次进行数据库操作完成之后都应该关闭Statement操作,即:一条SQL的执行到一定是一个Statement接口对象。如果要想获取Statement接口对象,那么必须依靠Connection接口提供的方法完成。

  • 获取Statement接口对象:public Statement createStatement() throws SQLException;
    |- 此时抛出的SQLException是JDBC数据库开发之中的最大异常;

当获取了Statement接口对象之后,就可以使用SQL进行处理了,而这里面需要两个方法支持:

  • 数据更新处理(INSERT、UPDATE、DELETE):public int executeUpdate(String sql) throws SQLException
  • 数据查询处理(SELECT、统计查询、复杂查询):public ResultSet executeQuery(String sql) throws SQLException.
    这两个数据库的操作里面都需要接收SQL的字符串,也就是说Statement接口可以直接使用SQL语句实现开发。

【定义】数据库脚本

DROP TABLE news PUGRE ;
DROP SEQUENCE news_seq ;
CREATE SEQUENCE news_seq;
CREATE TABLE news(
	nid NUMBER,
	title VARCHAR2(30),
	read NUMBER,
	price NUMBER,
	content CLOB,
	pubdate DATE,
	CONSTRAINT pk_nid PRIMARY KEY(nid)
) ;

数据更新操作

在SQL语句之中数据的更新操作一共分为三种:增加 INSERT、修改 UPDATE、删除 DELETE。Statement接口的最大特点是可以直接执行一个标准的SQL语句。
【范例】实现数据的增加处理。

  • 增加SQL语法:INSERTINTO 表名称(字段,字段,…)VALUES(值,值,…);
INSERT INTO news(nid,title,read,price,content,pubdate) VALUES (news_seq.nextval,'MLDN-News',10,9.9,'希望你能好好的做好每一天的自己。',TO_DATE('1994-05-25','yyyy-mm-dd'));

对于SQL语句而言,由于一般比较长,所以一定要考虑换行编写,一旦换行了,强烈建议在每个字符串的前后多追加一个空格(避免错误带来的麻烦。)

package demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import oracle.jdbc.driver.OracleDriver;

public class JDBCDemo {
	private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static final String DATABASE_USER = "system";
	private static final String DATABASE_PASSWORD = "Yww19930813";
	public static void main(String[] args) throws Exception {
		Connection conn = null;//每一个COnnection接口对象秒速的就说一个用户连接
		String sql = " INSERT INTO news(nid,title,read,price,content,pubdate) VALUES "
				+ " (news_seq.nextval,'MLDN-News',10,9.9,'希望你能好好的做好每一天的自己。', "
				+ " TO_DATE('1994-05-25','yyyy-mm-dd'))";
		Class.forName(DATABASE_DRIVER);//向容器之中加载数据库驱动程序
		conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
		
		System.out.println(conn);
		Statement stmt = conn.createStatement();//创建数据库操作对象
		int count = stmt.executeUpdate(sql);//返回影响行数
		System.out.println("更新操作影响的数据行数:" + count);
		
		conn.close();//数据库资源有限一定要关闭
	}
}

【范例】:更新操作,在更新操作的时候一般都是做条件性的更新;

  • 更新的SQL语法:IPDATE 表名称 SET 字段=值,… WHERE 更新条件;
package demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import oracle.jdbc.driver.OracleDriver;

public class JDBCDemo {
	private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static final String DATABASE_USER = "system";
	private static final String DATABASE_PASSWORD = "Yww19930813";
	public static void main(String[] args) throws Exception {
		Connection conn = null;//每一个COnnection接口对象秒速的就说一个用户连接
		String sql = "UPDATE news SET content='尝试一下更新操作',read=999,price=100 WHERE nid=5";
		Class.forName(DATABASE_DRIVER);//向容器之中加载数据库驱动程序
		conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
		
		System.out.println(conn);
		Statement stmt = conn.createStatement();//创建数据库操作对象
		int count = stmt.executeUpdate(sql);//返回影响行数
		System.out.println("更新操作影响的数据行数:" + count);
		
		conn.close();//数据库资源有限一定要关闭
	}
}

查询执行结果
在这里插入图片描述

【范例】数据删除

  • 删除语法:DELETE FROM 表名称 WHERE 删除条件(s);
package demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import oracle.jdbc.driver.OracleDriver;

public class JDBCDemo {
	private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static final String DATABASE_USER = "system";
	private static final String DATABASE_PASSWORD = "Yww19930813";
	public static void main(String[] args) throws Exception {
		Connection conn = null;//每一个COnnection接口对象秒速的就说一个用户连接
		String sql = "DELETE FROM news WHERE nid IN(1,2,3,4)";
		Class.forName(DATABASE_DRIVER);//向容器之中加载数据库驱动程序
		conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
		
		System.out.println(conn);
		Statement stmt = conn.createStatement();//创建数据库操作对象
		int count = stmt.executeUpdate(sql);//返回影响行数
		System.out.println("更新操作影响的数据行数:" + count);
		
		conn.close();//数据库资源有限一定要关闭
	}
}

在这里插入图片描述
数据修改里面只需要考虑到不同的SQL语句即可,这也是Statement接口的最大特点:直接执行SQL语句。

数据查询操作

数据更新主要是接收器影响的数据行数,但是数据查询就比较麻烦,因为查询一定要将结果返回给程序,由程序来进行结果的处理,所以在java里面通过ResultSet接口来描述查询结果。
在这里插入图片描述
【范例】实现数据查询处理

package demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

import oracle.jdbc.driver.OracleDriver;

public class JDBCDemo {
	private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static final String DATABASE_USER = "system";
	private static final String DATABASE_PASSWORD = "Yww19930813";
	public static void main(String[] args) throws Exception {
		//在程序开发之中SELECT字句后面必须跟上具体的字段名称,写“*”的都叫垃圾代码~~不能维护
		Connection conn = null;//每一个Connection接口对象秒速的就说一个用户连接
		String sql = "SELECT nid,title,read,price,content,pubdate FROM news";
		Class.forName(DATABASE_DRIVER);//向容器之中加载数据库驱动程序
		conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);	
		System.out.println(conn);
		Statement stmt = conn.createStatement();//创建数据库操作对象
		ResultSet rs = stmt.executeQuery(sql);//查询语句
		while(rs.next()){//现在如果发现还有数据未输出
			int nid = rs.getInt(1);
			String title = rs.getNString(2);
			int read = rs.getInt(3);
			double price = rs.getDouble(4);
			String content = rs.getString(5);
			Date pudate = rs.getDate(6);
			System.out.println(nid + "、" + title+"、"+ read+"、" +price +"、" +content + "、" + pudate);
		}
		
		conn.close();//数据库资源有限一定要关闭
	}
}

oracle.jdbc.driver.T4CConnection@72d818d1
5、MLDN-News、999100.0、尝试一下更新操作、1994-05-25
6、MLDN-News、109.9、希望你能好好的做好每一天的自己。、1994-05-25

需要注意的是,ReslutSet对象是保存在内存之中的,如果说你查询数据的返回结果过大,那么程序也将出现问题。

参考:https://edu.aliyun.com/lesson_1012_9105#_9105

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值