数据库的访问
1.**大纲**
- 确定数据库
- 连接数据库
- 执行SQL
- 处理结果
- 关闭连接
2.**访问数据库的基本步骤**
- 1**、确定数据库**
- 2**、连接数据库**
- 3**、执行SQL**
- 4**、处理结果**
- 5**、关闭连接**
第 1 步:确定数据库
■JDBC URL ■public static final String JDBCURL_QUESTIONLIB = “jdbc:derby:” + FOLDER_DATA + “/QuestionLib”;
第 2 步:连接数据库
■Connection conn = DriverManager.getConnection(jdbcurl); //**可提供url、用户名、密码3个参数 ■Connection conn = DriverManager.getConnection(JDBCURL_QUESTIONLIB); ■Connection conn = DriverManager.getConnection(JDBCURL_QUESTIONLIB, “”, “”);**
第 3 步:执行SQL
(1)使用Statement ■Statement stmt = conn.createStatement(); //**可提供2个参数 ~**参数1:结果集游标的滚动类型及对数据库变化的反映 **ResultSet.TYPE\_FORWARD\_ONLY**
ResultSet.TYPE_SCROLL_INSENSITIVE **ResultSet.TYPE\_SCROLL\_SENSITIVE** ~**参数2:是否能用结果集对数据库进行更新**
ResultSet.CONCUR_READ_ONLY `ResultSet.CONCUR_UPDATABLE ■执行查询(select) ■ResultSet rset = stmt.executeQuery(sql**语句); ■执行更新(insert;delete;update) ■int rows = stmt.executeUpdate(sql**语句); ■执行其它 ■boolean v = stmt.execute(sql**语句); Xv == true**:有结果集,可获得结果集进行处理 Xv == false**:无结果集 ————imely: (2)使用PreparedStatement //继承自Statement<不浪费时间进行的快速> ■PreparedStatement stmt = conn.prepareStatement(sql); //**可提供2个参数 ■PreparedStatement stmt = conn.prepareStatement(“select * from choice where knowledge=? and difficulty=?”, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ■stmt.setXxx(1, x); stmt.setXxx(2, x); ■执行查询(select) ■ResultSet rset = stmt.executeQuery(); ■执行更新(insert;delete;update) ■int rows = stmt.executeUpdate(); ■执行其它 ■boolean v = stmt.execute(); (3)使用CallableStatement //继承自PreparedStatement ■CallableStatement stmt = conn.prepareCall(sql);
第 4 步:处理结果
■使用 ResultSet 接口提供的方法对结果集数据进行处理 ■说明 ■主要操作:① 记录指针;② 获取数据 1.记录指针:开始指向表头行,可进行移动(只能向前;前后皆可) 2.获取数据:对于记录指针指向的行,可以使用列号或列名获取数据 ■使用列号时列号从 1 开始计 ■只能读取一次,不能重复读取,可存储在一个变量中重复使用
列名1
列名2
列名3
列名4
……
数据1
数据2
数据3
数据4
……
……
……
……
……
……
数据1
数据2
数据3
数据4
……
ResultSet 学会掌握并且分清楚 JDK中的方法,指针开始的地方!返回值等用途!!! ■记录指针 ■boolean next(); ■boolean previous(); ■boolean first(); ■boolean last(); ■void beforeFirst(); ■void afterLast(); ■boolean absolute(int); ■boolean relative(int); ■boolean isBeforeFirst(); ■boolean isAfterLast(); ■boolean isFirst(); ■boolean isLast(); …… ■记录指针 ■boolean next(); ■boolean previous(); ■boolean first(); ■boolean last(); ■void beforeFirst(); ■void afterLast(); ■boolean absolute(int); ■boolean relative(int); ■boolean isBeforeFirst(); ■boolean isAfterLast(); ■boolean isFirst(); ■boolean isLast(); ■……
第 5 步:关闭连接
■conn.close(); ■
- _对于一个Statement对象stmt,执行查询后得到一个ResultSet结果集rset1,若再次使用stmt执行查询后得到另一个结果集rset2,则rset1会自动关闭。_
- _要想保持两个结果集都不关闭,就需要使用两个Statement对象分别执行各自的查询。_