Stement接口和ResultSet接口
Stement接口和ResultSet接口的方法介绍
获取Connection对象后就可以进行各种数据库操作了,此时需要使用Connection对象创建Statement对象。Connection接口常用的方法如下。
方法名称 | 作用 |
---|---|
void close() | 立即释放此Connection对象的数据库和JDBC资源 |
Statement createStatement() | 创建一个Statement对象来将SQL语句发送到数据库 |
PreparedStatement prepareStatement(String sql) | 创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库 |
boolean isClosed() | 查询此Connection 对象是否已经被关闭 |
Statement 对象用于将SQL语句发送到数据库中,可以理解为执行SQL语句。Statement接口中包含很多基本数据库操作方法,表7-4列出Statement接口执行SQl命令的三个常用方法。
方法名称 | 作用 |
---|---|
ResultSet executeQuery() | 可以执行SQl查询并获取ResultSet对象 |
int executeUpdate (String sql) | 可以执行插入,删除,更新的操作,返回值是执行该操作所影响的行数 |
boolean execute(String sql) | 可以执行任意Sql语句。若结果为ResultSet对象,则返回true;若其为更新计数或者不存在任何结果,则返回false |
添加信息
添加很简单,只要创建Statement对象然后调用execute(String sql)方法或者 executeUpdate(String sql方法)即可。这里关键的是SQl语句的拼接,可以直接利用“+”运算符进行拼接,也可以利用StringBuffer类的append()方法进行拼接。拼接时要小心,尤其是引号,逗号,和括号的拼接。
部分代码示例:
Connectin conn=null;
Statement stmt=null;
String name="zhang";
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundException e){
logger.error(e);
}
try{
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/epet","epetadmin","0000");
stmt=conn.createStatement();
StringBuffer sbSql=new StringBuffer("insert into dog(name) values('");
sbSql.append(name+"')");
stmt.execute(sbSql.toString());
logger.info("插入成功");
}catch(){
}finally{
//关闭Statement和数据库连接
}
资料 StringBuffer类的作用
java定义了String和StringBuffer两个类来封装对字符串的各种操作。String类的字符串是常量,它们的值在创建之后不能改变。而StringBuffer类似于String的字符串缓冲区,通过某些方法调用可以改变该字符串的长度和内容,用于存放内容可以改变的字符串。如果StringBuffer生成了最终想要的字符串,可以通过toString()方法转换为一个String对象。
java为字符串提供了字符串连接字符运算符“+”,也可以把非字符串数据转换为字符串并连接成新的字符串。类似“+”运算符的功能也可以通过StringBuffer类的append()方法实现。
例如:
int heatlth=90,love=20;
String sql="SELECT * FROM epet WhERE health>"+health+"AND love"+love;
等效于:
int health=90,love=20;
String sql=new StringBuffer().append("select * from epet where health>")
.append(health)
.append("and love>")
.append(love).toString();
更新信息
更新数据库中id=1的信息。操作也很简单,只要创建Statement对象,然后调用execute(String sql)方法或者executeUpdate(String sql)方法即可。
部分代码:
try{
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/epet","epetadmin","0000");
stmt=conn.createStatement();
stmt.executeUpdate("update dog set name=lisi"+"where id=1");
logger.info("成功更新");
}
使用Statement和ResultSet查询
查询并输出信息,首先还是要创建Statement对象,然后调用executeQuery(String sql)方法执行查询操作,返回值是结果集ResultSet对象。
ResultSet可以理解为由查询结果组成的一个二维表,每行代表一条记录,每列代表一个字段;并且存在一个光标,光标所指的行为当前行,只能对结果集的当前数据进行操作;光标初始位置是第一行之前(而不是指向第一行)。通过ResultSet的next()方法使光标向下移动一行,然后通过一系列getXxx()方法实现对当前行各列的数据的操作。
若执行next()后光标指向结果集的某一行,则返回true;否则返回false。若光标已指向结果集最后一行,再次调用next()方法,会指向最后一行的后面,此时返回fasle。
getXxxx()方法提供了获取当前行中某列值的途径,列号或列名可以用于标识要从中获取数据的列(xx代表基本数据类型,比如int,float等)。采用列名来标识列可读性强,建议多采用这种方式。
部分代码示例:
try{
//省略建立连接
//查询数据
stmt=conn.createStatement();
rs=stmt.executeQuery("select id,name from student");
syso("查询的信息");
while(rs.next()){
syso(rs.getInt(1)+"\t");
syso(rs.getString("name"));
}
}catch{}
这样就可以查询出数据库的数据了
ResultSet接口常用方法及作用
方法名称 | 作用 |
---|---|
boolean next() | 将光标从当前位置下移动一行 |
boolean previous() | 将光标从当前位置上移动一行 |
void close() | 关闭ResultSet对象 |
int getInt(int columnIndex) | 以int的形式获取结果集当前指定列号的值 |
int getInt(String columnLabel) | 以int的形式获取结果集当前指定列名的值 |
flaot getFloat(int columnIndex) | 以float的形式获取结果集当前指定列号的值 |
flaot getFloat(String columnLabel) | 以float的形式获取结果集当前指定列名的值 |
String getString(int columnIndex) | 以String的形式获取结果集当前指定列号的值 |
String getString(int columnLabel) | 以String的形式获取结果集当前指定列名的值 |
int getRow() | 得到光标当前所指行的行号 |
boolean absolute(int row) | 光标移动到row指定的行 |
注意:
1)作为一种好的编程风格,应该在不需要ResultSet对象,Statement对象和Connection对象时显地关闭它们。语句形式为:
public void close() throws SQLException
2)要按先ResultSet结果集,后Statement对象,最后Connection的顺序关闭资源,因为ResultSet是通过Statement执行SQl语句命令得到的,而Statement是需要在创建连接后才能使用的,所以三者之间存在相互依存的关系,关闭时也必须按照依存关系进行。
3)用户如果不关闭ResultSet,当Statement关闭,重新执行或用于从多结果序列中获取下一个结果时,改ResultSet将被自动关闭。