MySQL数据库连接成功后,就可以执行SQL语句了,使用SQL语句可以对数据库记录进行查询、更新、添加及删除等操作。执行SQL语句的操作由Statement接口完成,Statement接口在java.sql包内,该接口可以使用Connection接口提供的createStatement()方法实例化。
Connection接口的createStatement()方法是重载方法,具体说明如下:
Statement createStatement()
该方法用于创建向数据库发送SQL语句的Statement对象。
Statement createStatement(int resultSetType, int resultSetConcurrency)
该方法用于创建具有给定类型和并发性的ResultSet对象的Statement对象。此方法与上面的createStatement方法相同,但它允许重写默认的结果集类型和并发性。
参数resultSetType设置结果集类型,结果集类型有如下常量定义:
ResultSet.TYPE_FORWARD_ONLY;
说明:结果集的游标只能向下滚动。
ResultSet.TYPE_SCROLL_INSENSITIVE;
说明:结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
ResultSet.TYPE_SCROLL_INSENSITIVE;
说明:返回可滚动的结果集,当数据库变化时,当前结果集同步改变。
参数resultSetConcurrency设置并发类型,并发类型有如下常量定义:
ResultSet.CONCUR_READ_ONLY;
说明:不能用结果集更新数据库中的表。
ResultSet.CONCUR_UPDATETABLE;
说明:能用结果集更新数据库中的表。
Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
此方法与上面的方法相同。不同之处是多了resultSetHoldability参数,该参数设置ResultSet的保持类型。该保持类型有如下常量定义:
ResultSet.HOLD_CURSORS_OVER_COMMIT;
说明:表示提交当前事务时, 具有此可保存性的打开的 resultset 对象不被关闭。
ResultSet.CLOSE_CURSORS_AT_COMMIT;
说明:表示提交当前事务时,具有此可保存性的打开的 resultset 对象将被关闭
Statement接口的主要方法说明如下:
boolean execute(String sql)
该方法执行给定的SQL语句,该语句可能返回多个结果。执行成功返回true,执行失败返回false。如果执行成功须使用getResultSet或getUpdateCount方法检索结果。
ResultSet getResultSet()
该方法将返回ResultSet对象,该ResultSet对象为当前执行的SQL结果。
int getUpdateCount()
该方法将当前结果作为更新计数返回;如果结果是ResultSet对象或没有更多结果,则返回-1。
ResultSet executeQuery(String sql)
该方法执行数据库查询操作,返回ResultSet对象。
int executeUpdate(String sql)
该方法执行给定的SQL更新语句,该语句可以是INSERT、UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。该方法返回更新的记录数。
void addBatch(String sql)
该方法增加一个待执行的SQL语句。
int[] executeBatch()
该方法将一批SQL语句提交给数据库执行,如果所有命令都成功执行,则返回更新计数数组。该方法返回int类型的数组,数组包含批处理中每个SQL语句的更新计数数组。数组的元素根据SQL语句添加到批处理中的顺序排序。
void close()
该方法立即释放此语句对象的数据库和JDBC资源。
案例1:查询shop数据库shoper表的记录数。
在demo包下新建SqlDemoTest1类。代码如下:
package demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @ClassName: SqlDemoTest1
* @Description: 数据库编程(执行SQL语句)案例1
* @author 编程训练营
* @date
*
*/
public class SqlDemoTest1 {
// 定义JDBC加载路径
static String jdbc = "com.mysql.cj.jdbc.Driver";
// 定义MySQL数据库的连接地址
static String mysqlurl = "jdbc:mysql://localhost:3306/shop?serverTimezone=GMT%2B8";
// 定义MySQL数据库的用户名
static String username = "root";
// 定义MySQL数据库的用户名登录密码
static String password = "~123456q";
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
Connection conn = null;
Statement statement = null;
try {
// 加载JDBC驱动
Class.forName(jdbc);
// 连接数据库
conn = DriverManager.getConnection(mysqlurl, username, password);
if( null != conn )
{
System.out.println(conn);
// 获取表记录数的SQL语句
String sql = "select * from shoper";
// 实例化Statement对象
statement = conn.createStatement();
// 执行SQL语句
boolean bSucess = statement.execute(sql);
if( bSucess )
{
// 获取记录数
ResultSet resultset =statement.getResultSet();
// 将结果集的光标移动到最后一条记录
resultset.last();
System.out.println("shoper表记录数:" + resultset.getRow());
resultset.close();
}
else
{
System.out.println("SQL语句执行失败");
}
statement.close();
conn.close();
}
else
{
System.out.println("数据库连接失败");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}SqlDemoTest1程序的sql语句用于获取shoper表的全部记录,statement对象的execute()方法执行指定的sql语句,如果sql语句执行成功,该方法会返回true。statement对象的getResultSet()方法会返回execute()方法执行后的结果集。程序获取结果集后,调用resultset对象的last()方法将结果集光标移动到结果集的最后一条记录,然后resultset对象的getRow()方法获取当前结果集光标所在记录行数,该记录行数即为结果集的全部记录数。关于ResultSet接口,在后面的课程介绍。
程序执行结果如下图示:
