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语句进行开发。
Statement实现数据更新
SQL语句中数据的更新操作分为三种:增加(INSERT)、修改(UPDATE)、删除(DELETE)),Statement最大的特点是可以直接执行一个标准的SQL语句。
实现数据增加处理
- 更新SQL语法:INSERTINTO 表名称(字段,字段,…)VALUES(值,值,…)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo{
private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:mldn"
private static final String DATABASE_USER = "test";
private static final String DATABASE_PASSWORD = "test";
public static void main(String[] args) throws Exception{
String sql = "INSERT INTO news(nid,title) VALUES(news_seq.nextval,"News")";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql); //返回影响的行数
conn.close();
}
}
实现数据更新处理(一般为条件性的更新)
- 删除SQL语法:UPDATE 表名称 STE 字段=值,… WHERE 更新条件;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo{
private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:mldn"
private static final String DATABASE_USER = "test";
private static final String DATABASE_PASSWORD = "test";
public static void main(String[] args) throws Exception{
String sql = "UPDATE news SET title='update' WHERE nid=5";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql); //返回影响的行数
conn.close();
}
}
仅修改sql语句即可。
实现数据删除处理
- 增加SQL语法:DELETE FROM 表名称 WHERE 删除条件(s);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo{
private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:mldn"
private static final String DATABASE_USER = "test";
private static final String DATABASE_PASSWORD = "test";
public static void main(String[] args) throws Exception{
String sql = "DELETE FROM news WHERE nid IN(11,12,25,56)";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(sql); //返回影响的行数
conn.close();
}
}
仅修改sql语句即可。
数据修改中只需要考虑到不同的SQL语句即可,这也是Statement接口的最大特点:直接执行SQL语句。
Statement实现数据查询
数据更新主要是接收其影响数据的数据行数,但是数据查询就比较麻烦了,因为查询一定要将结果返回,所以java中通过ResultSet接口描述返回的结果。
数据查询处理
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class Demo{
private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:1521:mldn"
private static final String DATABASE_USER = "test";
private static final String DATABASE_PASSWORD = "test";
public static void main(String[] args) throws Exception{
// 程序开发中SELECT子句后面必须跟上具体字段名称
String sql = "SELECT nid,title FROM news";
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQurey(sql); //执行查询
while(rs.next()){ //数据未完全输出
int nid = rd.getInt(1);
String title = rs.getString(2); //列数2
System.out.println("nid:" + nid + "-" + "Title:" + title);
}
conn.close();
}
}
需要注意的是,ResultSet对象是保存在内存中的,若查询返回结果过大,那么程序也将出现问题。