论坛首页 入门技术论坛

一个通用查询(原创)

浏览 6606 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-22  
java 代码
  1. package com.abc.www;   
  2.   
  3. import java.lang.reflect.InvocationTargetException;   
  4. import java.lang.reflect.Method;   
  5. import java.sql.*;   
  6. import java.util.ArrayList;   
  7.   
  8. public class NewTestReflect {   
  9.   
  10. public static void main(String[] args) throws Exception {   
  11.    NewTestReflect newtestreflect=new NewTestReflect();   
  12.    newtestreflect.select("select * from test""com.tangshun.www.Person");   
  13. }   
  14.   
  15. private static String getSetMethodName(String columnName) {   
  16.    return "set" + columnName.substring(01).toUpperCase()   
  17.      + columnName.toLowerCase().substring(1);   
  18. }   
  19.   
  20. /**  
  21.    * 需要提供sql语句,以及操作数据库表对应的类名字(包括包名)  
  22.    * 如:select * from test;则类名字应该是   包.Test  
  23.    * Test.java是一个简单的pojo,对数据库里面的字段只有相应的set get方法  
  24.    * 如果有必要,可以增加其他相关的构造方法等  
  25.    * @param sql  
  26.    * @param className  
  27.    * @return ArrayList  
  28.    */  
  29. public ArrayList select(String sql, String className) {   
  30.    Connection connection = null;   
  31.    PreparedStatement stmt = null;   
  32.    ResultSet rs = null;   
  33.    ArrayList paraList = new ArrayList();   
  34.    try {   
  35.     Class.forName("com.mysql.jdbc.Driver");   
  36.     connection = DriverManager.getConnection(   
  37.       "jdbc:mysql://localhost/test""root""123456");   
  38.     stmt = connection.prepareStatement(sql);   
  39.     rs = stmt.executeQuery();   
  40.     Object c1 = null;   
  41.     ResultSetMetaData rsmd = rs.getMetaData();//获得元数据   
  42.     int columnCount = rsmd.getColumnCount();//获得查询的列数个数   
  43.     while (rs.next()) {   
  44.      c1 = Class.forName(className).newInstance();//根据String型的类名,得到一个Object   
  45.      for (int i = 1; i <= columnCount; i++) {//循环设置该类的set方法的相关属性   
  46.       Method m = c1.getClass().getMethod(   
  47.         getSetMethodName(rsmd.getColumnName(i)),   
  48.         Class.forName(rsmd.getColumnClassName(i)));//获得方法   
  49.       m.invoke(c1, rs.getObject(rsmd.getColumnName(i)));//设置set,此处用ResultSet.getObject(String s)方法   
  50.      }   
  51.      paraList.add(c1);//增加到List中   
  52.     }   
  53.     Person p = (Person) paraList.get(0);   
  54.     System.out.println(p.getName());   
  55.   
  56.    } catch (SQLException ex) {   
  57.     ex.printStackTrace();   
  58.    } catch (ClassNotFoundException e) {   
  59.     e.printStackTrace();   
  60.    } catch (NoSuchMethodException e) {   
  61.     e.printStackTrace();   
  62.    } catch (InvocationTargetException e) {   
  63.     e.printStackTrace();   
  64.    } catch (IllegalAccessException e) {   
  65.     e.printStackTrace();   
  66.    } catch (InstantiationException e) {   
  67.     e.printStackTrace();   
  68.    } finally {   
  69.     try {   
  70.      rs.close();   
  71.      rs = null;   
  72.     } catch (Exception ex) {   
  73.     }   
  74.     try {   
  75.      stmt.close();   
  76.      stmt = null;   
  77.     } catch (Exception ex) {   
  78.     }   
  79.    }   
  80.    try {   
  81.     connection.close();   
  82.     connection = null;   
  83.    } catch (Exception ex) {   
  84.    }   
  85.   
  86.    return paraList;   
  87. }   
  88.   
  89.   
  90. }   
  91.   
   发表时间:2007-05-22  
呵呵,通用是通用,大多java的教科书大多有这么写的
为什么不用一下spring封装的JDBC,那一个用起来方便多
0 请登录后投票
   发表时间:2007-05-22  
为了学习下反射而写
0 请登录后投票
   发表时间:2007-05-23  
引用
Method m = c1.getClass().getMethod(getSetMethodName(rsmd.getColumnName(i)),Class.forName(rsmd.getColumnClassName(i)));//获得方法


getMethod()方法报错了.
The method getMethod(String, Class[]) in the type Class is not applicable for the arguments (String, Class)
0 请登录后投票
   发表时间:2007-05-23  
需要相应的javabean
0 请登录后投票
   发表时间:2007-05-23  
breezedancer 写道
需要相应的javabean

Class.getMethod(String, Class[])说,它不要Class,它要Class[].
需要什么相应的javabean?
0 请登录后投票
   发表时间:2007-06-11  
将取得的arraylist  用最快捷的方式的传导页面上显示出来怎么做
0 请登录后投票
   发表时间:2008-05-20  
多表怎么办?
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics