00 36Java高级之Statement数据库操作接口

1 Statement接口简介

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

java.sql.Statement是JDBC之中提供的数据库的操作接口,利用其可以实现数据的更新与查询的处理操作,该接口定义如下:

public interface Statement extends Wrapper, AutoCloseable

该接口是AutoCloseable子接口,所以可以得出结论:每一次进行数据库操作完成之后都应该关闭Statement操作,即一条SQL的执行一定是一个Statement接口对象,但是如果要想获取Statement接口对象,那么必须依靠Connection接口提供的方法:
(1)获取Statement接口对象:Statement createStatement() throws SQLException
|——此时抛出的SQLException是JDBC数据开发之中的最大异常;

当获取了Statement接口对象之后,就可以使用SQL进行处理了,而这里面需要两个方法的支持:
(1)数据更新处理(INSERT、UPDATE、DELETE):int executeUpdate​(String sql) throws SQLException
(2)数据查询处理(SELECT、统计查询、复杂查询):ResultSet executeQuery​(String sql) throws SQLException
这两个数据库的操作方法里面都需要接收SQL的字符串,也就是说Statement接口可以直接使用SQL语句实现开发。

2 Statement实现数据更新

在SQL语句之中数据的更新操作一共分为三种:增加(INSERT)、修改(UPDATE)、删除(DELETE)。Statement接口的最大特点是可以直接执行一个标准的SQL语句。
范例:实现数据的增加处理
(1)增加SQL语句:INSERT INTO 表名称(字段,字段,…) VALUES(值,值,…);

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = " INSERT INTO PERSON_INFO_TABLE(id,name,dateofbirth,idnumber,placeoforigin) "
				+ " VALUES(1000, 'LKS', DATE('1996-10-15'), '123456199610153546', '河南') ";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

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

范例:更新操作,在进行更新操作的时候一般都是做条件性的更新;
(1)更新的SQL语句:UPDATE 表名称 SET 字段=值,… WHERE 更新条件;

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "UPDATE PERSON_INFO_TABLE SET id=1001,name='hhy' WHERE id=1000";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

范例:数据删除
(1)删除语法:DELETE FROM 表名称 WHERE 删除条件(s);

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "DELETE FROM PERSON_INFO_TABLE WHERE id=1001";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		int num = stat.executeUpdate(sql);
		System.out.println(num);
		conn.close();
	}
}

数据修改里面只需要考虑到不同的SQL语句即可,这也是Statement接口的最大特点(直接执行SQL语句) 。

3 Statement实现数据查询

数据更新主要是接收其影响的数据行数,但是数据查询就比较麻烦了,因为查询一定要将结果返回给程序,由程序来进行结果的处理,所以在Java里面通过ResultSet接口来描述查询结果。

范例:实现数据的查询处理

package org.lks.demo;

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

public class MySQLJDBCDemo {
	private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
	private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/research_managerment?useSSL=true&serverTimezone=UTC";
	private static final String DATABASE_USER = "root";
	private static final String DATABASE_PASSWORD = "19990821";
	
	public static void main(String[] args) throws Exception{
		String sql = "SELECT ID,NAME,DATEOFBIRTH FROM PERSON_INFO_TABLE";
		Connection conn = null;
		Class.forName(DATABASE_DRIVER);
		conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
		Statement stat = conn.createStatement();
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()) {
			int id = rs.getInt("id");
			String name = rs.getString("name");
			Date date = rs.getDate("dateofbirth");
			System.out.println(id + "  " + name + "  " + date.toString());
		}
		conn.close();
	}
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章