public void commOperSqls(ArrayList<String> sql) { try { conn.setAutoCommit(false); for (int i = 0; i < sql.size(); i++) { Statement st = conn.createStatement(); st.execute(sql.get(i)); st.close(); } conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { try { conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } } }
时间: 2024-04-28 22:21:03 浏览: 10
这段代码是一个Java方法,用于执行多条SQL语句,可以提交或回滚事务。参数sql是一个ArrayList集合,包含了待执行的多条SQL语句,conn是一个已经建立好的数据库连接。
在该方法中,首先通过conn.setAutoCommit(false)方法将数据库连接的自动提交设置为false,即开启事务。然后使用for循环遍历ArrayList集合,逐条执行SQL语句。
对于每条SQL语句,先创建一个Statement对象,然后使用该对象执行SQL语句。如果SQL语句是INSERT、UPDATE、DELETE等操作,则使用Statement对象的execute()方法执行;如果SQL语句是SELECT等查询操作,则使用Statement对象的executeQuery()方法执行。最后,关闭Statement对象以释放资源。
在执行完所有SQL语句后,如果没有发生异常,则使用conn.commit()方法提交事务。如果发生异常,则使用conn.rollback()方法回滚事务。最后,通过conn.setAutoCommit(true)方法将数据库连接的自动提交设置为true,即恢复为默认状态。
需要注意的是,在使用完Statement对象后,应该及时关闭以释放资源。另外,在执行多条SQL语句时,应该保证它们之间的逻辑关系正确,以避免数据不一致等问题。
相关问题
注释下面每一行代码:public class Shift { private ArrayList<String> kwicList = new ArrayList<String>(); private ArrayList<String> lineTxt; public Shift( ArrayList<String> lineTxt) { this.lineTxt = lineTxt; } public ArrayList<String> getKwicList() { return kwicList; } public ArrayList<String> getLineTxt() { return lineTxt; } public void shift() { //获取每个单词,存入tokens Iterator<String> it = lineTxt.iterator(); while (it.hasNext()) { StringTokenizer token = new StringTokenizer(it.next()); ArrayList<String> tokens = new ArrayList<String>(); int i = 0; //循环添加单词 int count = token.countTokens(); while (i < count) { tokens.add(token.nextToken()); i++; } //display(tokens); //切割各个单词,不断改变起始值和利用loop实现位移。 for (i = 0; i < count; i++) { StringBuffer lineBuffer = new StringBuffer(); int index = i; for (int f = 0; f < count; f++) { //从头继续位移 if (index >= count) index = 0; //存入StringBuffer lineBuffer.append(tokens.get(index)); lineBuffer.append(" "); index++; } String tmp = lineBuffer.toString(); kwicList.add(tmp); } } } }
这段代码定义了一个名为 Shift 的类,其中包含了三个字段和三个方法:
- 字段 kwicList:类型为 ArrayList<String>,存储了所有的关键词索引环(Key Word in Context List)。
- 字段 lineTxt:类型为 ArrayList<String>,存储了所有待处理的文本行。
- 构造方法 Shift():接受一个类型为 ArrayList<String> 的 lineTxt 参数,并将其赋值给 lineTxt 字段。
- 方法 getKwicList():返回 kwicList 字段。
- 方法 getLineTxt():返回 lineTxt 字段。
- 方法 shift():实现关键词索引环的生成过程。
具体来说,shift() 方法中首先通过 Iterator 遍历 lineTxt 中的每一行文本(每一行都是由多个单词组成的字符串),并将这些单词分割出来,存入 tokens 的 ArrayList 中。
然后,对于每个 tokens,利用双重 for 循环遍历每一个单词,不断改变起始值和利用 loop 实现位移。在位移过程中,使用 StringBuffer 存储每个位移后的单词序列,最终将其存入 kwicList 中。这样,kwicList 中就存储了所有的关键词索引环。
ArrayList<ArrayList<String>>用法
ArrayList<ArrayList<String>> 表示一个二维字符串数组,也就是一个字符串矩阵。它的用法如下:
1. 初始化一个二维字符串数组:
```
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
```
2. 添加一个新行:
```
ArrayList<String> row = new ArrayList<String>();
matrix.add(row);
```
3. 向某行添加元素:
```
matrix.get(row_index).add(element);
```
4. 获取某个元素:
```
String element = matrix.get(row_index).get(column_index);
```
5. 遍历整个二维字符串数组:
```
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix.get(i).size(); j++) {
String element = matrix.get(i).get(j);
// 处理元素...
}
}
```
注意:在使用 ArrayList<ArrayList<String>> 时,需要先初始化外层的 ArrayList 之后,再初始化内层的 ArrayList。否则,在向内层 ArrayList 添加元素时,会抛出 NullPointerException 异常。