第二天:JDBC和DBUtils

  那只是自家本人的随笔博客~,用于一时纪念知识,可能存在部分错误,如有错误,招待指正~

一、eclipse的使用

第豆蔻年华对于JDBC连接MySQL,要询问基本的架构

1、订正注释内容

图片 1

选择window—->>preferences

画的可比烂,大概便是那样的结构

图片 2

下一场看一下现实贯彻的 代码:;

慎选Java—->>codestyle—->>code
template—->>comments,然后双击types,更正里面包车型大巴内容就可以!

public class DBUtil {
 private String user = "root";
 private String password = "root";
 private String url = "jdbc:mysql://localhost:3306/mydb6";
 private static DBUtil dbUtil;
 Connection connection = null;

 // 单例:构造方法私有化
 private DBUtil() {

 }

 public synchronized static DBUtil getInstance() {
  if (dbUtil == null) {
   dbUtil = new DBUtil();
  }
  return dbUtil;
 }

 /**
  * 创建数据库连接
  */
 public Connection getConnection() {
  if (connection == null) {
   try {
    // 注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    // 获取连接
    connection = DriverManager.getConnection(url, user, password);
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  return connection;
 }
}

 

  上边那个是通过单例形式 
建构了DBUtil这样三个类。通过这一个类可以怎么呢?能够完毕—-数据库的接连!

图片 3

不容争辩,Connection接口的效果正是一而再一连数据库-
与特定数据库的接连(会话卡塔 尔(英语:State of Qatar)。在接连内外文中实行 SQL 语句并回到结果。

2、改过Eclipse里面包车型客车连忙键

如何才干获得这一个三番五次呢?–想要营造这几个一连,你要求注册四个驱动—嗯~正是那一个代码 
 Class.forName(“com.mysql.jdbc.Driver”);  

举例:改革复制行内容快速键。

它是经过反射的建制来赢得的,不打听反射?嗯~那您难忘就完了
哈哈哈

1.点击window菜单->preferences子菜单->general->keys,步向快速键管理分界面

connection = DriverManager.getConnection(url, user,
password);这一句话的是用来得到连接的 ,那八个参数分别是 
 数据的地址,jdbc:mysql://IP地址:端口号/数据库的名号

图片 4

嗯~然年再将眨眼之间间什么样通过jdbc向数据库写入数据

 

public int insertStuByStatement() {
        String sql1 = "insert into stu(sname,sage) values('aaa',1)";
        String sql2 = "insert into stu(sname,sage) values('bbb',1)";
        String sql3 = "insert into stu(sname,sage) values('ccc',1)";
        Connection connection = getConnection();// 获得数据库的连接
        Statement stmt = null;
        try {
            stmt = (Statement) connection.createStatement();
            connection.setAutoCommit(false);
            stmt.addBatch(sql1);//批量添加sql语句
            stmt.addBatch(sql2);//批量添加sql语句
            stmt.addBatch(sql3);//批量添加sql语句
            //一次性执行
            stmt.executeBatch();
            connection.commit();
            System.out.println("批处理成功");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (Exception e2) {

            }
        }
        return i;
    }

 

此处运用的statement 来落成的,写出您要操作的
sql语句。(提一下,常常这几个操作都以献身DBUtil类中的额
,那么些情势本人也是放在DBUtil的卡塔 尔(英语:State of Qatar)。

2.在那地能够找出全部效能的快速键,须求修改或新添时,点击要求匡正或新扩张的一声令下,在binding里安装飞速键

其次步:总局方的概念的章程得到数据库。

图片 5

上面正是得到一个Statement 对象,然后通过那么些指标的stmt.executeBatch();就足以在数据库中实施方才就的语句了,那样就完毕了静态插入数据。

 

那动态插入数据是什么的呢
?—–那正是用到了另叁个可见达成语句的对象PreparedStatement

3.装置完快速键后,还索要安装在什么样时候能够接收该火速键,eclipse提供各个地方供选取,经常选取In
Windows(即在eclipse窗口激活状态)就可以

直接上代码吧 

图片 6

public int insertStu(String sname,int sage){
        String sql = "insert into stu(sname,sage) values(?,?)";
        Connection connection = getConnection();//获得数据库的连接
        PreparedStatement ps = null;
        int i = 0;
        try {
            ps  = (PreparedStatement) connection.prepareStatement(sql);
            ps.setString(1, sname);
            ps.setInt(2, sage);

            i=ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if (ps!=null) {
                ps.close();
                }
            } catch (Exception e2) {

            }
        }
        return i;
    }

 

概念的插入方法有了三个参数的数值

成功以上操作,点击OK即成功安装

与statement的区分在哪呢?–二个是sql字符串语句的差异,多了“?”,效能是—看上面这两行代码

图片 7

 ps.setString(1, sname);
 ps.setInt(2, sage);
 ps.set****(a,b)有两个参数,sql语句中也有两个?,所以参数a,代表的是sql语句的第几个“?”,如果参数是1,则说明sql语句中第一个“?”的位置替换为参数b,
 如果 同理如果参数是2,则说明sql语句中第一个“?”的位置替换为参数b.这样就做到了动态的插入数据,我们只要在调用插入方法的时候传入想要插入的数据就好了,不用每次都写新的sql语句。
 对于 i=ps.executeUpdate();语句,它返回的这次你的数据库操作后有有几条数据有影响.这种方法对于插入,当然是i=1了

但是对于产出和修改的就不是一定了,删除修改我直接贴代码了就不再做讲解

//修改
public int updateStu(int sage,String sname){
        String sql = "updae stu set sage = ? where sname = ?";
        Connection connection = getConnection();
        PreparedStatement ps =null;
        int i  = 0;
        try {
            ps = (PreparedStatement) connection.prepareStatement(sql);
            ps.setInt(1, sage);
            ps.setString(2, sname);

            i  = ps.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if (ps!=null) {
                ps.close();
                }
            } catch (Exception e2) {

            }
        }
        return i;
    }
    //删除
        public int deleteStu(String sname,int sage) {
            String sql = "delete from stu where sname=? and sage = ?";
            Connection conn = getConnection();//获得数据库连接
            PreparedStatement ps = null;
            int i = 0;
            try {
                ps = (PreparedStatement) conn.prepareStatement(sql);
                ps.setString(1, sname);
                ps.setInt(2,sage );

                i = ps.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                try {
                    if(ps != null)
                        ps.close();
                }catch (Exception e) {
                    // TODO: handle exception
                }
            }
            return i;

        }

3、设置专业空间的编码

 

 图片 8

数据库最重要的是什么---查询数据,相对于增删改--查可能稍微繁琐一点
代码如下:

/**
     * 查询所有学生
     * @return
     */
    public ArrayList<Stu> queryStu(){
        String sql = "select * from stu ";// select *  或的字段的顺序和数据库中的是一致
        Connection conn = getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        ArrayList<Stu> stus = new ArrayList<Stu>();//此集合用于存储每一个学生对象
        try {
            ps = (PreparedStatement) conn.prepareStatement(sql);
            rs = ps.executeQuery();
            //遍历rs
            while(rs.next()) {//true表示有下一条数据
                int id = rs.getInt("id");
                String sname = rs.getString("sname");
                int sage = rs.getInt("sage");
                //创建stu对象
                Stu stu = new Stu(id, sname, sage);
                //收集对象
                stus.add(stu);
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(rs != null)
                    rs.close();
                if(ps != null)
                    ps.close();
            }catch (Exception e) {
                // TODO: handle exception
            }
        }

        return stus;
    }

 

讲一下至关重大的地点     ResultSet rs

null;  这一个目的存款和储蓄的二个询问的结果会集。select *
from stu那几个重回的 应该是询问的学习者表中每一个学员的具备数据,

所以rs就能够积累那样的贰个集聚,然后经过遍历获得在那之中的数据,将数据赋值给二个学员对目的,将对象参加到集合中,就获得可表中全部的数码~

 

此番讲的主假诺基本功部分,等下一次摧枯拉朽索求JDBC联合别的的生龙活虎部分操作~

Class.forName("com.mysql.jdbc.Driver");

二、JUnit单元测量检验

1、介绍:JUnit是二个java语言的单元测量检验框架。归于第三方工具,日常情状下须求导入jar包,不过繁多java开垦条件已经集成了JUnit作为单元测验工具。

创建“day07”java项目,并创建“cn.itcast.a_junit”包 

 图片 9

2、编写测验类,轻便了然能够用于代替java的main方法

3、在测量试验类方法上增加证明@Test

4、注明修饰方法供给:public void 方法名(){…},方法名自定义提出test伊始

图片 10

5、加多STS中合拢的Junit库,鼠标点击“@Test”,使用快速键“ctrl+1”,点击“Add
Junit…”

图片 11

结果

图片 12

6、使用:选中方法右键,实行业前艺术;选中类名右键,实行类中有着办法(方法必需标记@Test卡塔 尔(英语:State of Qatar)

图片 13

7、常用注脚

    @Test,用于修饰需求推行的办法

    @Before,测量检验方法前实践的主意

    @After,测量试验方法后施行的措施

图片 14

8、何奇之有使用不当,若无增加“@Test”,使用“Junit Test”实行运营,将抛万分

图片 15

三、JDBC

1、什么是JDBC

JDBC(Java DataBase
Connectivity)正是java数据库连接,轻便地说正是用java语言来操作数据库。原本作者们操作数据库是在调节台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句

<1>JDBC是大器晚成种用于实施SQL语句的java API

<2>JDBC可感到各个关周全据库提供联合访谈入口

<3>JDBC由生龙活虎组java工具类和接口组成

2、JDBC原理

开始时期SUN公司的天赋们想编写风流洒脱套能够连绵不断天下全部数据库的API,不过当他俩刚刚开首时就开采那是不可达成的职分,因为各类厂家的数据库服务器差距太大了。后来SUN初阶与数据库商家们商量,最后得出的下结论是,由SUN提供风度翩翩套访谈数据库的正式(正是生龙活虎组接口卡塔 尔(阿拉伯语:قطر‎,并提供连接数据库的说道正式,然后挨门逐户数据库香港中华厂商联合会服从SUN的正统提供大器晚成套访问自身公司的数据库服务器的API现身。SUN提供的规范命名叫JDBC。而大器晚成风流倜傥商家提供的,遵从了JDBC规范的,能够访谈自数据库的API被称作驱动。

图片 16

JDBC是接口,而JDBC驱动才是接口的落到实处,未有驱动不能成功数据库连接!每一种数据库商家都有和好的驱动,用来连接自身公司的数据库。

当然还只怕有第三方公司刻意为某风流倜傥数据库提供驱动,这样的驱动往往不是开源免费的!

3、JDBC核心类(接口)介绍

JDBC中的主旨类有:DriverManager、Connection、Statement和ResultSet

DriverManager(驱动微处理器卡塔尔国的效果有多个

<1>注册驱动:那能够让JDBC知道要接受的是哪个驱动;

<2>获取Connection:假诺能够取拿到Connection,那么注解已经与数据库连接上了。

    Connection对象表示连接,与数据库的通信都以经过这一个指标举行的;

<3>Connection最为重大的三个艺术正是用来收获Statement对象;

<4>Statement是用来向数据库发送SQL语句的,那样数据库会实施发送过来的的SQL语句

<5>void executeUpdate(String
sql):实践更新操作(insert、update、delete等);

<6>ResultSet executeQuery(String
sql):实行查询操作,数据库在实行查询后会重返查询结果,查询  
 结果就是ResultSer;

    ResultSet对象表示查询结果集,独有在进行查询操作后才会有结果集的发生。结果集是一人二维
   
的表格,有行有列。操作结果集要学习活动ResultSet内部的“行光标”,以至取稳妥前进上的数码

<7>boolean
next():使“行光标”移动到下风流倜傥行,并赶回移动后的行是或不是存在;

<8>xxx getxxx(int
col):获取当前行钦点列上的值,参数正是列数,列数从1上马,并不是0

4、JDBC开荒步骤

4.1 导入mysql数据库的驱动jar包:

<1>创制lib目录,用于贮存当前项目要求的具有jar包

<2>接纳jar包,右键施行build path/Add to Build Path

图片 17

4.2 注册驱动

注册驱动就独有一句话:Class.forName(“com.mysql.jdbc.Driver”),

上边的源委都以对那句代码的讲授。未来大家的代码中,与注册驱动相关的代码唯有这一句。

<1>剖判步骤1:JDBC规范定义驱动接口:java.sql.Driver,

               MySql驱动包提供了得以完毕类:com.mysql.jdbc.Driver 
<2>分析步骤2:DriverManager工具类,提供注册驱动的艺术registerDriver(),

             
 方法的参数是java.sql.Driver,所以大家能够透过如下语句实行挂号

               DriverManager.registerDriver(new
com.mysql.jdbc.Driver());

               以上代码不引入使用,存在双方面相差:

               1.硬编码,早先时期不易于程序扩大和保证

               2.使得被注册两遍

<3>深入分析步骤3:万般开垦大家使用Class.forName()加载叁个使用字符串描述的驱动类。

             
 如若运用Class.forName()将加载到内部存款和储蓄器,该类的静态代码将自动实践

              
通过询问com.mysql.jdbc.Driver源码,我们发掘Driver类“主动”将团结举行注册 

DriverManager类的registerDriver()方法的参数是java.sql.Driver,但java.sql.Driver是几个接口,完成类由mysql驱动来提供,mysql驱动中的java.sql.Driver接口的贯彻类为com.mysql.Driver那么注册驱动的代码如下:

    DriverManager.registerDriver(new com.mysql.jdbc.Driver());

    下面的代码即使能够注册驱动,可是现身硬编码(代码信赖mysql驱动jar包卡塔 尔(英语:State of Qatar),如若将来想连接Oracle数据库,那么必定要改过代码。况兼实际这种注册驱动的情势是注册了四回驱动!

    JDBC中明确,驱动类在被加载时,须求协和“主动”把本身注册到DriverManager中,上面来探望com.mysql.jdbc.Driver类的源代码:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch(SQLException E) {
            throw newRuntimeException("Can't register driver!");
        }
    }
……
}

com.mysql.jdbc.Driver类中的static块会创立本类对象,并登记到DriverManager中,那表明只要去加载com.mysql.jdbc.Driver类,那么就能够举行这一个static块,进而也就能够把com.mysql.jdbc.Driver注册到DriverManager中,所以能够把挂号驱动类的代码修正为加载驱动类。

Class.forName(“com.mysql.jdbc.Driver”);    

4.3 获取连接

代码:Connection
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydbl”,”root”,”root”)

获得连接必要两步,一是应用DriverManager来注册驱动,二是应用DriverManager来获取Connection对象。

    获取连接的也仅有一句话代码:

    DriverManager.getConnection(url,username,password);

    此中username和password是登陆数据库的客商名和密码

    url相对复杂一点,它是用来找到要连接数据库的“网站”,就好比你要在浏览器中查究百度时,也需求提供三个url。上边是mysql的url:

    jdbc:mysql://localhost:3306/mydbl

    JDBC规定url的格式由三局地构成,每种部分中档使用冒号分割。

    <1>第意气风发有的是jdbc,那是定点的;

    <2>第二有个别是数据库名称,那么连接mysql数据库,第二有个别当然是mysql了;

    <3>第三有的是由数据库商家规定的,大家需求精通各类数据库商家的渴求,mysql的第三片段各自
   
 由数据库服务器的IP地址(localhost)、端口号(3306),以至database名称(mybdl)组成

    下边是收获连接的语句: 

    Connection
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/web08″,”root”,”root”);

     还足以在url中提供参数:

    jdbc:mysql://localhost:3306/web08?useUnicode=true&characterEncoding=UTF8

    useUnicode参数内定那一个延续数据库的长河中,使用的字节集是Unicode字节集;

    characterEncoding参数钦命java程序连接数据库的长河中,使用的字符集编码为UTF-8编码。注意,mysql中内定UTF-8编码给出的是UTF8,并非UTF-8

4.4 获得说话实施

String sql=”insert into
category(cid,cname) values(‘c007′,’分类’)”;

Statement
stmt=con.createStatement();

在获取Connection之后,表明已经与数据库连接上了,上面是经过Connection获取Statement对象的代码:

    Statement
stmt=con.createStatement();

    Statement是用来向数据库发送要实行的SQL语句的

常用方法:

执行SQL语句:

    <1>int executeUpdate(String sql);—执行insert update
delete语句.(DML语句)

    <2>ResultSet executeQuery(String
sql);
—执行select语句(DQL语句)

    <3>boolean execute(String
sql);
—实施select重回true,施行其它的话语重返false 

        要是回去true,需求选择getResultSet()拿到查询结果

        假设回去false,需求运用getUpdateCount()拿到影响行数

实行批管理:(可选卡塔尔

    addBatch(String sql);

    clearBatch();

    executeBatch();

4.5 预管理对象

使用途理对象时,提议每条sql语句全数的莫过于参数,都使用逗号分隔

String sql=”insert into category(cid,cname) values(?,?)”;

PreparedStatement psmt=con.prepareStatement(sql);

常用方法:

执行SQL语句:

    <1>int executeUpdate(String sql);—执行insert update
delete语句.(DML语句)

    <2>ResultSet executeQuery(String
sql);
—执行select语句(DQL语句)

    <3>boolean execute(String
sql);
—施行select重返true,施行其它的话语重临false 

安装实际参数:

    setxxx(int,T)通过setter方法将?占位符替换到实际上参数

    比如:setString()实际参数类型为hi字符串

进行批处理:(可选卡塔 尔(英语:State of Qatar)

    addBatch;
增添批处理的其实参数,必要调方法前实施对应setter方法

    clearBatch();

    executeBatch();

4.6 处理结果集

ResultSet正是一张二维的表格,它在这之中有二个“行光标”,光标暗中同意地方在“第大器晚成行上方”,大家可以调用rs对象的next()方法把“行光标”向下活动大器晚成行,当第一遍调用next()方法时,“行光标”就到了第风流倜傥行记录之处,这个时候就能够利用ResultSet提供的getxxx(int
col)方法来获取钦赐列的多少了:

    rs.next();//光标移动到第风度翩翩行

    rs.getInt(1);//光标移动到第一列的多少

图片 18

    当您使用rs.getInt(1)方法时,你必得能够一定第1列的数据类型便是int类型,即便您不能够一定,那么最佳利用rs.getObject(1)。在ResultSet类中提供了生龙活虎多如牛毛的getxxx()方法,比较常用的法子有:

    Object getObject(int col)

    String getString(int col)

    int getInt(int col)

    double getDouble(int col)

4.7 释放财富

与IO流同样,使用后的事物都急需关闭,关闭的顺序是先拿走的后关门,后获取的先关闭

    rs.close();

    stmt.close();

    con.close;

4.8 完结查询操作代码

    public static Connection getConnection() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        String url ="jdbc:mysql://localhost:3306/web08";
        return DriverManager.getConnection(url, "root", "root");
    }

    @Test
    public void query() throws Exception{
        Connectioncon = getConnection();
        Statementstmt = con.createStatement();
        String sql ="select * from user";
        ResultSet rs= stmt.executeQuery(sql);
        while(rs.next()){
            String username = rs.getString(1);
            String password = rs.getString(2);
            System.out.println(username+ ", " + password);
        }
    }

4.9 规范化代码

所谓规范化代码就是不管是还是不是现身非常,都要关闭ResultSet、Statement,以致Connection

    @Test
    public void query() {
        Connection con = null;
        Statement stmt = null;
        ResultSet rs= null;
        try {
            con = getConnection();
            stmt =con.createStatement();
            String sql = "select * from user";
            rs =stmt.executeQuery(sql);
            while(rs.next()){
                String username = rs.getString(1);
                String password = rs.getString(2);
                System.out.println(username+ ", " + password);
            }
        } catch(Exceptione) {
            throw newRuntimeException(e);
        } finally {
            try {
                if(rs != null)rs.close();
                if(stmt != null) stmt.close();
                if(con != null)con.close();
            } catch(SQLExceptione) {}
        }
    }

4.10 案例:查询全体

图片 19

图片 20

5、JDBC对象介绍

5.1JDBC中的主要类(接口卡塔 尔(英语:State of Qatar)

<1>DriverManager

<2>Connection

<3>Statement

<4>ResultSet

5.2 DriverManager

大家以往只须求会用DriverManager的getConnection()方法就可以:

<1>Class.forName(“com.mysql.jdbc.Driver”);

<2>String url=”jdbc:mysql://localhost:3306/web08″;

<3>String username=”root”

<4>String password=”root”

<5>Connection
con=DriverManager.getConnection(url,username,password);

只顾:上边代码大概现身的三种特别:

<1>ClassNotFoundException:那个这么些是在第1句上冒出的,现身那一个可怜有七个或许:

    (1)你从未给出mysql的jar包;

    (2)你把类名打错了,查看类名是还是不是com.mysql.jdbc.Driver。

<2>SQLException:那一个非常出将来第5句,现身那么些非常就是多少个参数的难题,往往username和password日常不会出错,所以需求认真查阅url是还是不是打错

    对于DriverManager.registerDriver()方法精晓就能够,因为大家随后注册驱动只会用
                Class.forName(),而不会使用那么些法子

5.3 Connection

    Connection最为首要的点子正是获取Statement:

    (1)Statement stmt=con.createStatement();

    前面在上学ResultSet方法时,还要学习一下上面包车型地铁措施

    (2)Statement stmt=con.createStatement(int,int);

5.4 Statement

    Statement最为关键的格局是:

    <1>int executeUpdate(String
sql):
实践更新操作,即进行insert、update、delete语句,其实

    那些法子也能够实施create table、alter table,甚至drop
table等说话,但我们相当少会使JDBC

    来进行这几个讲话;

    <2>ResultSet executeQuery(String
sql):
试行查询语句,试行查询操作会重返ResultSet,即结果集;

    <3>boolean execute():Statement还应该有三个boolean
execute()方法,这几个措施能够用来履行      
增、删、改、查全数的SQL语句,该格局重返的是boolean类型,表示SQL语句是不是实施成功。

    若是使用execute()方法试行的是翻新语句,那么还要调用int
getUpdateCount()来博取insert、       update、delete语句所影响的行数

    若是使用execute()方法履行的是询问语句,那么还要调用ResultSet、getResultSet()来博取
        select语句的查询结果

5.5 ResultSet之滚动结果集(掌握)

    ResultSet表示结果集,它是叁个二维的报表!ResultSet内部维护二个行光标(游标卡塔尔国,ResultSet提供了生龙活虎多级的艺术来运动游标:

    <1>void
beforeFirst():
把光标放到第生龙活虎行的前方,那也是光标暗许之处;

    <2>void afterLast():把光标放到最终意气风发行的末尾;

    <3>boolean
first():
把光标放到第黄金年代行的职责上,重回值表示调节光标是或不是成功;

    <4>boolean
last():
把光标放到最毕生机勃勃行的职责上;重返值表示调节光标是还是不是成功

    <5>boolean
isBeforeFirst():
一时光标地方是不是在第意气风发行后边;

    <6>boolean
isAfterLast():
日前光标地点是还是不是在最终一行的末端;

    <7>boolean isFirst():当下光标地方是或不是在第生机勃勃行上;

    <8>boolean isLast:一时一刻光标地方是否在结尾大器晚成行上;

    <9>boolean next():把光标向下挪风流倜傥行;

    <10>boolean relative(int
row):
周旋位移,当row为正数时,表示向下移动row行,为负数时    
表示发展移动row行;

    <11>boolean absolute(int
row):
纯属位移,把光标移动到钦点行上;

    <12>int getRow():归来当前光标所有行

    上边方法分为两类,大器晚成类用来剖断游标地点的,另生龙活虎类是用来运动游标的。假诺结果集是不可滚动的,那么只可以采纳next()方法来运动游标。而beforeFirst()、afterLast()、first()、last()、previous()、relative()方法都不能够应用!

    结果集是还是不是援救滚动,要从Connection类的createStatement()方法聊起,约等于说创立的Statement决定了使用Statement创造的ResultSet是还是不是帮衬滚动

    Statement createStatement(int resultSetType,int
resultSetConcurrency)

    resultSetType的可选值:

    (1)ResultSet.TYPE_FORWARD_ONLY:不滚动结果集

    (2)ResultSet.TYPE_SCROLL_INSENSITIVE:滚动结果集,但结果集数据不会再尾随数据库而变
     化;

    (3)ResultSet.TYPE_SCROLL_SENSITIVE:滚动结果集,但结果集数据不会在跟随数据库而改动

    能够看出,若是想利用滚动的结果集,大家应该选择TYPE_SCROLL_INSENSITIVE!其实很稀少数据库驱动会扶持TYPE_SCROLL_SENSITIVE的本性!日常大家也无需查询到的结果集再碰到数据库变化的震慑

    resultSetConcurrency的可选值:

    (1)CONCUR_READ_ONLY:结果集是只读的,不能因此改动结果集而反向影响数据库;

    (2)CONCUR_UPDATABLE:结果集是可更新的,对结果集的换代能够反向影响数据库;

    日常可更新结果集那黄金年代“高等特性”大家也是没有需求的!

    获取滚动结果集的代码如下:

    Connection con=Statement
stmt=con.createStatement(ResultSet.TYPE.SCROLL.INSENSITIVE,CONCUR_READ_ONLY);

    String
sql=….//查询语句

   ResultSet
rs=stmt.executeQuery(sql);//那些结果集是可滚动的

5.6
ResultSet之获取列数据

    能够由此next()方法使ResultSet的游标向下移动,当游标移动到你供给的行时,就要求来拿到该行的数量了,ResultSet提供了意气风发密密层层的收获列数据的法子:

   
(1)String getString(int columnIndex):拿到内定列的String类型数据;

    (2)int
getInt(int columnIndex):
获取内定列的int类型数据

发表评论

电子邮件地址不会被公开。 必填项已用*标注