Logo

郎哥编程

执行SQL语句

2020-01-16 278

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接口,在后面的课程介绍。

程序执行结果如下图示:

image.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论