CONCUR_UPDATABLE
时间: 2023-12-17 22:05:12 浏览: 29
`CONCUR_UPDATABLE`是Java JDBC API中的一个参数,用于指定结果集是否可更新。如果使用此参数,可以在结果集中更新数据并将更改保存回数据库。以下是一个使用`CONCUR_UPDATABLE`参数的Java代码示例:
```java
String sql = "SELECT id, name, age FROM students";
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE
);
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int age = rs.getInt("age");
if (age < 18) {
rs.updateString("name", "未成年");
rs.updateRow();
}
}
```
上述代码中,我们使用`CONCUR_UPDATABLE`参数创建了一个可更新的结果集。然后,我们遍历结果集,如果某个学生的年龄小于18岁,就将他的名字改为“未成年”,并通过`updateRow()`方法将更改保存回数据库。
相关问题
public void connection(){ //建立连接数据库 try{ Class.forName("com.hxtt.sql.access.AccessDriver"); //JDBC-ODBC桥接器 System.out.println("驱动已加载"); conn = DriverManager.getConnection("jdbc:Access:///E:/1234/student.mdb","",""); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); }catch(ClassNotFoundException e1){ e1.printStackTrace(); }catch(SQLException e2){ e2.getSQLState(); e2.getMessage(); } }把这个代码的数据库连接方式改为mysql
将代码中的以下行:
```java
Class.forName("com.hxtt.sql.access.AccessDriver");
conn = DriverManager.getConnection("jdbc:Access:///E:/1234/student.mdb","","");
```
改为以下行:
```java
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase", "username", "password");
```
请将“mydatabase”替换为您要连接的MySQL数据库的名称,“username”和“password”替换为您的MySQL数据库的用户名和密码。如果您的MySQL数据库不在本地主机上,则需要将“localhost”替换为MySQL服务器的IP地址或主机名。
在更改这些行之后,您还需要将JDBC驱动程序的类路径更改为适当的MySQL驱动程序。请确保已将MySQL驱动程序的JAR文件添加到您的项目类路径中,并将以下行:
```java
Class.forName("com.mysql.jdbc.Driver");
```
更改为指向正确的MySQL驱动程序类路径。
请注意,您还需要更改代码中的SQL查询和更新语句,以适应MySQL数据库的语法。例如,您需要使用“INSERT INTO”语句插入数据,而不是“VALUES”子句。
给定如下程序: public ArrayList<Map<String, String>> queryForList(String sql) { ArrayList<Map<String, String>> results = null; stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); if (rs != null) { results = new ArrayList<Map<String, String>>(); while (rs.next()) { Map<String, String> result = new HashMap<String, String>(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); for (int i = 1; i <= columnCount; i++) { String fieldName = rsmd.getColumnName(i).toLowerCase(); String fieldValue = rs.getString(i); result.put(fieldName, fieldValue); } results.add(result); } } return results; } 要求:(1)绘制该程序相应的流图;(50分) (2)计算流图的环形复杂度,要有具体的计算过程及计算方法;(10分) (3)确定线性独立路径的基本集合;(40分)
1. 绘制流程图
```
+------------------------+
| |
| queryForList |
| |
+------------------------+
|
v
+------------------------+
| |
| stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); |
| |
+------------------------+
|
v
+------------------------+
| |
| rs = stmt.executeQuery(sql); |
| |
+------------------------+
|
v
+------------------------+
| |
| if (rs != null) { |
| |
+------------------------+
|
v
+------------------------+
| |
| results = new ArrayList<Map<String, String>>(); |
| |
+------------------------+
|
v
+------------------------+
| |
| while (rs.next()) { |
| |
+------------------------+
|
v
+------------------------+
| |
| Map<String, String> result = new HashMap<String, String>(); |
| |
+------------------------+
|
v
+------------------------+
| |
| ResultSetMetaData rsmd = rs.getMetaData(); |
| |
+------------------------+
|
v
+------------------------+
| |
| int columnCount = rsmd.getColumnCount(); |
| |
+------------------------+
|
v
+------------------------+
| |
| for (int i = 1; i <= columnCount; i++) { |
| |
+------------------------+
|
v
+------------------------+
| |
| String fieldName = rsmd.getColumnName(i).toLowerCase(); |
| |
+------------------------+
|
v
+------------------------+
| |
| String fieldValue = rs.getString(i); |
| |
+------------------------+
|
v
+------------------------+
| |
| result.put(fieldName, fieldValue); |
| |
+------------------------+
|
v
+------------------------+
| |
| results.add(result); |
| |
+------------------------+
|
v
+------------------------+
| |
| } |
| |
+------------------------+
|
v
+------------------------+
| |
| return results; |
| |
+------------------------+
```
2. 计算环形复杂度
根据流程图,可以列出以下控制流语句:
- stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
- rs = stmt.executeQuery(sql);
- if (rs != null) {
- results = new ArrayList<Map<String, String>>();
- while (rs.next()) {
- Map<String, String> result = new HashMap<String, String>();
- ResultSetMetaData rsmd = rs.getMetaData();
- int columnCount = rsmd.getColumnCount();
- for (int i = 1; i <= columnCount; i++) {
- String fieldName = rsmd.getColumnName(i).toLowerCase();
- String fieldValue = rs.getString(i);
- result.put(fieldName, fieldValue);
- }
- results.add(result);
- }
- return results;
根据这些控制流语句,可以得到以下决策点:
- D1: if (rs != null)
因此,环形复杂度 V(G) = E - N + 2P = 12 - 10 + 2*1 = 4。
3. 确定线性独立路径的基本集合
根据流程图,可以得到以下路径:
- 1 -> 2 -> 3 -> 4 -> 5a -> 5b -> 6 -> 7
- 1 -> 2 -> 3 -> 4 -> 5a -> 5b -> 6 -> 8
因此,线性独立路径的基本集合为:
- {1, 2, 3, 4, 5a, 5b, 6, 7}
- {1, 2, 3, 4, 5a, 5b, 6, 8}