遍历list类型应该返回什么

方法1:public static List query(String sql, Class clazz) {

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    Object tempStr = null;
    List<T> list = new ArrayList<T>();
    try {
        conn = DBConnectUtils.getConnection();
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery();
        while (rs.next()) {
            // newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。
            // 我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。
            // newInstance: 弱类型。低效率。只能调用无参构造。
            // new: 强类型。相对高效。能调用任何public构造。
            T obj = clazz.newInstance();
            if (obj instanceof String) {
                obj = (T) rs.getString(1);
            } else {

                // Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限

                Field[] fields = obj.getClass().getDeclaredFields();

                for (Field field : fields) {

                    try {
                        tempStr = rs.getObject(field.getName());
                    } catch (SQLException e) {
                        tempStr = "";
                    }
                    //置是否允许访问,而不是修改原来的访问权限修饰词
                    field.setAccessible(true);

                    // 把对象的属性数据封装到对象中
                    BeanUtils.setProperty(obj, field.getName(), tempStr);
                }
            }
            list.add(obj);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        DBCloseUtils.closeCSR(conn, pstmt, rs);
    }
    return list;

}

方法2:
public static List query(String sql, Class clazz, Object[] parameters) {

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    List<T> list = new ArrayList<T>();
    int index = 1;
    try {
        pstmt = conn.prepareStatement(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    if (parameters != null && parameters.length != 0) {
        for (int i = 0; i < parameters.length; i++) {
            try {
                pstmt.setObject(index, parameters[i]);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    try {
        rs = pstmt.executeQuery(sql);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    // 封装resultset
    ResultSetMetaData metaData = null;
    try {
        metaData = rs.getMetaData();
    } catch (SQLException e) {
        e.printStackTrace();
    }// 取出列的信息
    int columnLength = 0;
    try {
        columnLength = metaData.getColumnCount();
    } catch (SQLException e) {
        e.printStackTrace();
    }// 获取列数
    try {
        while (rs.next()) {
            // 通过反射机制创建一个对象
            T result = clazz.newInstance();
            for (int i = 0; i < columnLength; i++) {
                String metaDataKey = metaData.getColumnName(i + 1);
                Object resultsetValue = rs.getObject(metaDataKey);
                if (resultsetValue == null) {
                    resultsetValue = "";
                }
                Field field = clazz.getDeclaredField(metaDataKey);
                field.setAccessible(true);
                field.set(result, resultsetValue);
            }
            list.add(result);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

1个回答

waht are you 弄啥来?你想表达个什么意思! try {
conn = DBConnectUtils.getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
你这不是有么,你把查询的sql初始化一下不就好了

kristenlee1218
kristenlee1218 我现在要遍历这两个list,但是不知道返回类型是什么
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
遍历list应该返回什么类型
1.public static <T> List<T> query(String sql, Class<T> clazz) 2. public static <T> List<T> query(String sql, Class<T> clazz, Object[] parameters)
遍历泛型List,应该返回什么类型
泛型不支持 用《T》代替了 方法一 public static 《T》 List《T》 query(String sql, Class《T》 clazz) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Object tempStr = null; List《T》 list = new ArrayList《T》(); try { conn = DBConnectUtils.getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while (rs.next()) { // newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。 // 我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。 // newInstance: 弱类型。低效率。只能调用无参构造。 // new: 强类型。相对高效。能调用任何public构造。 T obj = clazz.newInstance(); if (obj instanceof String) { // ResultSet的下标从1开始 obj = (T) rs.getString(1); } else { // Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限 // getDeclaredFields()返回Class中所有的字段,包括私有字段 // getFields 只返回公共字段,即有public修饰的字段 // field,域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。 Field[] fields = obj.getClass().getDeclaredFields(); // 遍历域 for (Field field : fields) { try { // 反射获取对象成员的字段值 tempStr = rs.getObject(field.getName()); } catch (SQLException e) { tempStr = ""; } // 置是否允许访问,而不是修改原来的访问权限修饰词 field.setAccessible(true); // 把对象的属性数据封装到对象中 BeanUtils.setProperty(obj, field.getName(), tempStr); } } list.add(obj); } } catch (Exception e) { e.printStackTrace(); } finally { DBCloseUtils.closeCSR(conn, pstmt, rs); } return list; } 方法二 public static 《T》 List《T》 query(String sql, Class《T》 clazz, Object[] parameters) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; ResultSetMetaData metaData = null; List《T》 list = new ArrayList《T》(); int index = 1; try { pstmt = conn.prepareStatement(sql); if (parameters != null && parameters.length != 0) { for (int i = 0; i < parameters.length; i++) { // pstmt.setObject(第几个参数, 替换成什么); pstmt.setObject(index, parameters[i]); } } rs = pstmt.executeQuery(sql); // 封装resultset metaData = rs.getMetaData(); // 取出列的信息 int columnLength = metaData.getColumnCount(); // 获取列数 while (rs.next()) { // 通过反射机制创建一个对象 T result = clazz.newInstance(); for (int i = 0; i < columnLength; i++) { String metaDataKey = metaData.getColumnName(i + 1); Object resultsetValue = rs.getObject(metaDataKey); if (resultsetValue == null) { resultsetValue = ""; } Field field = clazz.getDeclaredField(metaDataKey); field.setAccessible(true); field.set(result, resultsetValue); } list.add(result); } } catch (Exception e) { e.printStackTrace(); } finally { DBCloseUtils.closeCSR(conn, pstmt, rs); } return list; }
泛型集合的遍历,返回什么类型
import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.sun.org.apache.commons.beanutils.BeanUtils; public class DBOperateTUtilts { 方法1 public static <E> List<E> query(String sql, Class<E> clazz) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; Object tempStr = null; List<T> list = new ArrayList<T>(); try { conn = DBConnectUtils.getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while (rs.next()) { // newInstance实际上是把new这个方式分解为两步,即,首先调用class的加载方法加载某个类,然后实例化。 // 我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了我们降耦的手段。 // newInstance: 弱类型。低效率。只能调用无参构造。 // new: 强类型。相对高效。能调用任何public构造。 E obj = clazz.newInstance(); if (obj instanceof String) { // ResultSet的下标从1开始 obj = (E) rs.getString(1); } else { // Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限 // getDeclaredFields()返回Class中所有的字段,包括私有字段 // getFields 只返回公共字段,即有public修饰的字段 // field,域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。 Field[] fields = obj.getClass().getDeclaredFields(); // 遍历域 for (Field field : fields) { try { // 反射获取对象成员的字段值 tempStr = rs.getObject(field.getName()); } catch (SQLException e) { tempStr = ""; } // 置是否允许访问,而不是修改原来的访问权限修饰词 field.setAccessible(true); // 把对象的属性数据封装到对象中 BeanUtils.setProperty(obj, field.getName(), tempStr); } } list.add(obj); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { DBCloseUtils.closeCSR(conn, pstmt, rs); } return list; } 方法2 public static <T> List<T> query(String sql, Class<T> clazz, Object[] parameters) { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; ResultSetMetaData metaData = null; List<T> list = new ArrayList<T>(); int index = 1; try { pstmt = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } if (parameters != null && parameters.length != 0) { for (int i = 0; i < parameters.length; i++) { try { // pstmt.setObject(第几个参数, 替换成什么); pstmt.setObject(index, parameters[i]); } catch (SQLException e) { e.printStackTrace(); } } } try { rs = pstmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } // 封装resultset try { metaData = rs.getMetaData(); } catch (SQLException e) { e.printStackTrace(); }// 取出列的信息 int columnLength = 0; try { columnLength = metaData.getColumnCount(); } catch (SQLException e) { e.printStackTrace(); }// 获取列数 try { while (rs.next()) { // 通过反射机制创建一个对象 T result = clazz.newInstance(); for (int i = 0; i < columnLength; i++) { String metaDataKey = metaData.getColumnName(i + 1); Object resultsetValue = rs.getObject(metaDataKey); if (resultsetValue == null) { resultsetValue = ""; } Field field = clazz.getDeclaredField(metaDataKey); field.setAccessible(true); field.set(result, resultsetValue); } list.add(result); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return list; } }
list集合遍历采用的是ArrayList还是LinkList问题?
想问下,我返回一个linklist,用list接收后,我没有手动转换成ArrayList的情况下,继续拿着这个list去遍历,那么程序遍历的时候会采用哪种集合类型去遍历? ArrayList 还是 LinkList public List<MarkerInfoUtil> sort(List<MarkerInfoUtil> list) { LinkedList<MarkerInfoUtil> linkedList = new LinkedList<>(); linkedList.addAll(list); MarkerInfoUtil markerInfoUtil = null; for (int j = 0; j < linkedList.size(); j++) { if (linkedList.get(j).getMacid().equals(macId)) { markerInfoUtil = linkedList.get(j); linkedList.remove(); j--; } } linkedList.addLast(markerInfoUtil); return linkedList; //排序 List<MarkerInfoUtil> sort =sort(infos); for (MarkerInfoUtil info : sort) { }
ajax遍历list集合想要获取String类型,结果出现Object类型
![图片说明](https://img-ask.csdn.net/upload/201710/08/1507471299_981233.jpg) js代码 function queryPage(){ var moneysel=$("#moneysel").val(); var time1=$("#time1").val(); var time2=$("#time2").val(); $.post("ContentSel",{"moneysel":moneysel,"time1":time1,"time2":time2,"pageIndex":pageIndex,"pageSize":pageSize},function(data,status){ if(status){ //移除上个分页数据 $(".even").remove(); $(".odd").remove(); //将返回结果转化为json data=eval("("+data+")"); var list=data.list; for(var i=0;i<list.length;i++){ var name=""; if(i%2==0){ name="class='even'";//偶数 }else{ name="class='odd'";//奇数 } $("#myTable").append("<tr"+name+">"+"<td>"+list[i].id+"</td>"+"<td>"+list[i].content+"</td>"+"<td>"+list[i].sum+"</td>"+"<td>"+list[i].time+"</td>"+"<td>"+list[i].title+list[i].genre+"</td>"+"<td><a>删除</a></td>" +"</tr>"); } pageIndex=data.pageIndex; pageTotal=data.pageTotal; $("#page1").text(pageIndex+"/"+pageTotal); //删除确认操作 $("a.delete").click(function(){ var r=confirm("确定要删除该条记录吗?"); return r; }) } }) } 后台代码部分 Moneyservice ms=new Moneyserviceimpl(); if(moneysel.equals("0")||moneysel.equals("1")){ Page<Money> page=ms.getMyMoneyPage(userId, Integer.parseInt(moneysel), Integer.parseInt(pageIndex), Integer.parseInt(pageSize)); //将集合或对象序列化成json字符串 String json = JSONSerializer.toJSON(page).toString(); PrintWriter writer=response.getWriter(); writer.print(json); writer.close(); }else{ Page<Money> page=ms.getMyMoneyPageNogenry(userId, 1,5); //将集合或对象序列化成json字符串 String json = JSONSerializer.toJSON(page).toString(); PrintWriter writer=response.getWriter(); writer.print(json); writer.close(); return; }
读取python遍历中文目录得到的文件路径报错
各位朋友们好,我是一名python新手,现在遇到一个问题,恳请各位朋友们能指点一下我。 我的环境是:ubuntu14.04系统,python2.7 用python遍历一个目录,目录层次结构如下: 这是主目录: /home/chaoma/superboard/mydata/input/production 主目录下的目录层次结构如下 --超级画板教学资源_全处理_772 -- Z+Z资源库 --初中数学资源库 --1有理数 ---1.1数的分类 -- 0.mp4 -- name.txt …… --2一元一次方程 ….. --动态解析高考数学综合题 --第一章基本函数 --第四节 --06福建理21 --name.txt --0.mp4 --拓展练习4.1 …. --第五节 …… --第二章三角函数 ……. …… --学生作品集合_全处理_52 ……… 我想实现的功能:找到所有含有0.mp4文件的父目录,并读取该父目录下面的name.txt文件 因此我写了以下的遍历函数来实现这一功能: def visitDir_walk(path , sFileSuffix): codedetect = chardet.detect(path)["encoding"] path = unicode(path , codedetect) fileNames = list() for root,dirs,files in os.walk(path): for i in range(0 , len(files)): file = files[i] if file.endswith(sFileSuffix): sFileName = os.path.join(root , file) #这边返回的应该是包含视频文件的父目录,也就是学生作品目录 realFileName = os.path.split(os.path.abspath(sFileName))[0] fileNames.append( unicode(realFileName,”gbk”) ) return fileNames def main(): sProductionInputPath = “/home/chaoma/superboard/mydata/input/production” dir_production_list = visitDir_walk(sProductionInputPath , ".mp4") #拼接name.txt的路径 for dir in dir_production_list: nameFile = os.path.join(dir , "name.txt") fout = codecs.open(nameFile , "w" , "utf-8") #截取出路径中的文件名作为需要的内容,并写入文件 fout.write(os.path.split(path)[1]) fout.close() main() 但是执行之后却报错了,报错如下: fout = codecs.open(nameFile , "w" , "utf-8") File "/usr/lib/python2.7/codecs.py", line 878, in open file = __builtin__.open(filename, mode, buffering) IOError: [Errno 2] No such file or directory: u'/home/chaoma/superboard/mydata/input/production/\u8d85\u7ea7\u753b\u677f\u6559\u5b66\u8d44\u6e90_\u5168\u5904\u7406_772/\u52a8\u6001\u89e3\u6790\u9ad8\u8003\u6570\u5b66\u7efc\u5408\u9898/\u7b2c\u4e00\u7ae0\u57fa\u672c\u51fd\u6570/\u7b2c\u56db\u8282/06\u798f\u5efa\u740621/name.txt' 打印这个报错的路径得到: /home/chaoma/superboard/mydata/input/production/超级画板教学资源_全处理_772/动态解析高考数学综合题/第一章基本函数/第四节/06福建理21/name.txt 这个文件路径是存在的却报错,不知道为什么。难道是路径是unicode类型就不能识别吗? 恳请各位朋友们能指点我一下,十分感谢。
Nhibernate多表查询,不用遍历填充每一个值
有一个person类,里面有个status字段,保存的是人员状态。类型为int 还有一个baseinfo类,里面有name字段,用来保存status的中文如:在职/离职,还有一个value字段,与person类里面的status字段相对应,类型为int 这样做的目的是能够把一些基础数据进行维护。 我的问题是:用nhibernate查询后,如果返回person的List,如何将baseinfo中name字段的值,附加到List中每一个person的status值。 例如: personList=[{name:'张三',sataus:"1"}, {name:'李四',sataus:"-1"}, {name:'王五',sataus:"1"}] 上面这个是利用nhibernate查出来的 而我想要的List是下面这个 personListNew=[{name:'张三',sataus:"1",statusName:'在职'}, {name:'李四',sataus:"-1",statusName:'离职'}, {name:'王五',sataus:"1",statusName:'在职'}] 我现在有的思路是遍历personList,从而得到新的personListNew。但是我想要更好的方法,大家有没有思路呢?
java代码中怎么创建临时表
java代码中怎么创建临时表,如果创建临时表,返回类型是list<Object>这种,里边的各个参数怎么遍历 ![图片说明](https://img-ask.csdn.net/upload/201708/03/1501748106_706457.png)
在Freemarker中调用返回值为非字符串的静态方法的问题
我在FreeMarker中需要将一个枚举类型的所有值都读出来,返回值是一个数组,然后遍历这个数组,生成输出 比如我要调用这个方法来获取枚举 org.**.enums.AuditResult.values,我希望在ftl文件中将返回值赋给一个list,然后在做处理,应该怎么做呢?
总是出现 undeclared identifier,但是我已经定义了
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h> #include<string.h> int Student=0;//总人数 int N; int Mark[100]; int Mark1[100]; struct student *Head; struct student { char Name[20]; char Snum[20]; char Sex[4]; }; typedef struct node { char name[20]; char snum[20]; char sex[4]; struct node *pnext; }node,*pnode;//类型声明 struct student *GetData();//文件导入 pnode create_list();//创建链表 void traverse_list(pnode phead);//遍历链表输入 int length_list(pnode phead);//链表长度 void sort_list(pnode phead);//学号正排序 void inverse_list(pnode phead);//学号反排序 void delete_list(pnode phead);//链表删除 int insert_list(pnode phead);//链表插入 void main() { srand(time(NULL));//随机函数初始化 pnode head=NULL;//建空链表 head=create_list();//链表头指针地址返回head printf("\n"); traverse_list(head);//原链表正排序 sort_list(head); printf("1.按照学号大小正排序后:\n"); traverse_list(head); int pos; pos=rand()%N+1;////随即删除 delecte_list(head,pos); printf("2.系统随机删除的同学第%d个同学\n\n删除后按学号反序输出",pos);/// inverse_list(head);//反排序 traverse_list(head); printf("3.系统已从剩余学生中抽取了一位\n\n"); printf("插入该生序号为%d\n\n",insert_list(head)); traverse_list(head);//遍历重新反排序链表输出 }
SpringMVC页面Ajax传JSON到controller,返回包含多个对象的JSON
做的一个练习,筛选,页面随意勾选多个复选框,局部刷新返回显示与复选框value值匹配的对象数据,传JSON到controller,返回包含多个对象的JSON。controller怎么写?返回JSON后页面怎么处理 $.ajax({ url:"user/screening", type:"post", //请求方式 data:"{\"pwd1\":\""+pwd1+"\",\"pwd2\":\""+pwd2+"\",\"email1\":\""+email1+"\",\"email2\":\""+email2+"\"}",//要发送的数据 dataType:"", //服务器返回的数据类型 //data返回的数据,strStatus状态码(200响应正确),xhr:XMLHttpRequest对象 success:function(data,strStatus,xhr){ //请求成功返回数据后执行的代码 eval("var mydata="+data); //eval()将字符串当成JS脚本执行 $.each(mydata,function(i,item){ //i:遍历的下标,item:遍历出的单个对象 $("#show").html(item.id+item.username+item.password+item.email); }); }, error:function(xhr,strStatus,strError){ //请求失败后执行的代码 alert(strError); } }); public UserController(){ userMap.put("1", new User("1","yiyiyi","123456","yiyiyi@qq.com")); userMap.put("2", new User("2","ererer","123456","ererer@qq.com")); userMap.put("3", new User("3","sansansan","123456","sansansan@qq.com")); userMap.put("4", new User("4","yiyiyi","654321","yiyiyi@qq.com")); userMap.put("5", new User("5","ererer","654321","ererer@qq.com")); userMap.put("6", new User("6","sansansan","654321","sansansan@qq.com")); } @RequestMapping(value="screening",method=RequestMethod.POST) @ResponseBody public Object screening(@RequestBody Object object){ JSONObject jo = JSONObject.fromObject(toString()); List<Object> objects = new ArrayList<Object>(); Screening scr = (Screening)JSONObject.toBean(jo, Screening.class); Iterator<Map.Entry<String, User>> iter = userMap.entrySet().iterator(); while(iter.hasNext()){ Map.Entry<String, User> entry = iter.next(); if(scr.getPwd1().equals(entry.getValue().getPassword()) || scr.getPwd2().equals(entry.getValue().getPassword()) || scr.getEmail1().equals(entry.getValue().getEmail()) || scr.getEmail2().equals(entry.getValue().getEmail())){ objects.add(userMap.get(entry.getKey())); } } return objects; } public class Screening { String pwd1; String pwd2; String email1; String email2;
一个python程序,为什么报错
错误代码: s = '\t'.join([list2_name[i], str(' ----- '), list2_email[i]) ^ SyntaxError: invalid syntax ftele1 = open('TeleAddressBook.txt', 'rb') # rb是为了防止文件中的中文乱码,存储了2进制数据 ftele2 = open('EmailAddressBook.txt', 'rb') ftele1.readline() # 跳过第一行 ftele2.readline() lines1 = ftele1.readlines() # readlines返回整个文件内容的列表,每项是以换行符结尾的一项字符串 lines2 = ftele2.readlines() list1_name = [] list1_tele = [] list2_name = [] list2_email = [] for line in lines1: # 获取第一个文本中的姓名和电话信息 elements = line.split() # 通过split获得由tab空格键空格出的姓名信息和电话信息(对于字符串,通过split拆分为一个列表,默认以空格分割) list1_name.append(str(elements[0])) list1_tele.append(str(elements[1])) # 将文本读出来的bytes转换为str类型。经测试不加str也可以 for line in lines2: # 获取第二个文本中的姓名和邮件信息 elements = line.split() list2_name.append(str(elements[0])) list2_email.append(str(elements[1])) ###开始处理### lines = [] lines.append('姓名\t 电话 \t 邮箱\n') # \t表示tab空格。要想此处中文正确显示,编码方式调为gbk即可 # 按索引方式遍历姓名列表1 for i in range(len(list1_name)): s = '' if list1_name[i] in list2_name: j = list2_name.index(list1_name[i]) # 找到姓名列表1对应列表2中的姓名索引位置 s = '\t'.join(list1_name[i], list1_tele[i], list2_email[j]) s += '\n' else: s = '\t'.join([list1_name[i], list1_tele[i], str(' ----- ')]) s += '\n' lines.append(s) # 处理姓名列表2中剩余的姓名 for i in range(len(list2_name)): s = '' if list2_name[i] not in list1_name: s = '\t'.join([list2_name[i], str(' ----- '), list2_email[i]) s += '\n' lines.append(s) ftele3 = open('AddressBook.txt', 'w') ftele3.writelines(lines) ftele3.close() ftele1.close() ftele2.close() print("The addressBooks are merged!")
java xml 空指针异常困惑了几天了?求解决~
package itat.org.xml; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class TestXML04 { public static void main(String[]ages){ try { SAXReader reader = new SAXReader(); Document d = reader.read(TestXML04.class.getClassLoader().getResource("xml/books.xml"));//获取类路径名的文件夹 Element root = d.getRootElement();//获得根元素 Element e = findByTitle(d, "java编程思想"); System.out.println(e.elementText("price")); } catch (DocumentException e) { e.printStackTrace(); } } private static Element findByTitle(Document d,String title){ Element root = d.getRootElement(); List <Element> eles = root.elements("book"); for(Element e:eles){ String t = e.elementTextTrim("title");//获得返回的一个去掉空格的元素文本(title) if(t.equals(title)){//比较传进来的title和获得的 return e; } } return null; } private static void tran(){ SAXReader reader = new SAXReader(); try { Document d = reader.read(TestXML04.class.getClassLoader().getResource("xml/books.xml"));//获取类路径名的文件夹 Element root = d.getRootElement();//获得根元素 List<Element> eles = root.elements("book");//获得返回的一个元素的集合 List<Book> books = new ArrayList<Book>();//新建一个Book集合 for(Element e:eles){//遍历Element集合中所以元素 Book b = new Book();//新建一个Book b.setId(Integer.parseInt(e.attributeValue("id")));//遍历出来的元素id的值包装拆箱成int类型set给Book b.setTitle(e.elementText("title")); b.setAuthor(e.elementText("author")); b.setPrice(Double.parseDouble(e.elementText("price"))); } for(Book b:books){ System.out.println(b); } } catch (DocumentException e) { e.printStackTrace(); } } } ``` ``` <?xml version="1.0" encoding="UTF-8"?> <books> <book id="1"> <title>java编程思想</title> <author>Brucre Eckel</author> <price>89.00</price> </book> <book id="2"> <title>C++编程思想</title> <author>Brucre Eckel</author> <price>69.00</price> </book> <book> <title id="3">headfirst in java</title> <author>Orelly</author> <price>79.00</price> </book> </books> ![图片说明](https://img-ask.csdn.net/upload/201511/09/1447082417_151558.png)
关于Struts2的域模型与ajax·
问题简述,在不使用json和jqury的情况下如何使用ajax接收一个List,并且遍历出里面的对象? 我在struts2的action有一个域模型:allCities<City>,List类型,这个域模型在某一个特定的方法a(int provinceId)里赋值,此时我通过Ajax将provinceId传递给action,并且执行了a()方法,但服务器端响应后在页面使用sturts2的标签<s:iterytor>并没能便利出域模型的值,所以我打算使用ajax来接收这个List,并且将它便利出来,在页面上显示,并能让用户选择,得到用户选择的city.id··但发现ajax接收List的时候有个问题,因为后台相应返回来的都是String形式的,而我的是一个List··并且我个人没有学过JSON和Jqury··现在时间也不允许我去学了,综上所述,在不使用json和jqury的情况下如何使用ajax接收一个List,并且实现我要求的功能。顺便提一下,我这个是一个‘省份--城市’的下拉列表联动。
总是出现这类问题无法解决,求助
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<time.h> #include<string.h> int Student=0;//总人数 int N; int Mark[100]; int Mark1[100]; struct student *Head; struct student { char Name[20]; char Snum[20]; char Sex[4]; }; typedef struct node { char name[20]; char snum[20]; char sex[4]; struct node *pnext; }node,*pnode;//类型声明 struct student *GetData();//文件导入 pnode create_list();//创建链表 void traverse_list(pnode phead);//遍历链表输入 int length_list(pnode phead);//链表长度 void sort_list(pnode phead);//学号正排序 void inverse_list(pnode phead);//学号反排序 void delete_list(pnode phead);//链表删除 int insert_list(pnode phead);//链表插入 void main() { srand(time(NULL));//随机函数初始化 pnode head=NULL;//建空链表 head=create_list();//链表头指针地址返回head printf("\n"); traverse_list(head);//原链表正排序 sort_list(head); printf("1.按照学号大小正排序后:\n"); traverse_list(head); int pos; pos=rand()%N+1;////随即删除 delete_list(head,pos); printf("2.系统随机删除的同学第%d个同学\n\n删除后按学号反序输出",pos); inverse_list(head);//反排序 traverse_list(head); printf("3.系统已从剩余学生中抽取了一位\n\n"); printf("插入该生序号为%d\n\n",insert_list(head)); traverse_list(head);//遍历重新反排序链表输出 } pnode create_list()//创建链表并随机产生N函数 { int m=0,i,j,r; Head=GetData(); printf("\n"); for(i=0;i<Student;i++) Mark[i]=i; for(i=0;i<Student;i++) { r=rand()%(Student-i); Mark1[m++]=Mark[r]; for(j=r;j<Student;j++) Mark[j]=Mark[j+1]; } m=0; pnode head=(pnode)malloc(sizeof(node)); pnode tail=head; tail->pnext=NULL; printf("请输入你想抽取学生人数N:"); scanf("%d",&N); for(i=0;i<N;i++) { pnode pnew=(pnode)malloc(sizeof(node));//申请空间存储节点 strcpy(pnew->name,Head[Mark1[m]].Name); strcpy(pnew->snum,Head[Mark1[m++]].Snum); strcpy(pnew->sex,Head[Mark1[m++]].Sex); tail->pnext=pnew;//末尾指向新元素 pnew->pnext=NULL; tail=pnew;//新元素地址变成新末尾 } return head; } void traverse_list(pnode phead) { pnode p=phead->pnext;//将头结点指针给指针p printf("学生信息为:\n\n"); while(p!=NULL) { printf("\t%s\t%s\t%s\t",p->name,p->snum,p->sex); p=p->pnext; } printf("\n"); } int length_list(pnode phead)//链表长度 { int len=0; pnode p=phead->pnext; while(p!=NULL) { len++; p=p->pnext; } return len; } void sort_list(pnode phead)//冒泡法排序,按正排序复制 { int i,j,len; char name[20],num[20],sex[4];/// pnode q; len=length_list(phead); for(i=0;i<len-1;i++) { for(j=0,q=phead->pnext;j<len-1-i;q=q->pnext,j++) if(strcmp(q->snum,q->pnext->snum)>0) { strcpy(name,q->name); strcpy(q->name,q->pnext->name); strcpy(q->pnext->name,name); strcpy(num,q->snum); strcpy(q->snum,q->pnext->snum); strcpy(q->pnext->snum,num); strcpy(sex,q->sex); strcpy(q->sex,q->pnext->sex); strcpy(q->pnext->sex,sex); } } } void inverse_list(pnode phead) { int i,j,len; char name[20],num[20],sex[4]; pnode q; len=length_list(phead); for(i=len-1;i>0;i--) { for(j=len-1,q=phead->pnext;j>0;q=q->pnext,j--) if(strcmp(q->snum,q->pnext->snum)<0) { strcpy(name,q->name); strcpy(q->name,q->pnext->name); strcpy(q->pnext->name,name); strcpy(num,q->snum); strcpy(q->snum,q->pnext->snum); strcpy(q->pnext->snum,num); strcpy(sex,q->sex); strcpy(q->sex,q->pnext->sex); strcpy(q->pnext->sex,sex); } } } void delete_list(pnode phead,int pos)//删除元素 { pnode p=phead; int i=0; while(p->pnext!=NULL&&i<pos-1) { p=p->pnext; i++; }//寻找指定位置 pnode q=p->pnext; p->pnext=p->pnext->pnext; free(q);//释放空间 q=NULL; } int insert_list(pnode phead) { int m=rand()%(Student-N)+N;//产生N到student随机数 pnode p=phead; pnode q=(pnode)malloc(sizeof(node)); strcpy(q->name,Head[Mark1[m]].Name); strcpy(q->snum,Head[Mark1[m]].Snum); strcpy(q->sex,Head[Mark1[m]].Sex); q->pnext=p->pnext; p->pnext=q;/// inverse_list(phead); pnode pt=phead; int location=0; pnode s=(pnode)malloc(sizeof(node)); strcpy(s->snum,Head[Mark1[m]].Snum); while(pt!=NULL) { pt=pt->pnext; location++; if(strcmp(s->snum,pt->snum)==0) break; } return location; } struct student *GetData()//导入文件函数 { int i; struct student students[100]; FILE *fp; fp=fopen("a.txt","r"); printf("导入学生数据:\n\n"); for(i=0;!feof(fp);i++) { fscanf(fp,"%s%s%s",students[i].Name,students[i].Snum,students[i].Sex); printf("\t%s\t%s\t%s\t\n",students[i].Name,students[i].Snum,students[i].Sex); }//// Student=i; return students; } 'delete_list' : function does not take 2 parameters
小弟请教Struts2+JSON的集合传递
<p> </p> <p>我在前端写这样一段:</p> <p> </p> <p> </p> <pre name="code" class="java">//获取表单值,并以json的数据形式保存到params中 var params = { list : [ { "name" : "小明", "age" : 12 }, { "name" : "小红", "age" : 14 } ] } //使用$.post方式 $.post(url, //服务器要接受的url params, //传递的参数 function cbf(data) { //alert(data); }, 'json' //返回的类型 ); });</pre> <p> 在url提交到的Action为:</p> <p> </p> <p> </p> <pre name="code" class="java">public class AjaxLoginAction extends ActionSupport { private List list; public List getList() { return list; } public void setList(List list) { this.list = list; } }</pre> <p> </p> <p> </p> <p>我打印list的size() 的个数为2</p> <p> </p> <p>这个list里面放的是2个什么对象?</p> <p> </p> <p>可是我怎么遍历出"小红"和"小明"</p> <p> </p> <p>我写了个Student Class有Name和Age属性</p> <p>(List&lt;Student&gt;)list   没有用..</p> <p>换成数组也没用...</p> <p> </p> <p>JSON反序列化?   我知道<span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; line-height: 18px; background-color: #fafafa;">JSONObject.fromObject(String);  可是</span>怎么得到参数字符串 </p> <p> </p> <p> </p> <p>小白求指教...  希望各位能给个实例代码学习</p> <p> </p> <p> </p>
hibernate生成的dao,调用他查询,我初学,麻烦帮忙看一下
[code="java"] public List findAll() { log.debug("finding all User instances"); try { String queryString = "from User"; Query queryObject = getSession().createQuery(queryString); return queryObject.list(); } catch (RuntimeException re) { log.error("find all failed", re); throw re; } } [/code] [color=blue] 请问一下 这样要怎么 查询它呢, 它返回的结果类型的List的, 我需要用一个集合来遍历,请问一下需要怎么做呢? 还有一个问题[/color] [code="java"] public void delete(User persistentInstance) { log.debug("deleting User instance"); try { getSession().delete(persistentInstance); log.debug("delete successful"); } catch (RuntimeException re) { log.error("delete failed", re); throw re; } } [/code] [color=blue] 比如调用它的delete方法 也是必须要用Transaction 然后再执行commit才能执行删除吗? 如果有对这方面了解的麻烦帮下忙,谢谢各位了[/color]
ajax得到数据后,刷新问题
以前是后台直接request.setAttribute,前台接收 [img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/16.gif][/img] ``` <%List<MessageView> mList = (List<MessageView>) request.getAttribute("mList");%> 现在用ajax了,得到了想要的数据,输出是显示 data : "idall=" + idAll, // 传参 dataType : 'json', // 返回值类型 success : function(msg) { var me = msg[0].birthday; alert(me + "***"); var me1 = msg[0].realname; alert(me1 + "***"); }, 但是我的页面以前是这种遍历的,感觉比较方便,现在有些懵,不知道有什么办法可以像以前一样,方便好用 <% for (MessageView mv : mList) { mv3 = mv;%> <div id="trDel" value="<%=mv.getId()%>"> <tr onmouseover="this.style.backgroundColor='#ffcccc'" onmouseout="this.style.backgroundColor='#ffffff'" align="center" > <td> &nbsp;&nbsp; <input type="checkbox" value="<%=mv.getId()%>" name="check" onclick=selFirst();; /> </td> <td style="display: none;"><%=mv.getId()%></td> <td id="realname"><%=mv.getRealname()%></td> <td><%=mv.getSex()%></td> <td><%=mv.getBirthday()%></td> <td><%=mv.getHobby()%></td> <td><%=mv.getJop()%></td> <td><%=mv.getSalary()%></td> <td><%=mv.getName()%></td> <td><%=mv.getIntro()%></td> <td> <div align="left"> <div style="width: 60px; float: left;"> <input type="hidden" id="deleteId" value="<%=mv.getId()%>"/> <a style="cursor:pointer; color:green;" onclick="test()">删除</a> </div> <div style="width: 60px; float: right;"> <a href="update.do?id=<%=mv.getId()%>">修改</a> </div> </div> </td> </tr> <%}%> </div> ``` 大神指教,通俗易懂,谢谢
尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,求大神帮忙指正
java新人,尝试写了一个 JDBC 操作 SQLServer 的工具类,但是好像有问题,调用 insert 指令没问题,而 select 指令出现如下报错: com.microsoft.sqlserver.jdbc.SQLServerException: ')' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:792) at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:689) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(SQLServerStatement.java:616) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:160) at com.javaee.servletxm.comm.MSSQLJDBC.select(MSSQLJDBC.java:195) at com.javaee.servletxm.comm.MSSQLJDBC.selectFirstValue(MSSQLJDBC.java:172) at com.javaee.servletxm.comm.MSSQLJDBC.getPageNumber(MSSQLJDBC.java:221) at com.javaee.servletxm.comm.MSSQLJDBC.selectByFY(MSSQLJDBC.java:259) at com.javaee.servletxm.kqgl.KqManager.getAllKqxx(KqManager.java:38) at com.javaee.servletxm.kqgl.Kqwh.doGet(Kqwh.java:47) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:723) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:617) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1760) at java.lang.Thread.run(Thread.java:724) 这是具体的代码,求大神帮忙指正 package com.javaee.servletxm.comm; /** * jdbc下 SQL Server 2005 数据库的封装类 */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.List; import java.util.Properties; public class MSSQLJDBC { // 配置文件名称 private String iniFileName = MSSQLJDBC.class.getClassLoader().getResource("/com/javaee/servletxm/comm").getPath()+ "mssql.properties"; // 连接数据库 private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String url = "jdbc:sqlserver://localhost;DatabaseName=jdms"; private String user = "sa"; private String password = ""; // 定义连接属性 private Connection connect = null; // 与连接有关三个通道 private Statement stmt = null; private PreparedStatement pstmt = null; private CallableStatement cstmt = null; public static final String stmtType = "stmt"; public static final String pstmtType = "pstmt"; public static final String cstmtType = "cstmt"; // 定义参数类型的静态常量值 public static final String varCharType = "varchar"; public static final String intType = "int"; public static final String doubleType = "decimal"; public static final String dateType = "datetime"; public static final String timeType = "timestamp"; // 定义全局的结果集 private ResultSet rs = null; // 在构造方法中对属性进行初始化赋值操作 public MSSQLJDBC() { // 读取配置文件 readIni(); // 初始化连接 initConnect(); } // 可配置文件 .properties // 读取配置文件 private void readIni() { File file = new File(iniFileName); if (!file.exists()) { // 创建一个文件 try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 判断文件是否有值 if (file.length() == 0) {// 说明是一个空文件 // 初始化值 try { Properties p = new Properties(); p.put("driver", driver); p.put("url", url); p.put("user", user); p.put("password", password); FileOutputStream fos = new FileOutputStream(file); p.store(fos, "配置文件信息"); fos.close(); } catch (IOException e) { e.printStackTrace(); } } else {// 如果有值 // 将信息读取出来 try { FileInputStream fis = new FileInputStream(file); Properties p = new Properties(); p.load(fis); this.driver = p.getProperty("driver"); this.url = p.getProperty("url"); this.user = p.getProperty("user"); this.password = p.getProperty("password"); fis.close(); } catch (IOException e) { e.printStackTrace(); } } } // 建立连接 private void initConnect() { try { Class.forName(driver); this.connect = DriverManager.getConnection(url, user, password); this.connect.setAutoCommit(false);// 设置手动提交事务 this.stmt = connect.createStatement(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /*/ 从tomcat缓冲池获取连接 private void initConnectFromDataSource() { try { InitialContext ic = new InitialContext(); DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/oracleds"); this.connect = ds.getConnection(); this.connect.setAutoCommit(false); this.stmt = connect.createStatement(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } }*/ // 需要调用者控制事务的两个方法 // 提交方法 private void commit() { try { this.connect.commit(); } catch (SQLException e) { e.printStackTrace(); } } // 回滚事务 private void rollBack() { try { this.connect.rollback(); } catch (SQLException e) { e.printStackTrace(); } } // 定义一组与操作有关的方法 // 使用普通通道执行的select public ResultSet select(String sql) { ResultSet prs = null; if (stmt != null) { try { prs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } } return prs; } // 根据传入的sql直接获取单一值 // 使用此方法的时候sql语句返回的单一的值 public String selectFirstValue(String sql, String type, List<String> csList) { String rstr = ""; rs = select(sql, type, csList);// 确定此结果集只有一条记录 if (rs != null) {// 说明结果集有值,且只有一条记录 try { ResultSetMetaData rsmd = rs.getMetaData(); if (rs.next()) { // 移动到第一条记录 String p_type = rsmd.getColumnTypeName(1); rstr = getResultSetValue(rs, 1, p_type); } } catch (SQLException e) { e.printStackTrace(); } } return rstr; } // 使用普通通道执行的select /** * sql 参数 type 使用通道的类型 stmt pstmt cstmt List<String> csList 预编通道执行的参数队列 * String 最少必须满足如下条件的字符串 数据类型 ,数据值 数据类型定义说明 字符串 数字(整数、小数) 日期(DATE、TIMESTAMP) */ public ResultSet select(String sql, String type, List<String> csList) { ResultSet prs = null; if (type.equals(stmtType)) {// 说明使用普通通道来执行 prs = select(sql); } else if (type.equals(pstmtType)) {// 说明使用预编译通道来执行 if (connect != null) { try { pstmt = connect.prepareStatement(sql); // 验证传入的参数和sql中的参数个数一致 setPrepareStatement(pstmt, csList);// 将参数设置进当前的预编译通道 prs = pstmt.executeQuery(); } catch (Exception e) { e.printStackTrace(); } } } return prs; } // 获取 总页数 public int getPageNumber(String sql, String type, List<String> csList, int pageSize) { // 处理总页数 int pageNumber = 0; // 第一步获取sql总记录数 String psql = "select count(*) from (" + sql + ")"; String result = selectFirstValue(psql, type, csList); int rows = 0; if (result != null && result.trim() != "") { rows = Integer.valueOf(result); } if (rows % pageSize == 0) { pageNumber = rows / pageSize; } else { pageNumber = rows / pageSize + 1; } return pageNumber; } /** * 自动添加分页查询方法 * * @param sql * 要执行的sql * @param type * 执行方式 * @param csList * 参数列表 * @param curPage * 当前页数 * @param pageSize * 每页记录数 默认为10 * @return */ public ResultSet selectByFY(String sql, String type, List<String> csList, int curPage, int pageSize) { ResultSet prs = null; // 处理 每页记录数 if (pageSize <= 0) { pageSize = 10;// 默认页面10条记录 } int pageNumber = getPageNumber(sql, type, csList, pageSize); // 处理当前页数 if (curPage < 0) { curPage = 1;// 默认第一页 } if (curPage > pageNumber) { curPage = pageNumber; } String psql = "select tmpaa.* from (select tmpa.*,(select (ROW_NUMBER() over (order by id))) as rn from (" + sql + ") tmpa where (select (ROW_NUMBER() over (order by id))) <= " + (curPage * pageSize) + ") tmpaa where tmpaa.rn >= " + ((curPage - 1) * pageSize + 1); prs = select(psql, type, csList); return prs; } // 将预编通道执行的参数队列按照指定规则设置进通道中 private void setPrepareStatement(PreparedStatement p, List<String> csList) throws Exception { if (csList != null && csList.size() > 0) { for (int i = 0; i < csList.size(); i++) { // 此处的str是数据类型 ,数据值 // 解析出数据类型和数据值 String[] s = csList.get(i).split(","); String sType = s[0]; String sData = s[1]; if (varCharType.equals(sType)) { p.setString(i + 1, sData); } else if (intType.equals(sType)) { p.setInt(i + 1, Integer.valueOf(sData)); } else if(doubleType.equals(sType)){ p.setDouble(i+1, Double.valueOf(sData)); } else if (dateType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setDate(i + 1, new Date(d.getTime())); } else if (timeType.equals(sType)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); java.util.Date d = sdf.parse(sData); p.setTimestamp(i + 1, new Timestamp(d.getTime())); } } } } // 定义一个执行insert update delete的方法 public int iudSql(String sql) { int ri = -1; if (stmt != null) { try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; } public int iudSql(String sql, String type, List<String> csList) { int ri = -1; if (stmtType.equals(type)) { ri = iudSql(sql); } else if (pstmtType.equals(type)) { if (connect != null) { try { pstmt = connect.prepareStatement(sql); setPrepareStatement(pstmt, csList); ri = pstmt.executeUpdate(); commit(); } catch (Exception e) { e.printStackTrace(); rollBack(); } } } return ri; } /** * 编写一个通用的遍历ResultSet结果集的方法 */ public void iteratorResultSet(ResultSet rs) { try { if (rs != null) {// 说明有值 // ResultSetMetaData 此对象里封装了与结果集有关所有信息 // 此结果有几列组成,每列的列名,每列的数据类型 ResultSetMetaData rsmd = rs.getMetaData(); // 得到结果集列数 int columnCount = rsmd.getColumnCount(); // 输出此结果集的所有列名 for (int i = 1; i <= columnCount; i++) { System.out.print(rsmd.getColumnName(i) + "\t"); } System.out.println(""); // 遍历输出所有的数据 while (rs.next()) { // 如何在获取rs中的数据? for (int i = 1; i <= columnCount; i++) { String type = rsmd.getColumnTypeName(i); System.out.print(getResultSetValue(rs, i, type) + "\t"); } System.out.println(""); } } } catch (SQLException e) { e.printStackTrace(); } } // 从ResultSet中根据数据类型来得到数据值的方法 // 先处理常用的sqlserver的数据类型的对应 private String getResultSetValue(ResultSet rs, int index, String type) { String rstr = ""; try { if (rs != null && !"".equals(type) && index > 0) { if ("char".equals(type.trim()) || "varchar".equals(type.trim())) { if (rs.getString(index) != null) { rstr = rs.getString(index); } } else if ("int".equals(type.trim())) { rstr = rs.getInt(index) + ""; } else if ("decimal".equals(type.trim())) { rstr = String.valueOf(rs.getDouble(index)); } else if ("date".equals(type.trim())) { Date date = rs.getDate(index); if (date != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日").format(date); } } else if ("timestamp".equals(type.trim()) || "datetime".equals(type.trim())) { Timestamp tt = rs.getTimestamp(index); if (tt != null) { rstr = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(tt); } } } } catch (SQLException e) { e.printStackTrace(); } return rstr; } /* //统一事务管理的批量sql的封装 public boolean iudSql(List<String> sqlList){ int ri = -1; if(stmt!=null){ try { ri = stmt.executeUpdate(sql); commit(); } catch (SQLException e) { e.printStackTrace(); rollBack(); } } return ri; }*/ // 关闭连接 public void close() { try { // 关闭所有的与数据库有关的对象 if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } if (pstmt != null) { pstmt.close(); pstmt = null; } if (cstmt != null) { cstmt.close(); cstmt = null; } if (connect != null) { connect.close(); connect = null; } } catch (SQLException e) { e.printStackTrace(); } } }
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问