根据string获得field
时间: 2023-07-21 10:54:53 浏览: 88
我不太明白你的问题,请提供更多的上下文和细节信息。不过,一般情况下,如果你想根据字符串获取一个对象的字段,可以使用反射机制。具体来说,你可以使用Java中的Class类的getField()方法或者getDeclaredField()方法来获取一个指定名称的字段,然后通过该字段的get()方法获取该字段的值。需要注意的是,由于反射机制会在运行时进行一些额外的检查和处理,因此其效率可能会比直接访问字段低一些。
相关问题
给定如下程序: 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}
public static int UpdateK3Txt1(string TabName, string faccid, string Key, ref string str) { try { var dt = PublicDAL.GetDataTable("select * from t_tabErpRef where faccid =" + faccid + " and TabName ='" + TabName + "' "); if (dt.Rows.Count > 0) { //string TabName = dt.Rows[0]["TabName"].ToString(); string FieldName = dt.Rows[0]["FieldName"].ToString(); string FieldKey = dt.Rows[0]["FieldKey"].ToString(); string Text1 = dt.Rows[0]["Text1"].ToString(); StringBuilder SQL = new StringBuilder(); SQL.AppendFormat(" update {0} set {1} = '{2}' where {3} ='{4}' ", TabName, FieldName, Text1, FieldKey, Key); str = SQL.ToString(); return PublicDAL_Iface.ExecuteSql(GetConnectStr(faccid), SQL.ToString()); } else { return -1; } } catch { return -2; } }
这段代码是一个名为`UpdateK3Txt1`的静态方法,它接受四个参数:`TabName`、`faccid`、`Key`和`str`。这个方法的作用是更新数据库表中指定记录的某个字段的值。
方法首先通过调用`PublicDAL.GetDataTable`方法从数据库中获取一个表格,该表格是根据`faccid`和`TabName`条件查询得到的。然后,方法检查返回的表格行数,如果大于0,则说明找到了匹配的记录。
接下来,方法从表格中获取了三个字段的值:`FieldName`、`FieldKey`和`Text1`。然后,使用这些值构建了一个SQL语句,该语句用于更新指定的表格记录。最后,将构建的SQL语句赋值给输入参数`str`,并返回执行SQL语句的结果。
如果在执行过程中出现异常,方法将返回-2。如果未找到匹配的记录,方法将返回-1。
请注意,这段代码存在SQL注入的安全风险,建议使用参数化查询来防止注入攻击。
阅读全文