1 import java.lang.reflect.*;2 import java.sql.*;3 import java.util.*;4

5 public classSqlHelper {6 //SQL Server

7 /**

8 * JDBC驱动名称9 */

10 public static final String CLASS_NAME = "com.microsoft.sqlserver.jdbc.SQLServerDriver";11 /**

12 * 数据库连库字符串13 */

14 public static final String URL = "jdbc:sqlserver://192.168.1.254:1433;databaseName=BBSDB";15 /**

16 * 用户名17 */

18 public static final String UID = "sa";19 /**

20 * 密码21 */

22 public static final String PWD = "";23 /**

24 * JDBC驱动类型25 */

26 public static Class CLS = null;27

28 //Oracle29 //public static final String CLASS_NAME =30 //"oracle.jdbc.driver.OracleDriver";31 //public static final String URL =32 //"jdbc:oracle:thin:@localhost:1522:accp11g";33 //public static final String UID = "system";34 //public static final String PWD = "manager";

35 /**

36 * 获取数据库连接对象37 *38 *@return

39 *@throwsClassNotFoundException40 *@throwsSQLException41 */

42 public static Connection getConnection() throwsClassNotFoundException,43 SQLException {44 if (CLS == null) {45 CLS =Class.forName(CLASS_NAME);46 }47 returnDriverManager.getConnection(URL, UID, PWD);48 }49

50 /**

51 * 执行SQL语句不返回查询的操作,返回受影响的行数52 *53 *@paramsql54 * SQL语句55 *@return受影响的行数56 *@throwsClassNotFoundException57 *@throwsSQLException58 */

59 public static intexecuteNonQuery(String sql) {60 int result = -1;61 Connection con = null;62 PreparedStatement ps = null;63 try{64 con =getConnection();65 ps =con.prepareStatement(sql);66 result =ps.executeUpdate();67 } catch(Exception e) {68 e.printStackTrace();69 } finally{70 close(con, ps, null);71 }72 returnresult;73 }74

75 /**

76 * 执行Insert语句,返回Insert成功之后标识列的值77 *78 *@paramsql79 *@return

80 *@throwsClassNotFoundException81 *@throwsSQLException82 */

83 public static intexecuteIdentity(String sql) {84 int identity = -1;85 Connection con = null;86 Statement ps = null;87 ResultSet rs = null;88 try{89 con =getConnection();90 ps =con.createStatement();91 ps.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);92 rs =ps.getGeneratedKeys();93 if(rs.next()) {94 //identity = rs.getInt("GENERATED_KEYS");

95 identity = rs.getInt(1);96 }97 } catch(Exception e) {98 e.printStackTrace();99 } finally{100 close(con, ps, null);101 }102 returnidentity;103 }104

105 /**

106 * 执行不返回结果集的存储过程107 *108 *@paramsql109 * 存储过程名称110 *@paramparams111 * 存储过程参数112 *@throwsClassNotFoundException113 *@throwsSQLException114 */

115 public static voidexecuteNonQuery(String sql, SqlParameter... params) {116 Connection con = null;117 CallableStatement cs = null;118 try{119 con =getConnection();120 cs =con.prepareCall(sql);121 setSqlParameter(cs, params);122 cs.executeUpdate();123 getSqlParameter(cs, params);124 } catch(Exception e) {125 e.printStackTrace();126 } finally{127 close(con, cs, null);128 }129 }130

131 /**

132 * 执行返回聚合函数的操作133 *134 *@paramsql135 * 含有聚合函数的SQL语句136 *@return聚合函数的执行结果137 *@throwsSQLException138 *@throwsClassNotFoundException139 */

140 public static intexecuteScalar(String sql) {141 int result = -1;142 Connection con = null;143 PreparedStatement ps = null;144 ResultSet rs = null;145 try{146 con =getConnection();147 ps =con.prepareStatement(sql);148 rs =ps.executeQuery();149 if(rs.next()) {150 result = rs.getInt(1);151 }152 } catch(Exception e) {153 e.printStackTrace();154 } finally{155 close(con, ps, rs);156 }157 returnresult;158 }159

160 /**

161 * 执行返回泛型集合的SQL语句162 *163 *@paramcls164 * 泛型类型165 *@paramsql166 * 查询SQL语句167 *@return泛型集合168 *@throwsClassNotFoundException169 *@throwsSQLException170 *@throwsInstantiationException171 *@throwsIllegalAccessException172 */

173 public static List executeList(Classcls, String sql) {174 List list = new ArrayList();175 Connection con = null;176 PreparedStatement ps = null;177 ResultSet rs = null;178 try{179 con =getConnection();180 ps =con.prepareStatement(sql);181 rs =ps.executeQuery();182 while(rs.next()) {183 T obj =executeResultSet(cls, rs);184 list.add(obj);185 }186 } catch(Exception e) {187 e.printStackTrace();188 } finally{189 close(con, ps, rs);190 }191 returnlist;192 }193

194 /**

195 * 执行返回泛型集合的存储过程196 *197 *@paramcls198 * 泛型类型199 *@paramsql200 * 存储过程名称201 *@paramparams202 * 存储过程参数203 *@return泛型集合204 *@throwsClassNotFoundException205 *@throwsSQLException206 *@throwsInstantiationException207 *@throwsIllegalAccessException208 */

209 public static List executeList(Classcls, String sql,210 SqlParameter... params) {211 List list = new ArrayList();212 Connection con = null;213 CallableStatement cs = null;214 ResultSet rs = null;215 try{216 con =getConnection();217 cs =con.prepareCall(sql);218 setSqlParameter(cs, params);219 rs =cs.executeQuery();220 while(rs.next()) {221 T obj =executeResultSet(cls, rs);222 list.add(obj);223 }224 } catch(Exception e) {225 e.printStackTrace();226 } finally{227 close(con, cs, rs);228 }229 returnlist;230 }231

232 /**

233 * 执行返回泛型类型对象的SQL语句234 *235 *@paramcls236 * 泛型类型237 *@paramsql238 * SQL语句239 *@return泛型类型对象240 *@throwsSQLException241 *@throwsClassNotFoundException242 *@throwsInstantiationException243 *@throwsIllegalAccessException244 */

245 public static T executeEntity(Classcls, String sql) {246 T obj = null;247 Connection con = null;248 PreparedStatement ps = null;249 ResultSet rs = null;250 try{251 con =getConnection();252 ps =con.prepareStatement(sql);253 rs =ps.executeQuery();254 while(rs.next()) {255 obj =executeResultSet(cls, rs);256 break;257 }258 } catch(Exception e) {259 e.printStackTrace();260 } finally{261 close(con, ps, rs);262 }263 returnobj;264 }265

266 /**

267 * 执行返回泛型类型对象的存储过程268 *269 *@paramcls270 * 泛型类型271 *@paramsql272 * SQL语句273 *@paramparams274 * 存储过程参数275 *@return泛型类型对象276 *@throwsSQLException277 *@throwsClassNotFoundException278 *@throwsInstantiationException279 *@throwsIllegalAccessException280 */

281 public static T executeEntity(Classcls, String sql,282 SqlParameter... params) {283 T obj = null;284 Connection con = null;285 CallableStatement cs = null;286 ResultSet rs = null;287 try{288 con =getConnection();289 cs =con.prepareCall(sql);290 setSqlParameter(cs, params);291 rs =cs.executeQuery();292 while(rs.next()) {293 obj =executeResultSet(cls, rs);294 break;295 }296 } catch(Exception e) {297 e.printStackTrace();298 } finally{299 close(con, cs, rs);300 }301 returnobj;302 }303

304 /**

305 * 将一条记录转成一个对象306 *307 *@paramcls308 * 泛型类型309 *@paramrs310 * ResultSet对象311 *@return泛型类型对象312 *@throwsInstantiationException313 *@throwsIllegalAccessException314 *@throwsSQLException315 */

316 private static T executeResultSet(Classcls, ResultSet rs)317 throwsInstantiationException, IllegalAccessException, SQLException {318 T obj =cls.newInstance();319 ResultSetMetaData rsm =rs.getMetaData();320 int columnCount =rsm.getColumnCount();321 //Field[] fields = cls.getFields();

322 Field[] fields =cls.getDeclaredFields();323 for (int i = 0; i < fields.length; i++) {324 Field field =fields[i];325 String fieldName =field.getName();326 for (int j = 1; j <= columnCount; j++) {327 String columnName =rsm.getColumnName(j);328 if(fieldName.equalsIgnoreCase(columnName)) {329 Object value =rs.getObject(j);330 field.setAccessible(true);331 field.set(obj, value);332 break;333 }334 }335 }336 returnobj;337 }338

339 /**

340 * 设置存储过程参数名称,参数值,参数方向341 *342 *@paramcs343 *@paramparams344 *@throwsSQLException345 */

346 private static voidsetSqlParameter(CallableStatement cs,347 SqlParameter... params) throwsSQLException {348 if (params != null) {349 for(SqlParameter param : params) {350 if(param.OutPut) {351 String paramName =param.Name;352 if (paramName == null || paramName.equals("")) {353 cs.registerOutParameter(1, param.Type);//设置返回类型参数

354 } else{355 cs.registerOutParameter(paramName, param.Type);//设置输出类型参数

356 }357 } else{358 cs.setObject(param.Name, param.Value);//设置输入类型参数

359 }360 }361 }362 }363

364 /**

365 * 得到存储过程参数执行结果366 *367 *@paramcs368 *@paramparams369 *@throwsSQLException370 */

371 private static voidgetSqlParameter(CallableStatement cs,372 SqlParameter... params) throwsSQLException {373 for(SqlParameter param : params) {374 if(param.OutPut) {375 String paramName =param.Name;376 if (paramName == null || paramName.equals("")) {377 param.Value = cs.getObject(1);//返回类型参数值

378 } else{379 param.Value = cs.getObject(paramName);//输出类型参数值

380 }381 }382 }383 }384

385 /**

386 * 关闭JDBC对象,释放资源。387 *388 *@paramcon389 * 连接对象390 *@paramps391 * 命令对象392 *@paramrs393 * 结果集对象394 *@throwsSQLException395 */

396 private static voidclose(Connection con, Statement ps, ResultSet rs) {397 try{398 rs.close();399 if (rs != null) {400

401 rs = null;402 }403 if (ps != null) {404 ps.close();405 ps = null;406 }407 if (con != null) {408 con.close();409 con = null;410 }411 } catch(SQLException e) {412 //TODO Auto-generated catch block

413 e.printStackTrace();414 }415 }416 }

java 反射创建对象并赋值_[原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)...相关推荐

  1. java 文档比较功能_[原创]java在线比较两个word文件

    一.项目背景 开发文档管理系统或OA办公系统的时候,实现在线处理word文档的功能比较容易,但是也经常会有客户提出文档版本管理的需求,这就需要同时在线打开两个word文件,对比两个不同版本的word文 ...

  2. java文件批量改名代码_[原创]JAVA版批量更名程序(附源码)(要求加分)

    这是上学时JAVA课程的课程实践,因为学习好,老师让写一个比较有难度的程序出来,不要随便写个简单的来应付. 当时也不知道什么类型的程序在JAVA里比较有难度,正好在JAVA中文论坛里看到有人问用JAV ...

  3. java打印两个小人_[原创]Java画小人与阶梯问题的解答

    package test; /** #Python源代码: #By:Cat73 QQ 1901803382 #2014年7月22日19:33:12 #画图函数 width:台阶的宽度(至少为4) hi ...

  4. java为什么用工厂模式_【Java】为什么建议没事不要随便用工厂模式创建对象?...

    一般情况下,工厂模式分为三种更加细分的类型:简单工厂.工厂方法和抽象工厂.在这三种细分的工厂模式中,简单工厂.工厂方法原理比较简单,在实际的项目中也比较常用.而抽象工厂的原理稍微复杂点,在实际的项目中 ...

  5. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  6. Java 判断实体类对象的全部属性是否空

    代码: public boolean checkObjAllFieldsIsNull(Object object) {// 如果对象为null直接返回trueif (null == object) { ...

  7. java获取实体类对象_java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...

  8. Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套

    最近在做企微开发,遇到了一个比较复杂的xml然后要去我将xml转成实体类 xml如下 <xml><ToUserName><![CDATA[toUser]]>< ...

  9. JSON字符串封装成Bean对象/JSON串反序列化成实体类对象/JSON字符串转换成Java对象

    文章目录 使用阿里巴巴的 JSON 使用 ObjectMapper JSON字段与实体类属性不一致 首先,我们建立一个实体类,这里简单定义了 name.sex.age 三个属性,以及 get.set. ...

最新文章

  1. 迁移学习之MobileNet(88层)和MobileNetV2(88层)
  2. 企业如何进行团队协作?
  3. matlab示波器模拟,声卡虚拟示波器-使用matlab DAQ工具箱中API实现
  4. 如何安装系统认证签名过的APK
  5. 数字图像处理:第十二章 小波变换
  6. mongo connections url string 的问题
  7. informix报错244_关于informix的配置问题
  8. zabbix可以监控什么php,zabbix监控php
  9. python之collections之有序字典(OrderedDict)
  10. 37 SD配置-销售凭证设置-分配项目类别
  11. 使用 npm script 的钩子
  12. box2dweb基础
  13. Flex初学者群(54200135)共享资料清单-----2008.1.24
  14. 通过编写纯代码与JDBC实现对mysql的数据实现增删改查案例,jdbc连接数据库六步完整步骤详解,适合编程新手,通俗易懂
  15. 解决office 2019打开word、excel慢的问题
  16. 连接工作站跑机器学习(Linux命令)
  17. 绍兴14岁女孩被德云社录取,她究竟有什么来历呢?
  18. GAN原理及Pytorch框架实现GAN(比较容易理解)
  19. 雨天-一万个理由-LRC歌词下载
  20. [ Windows 10 ] 任务栏按钮不显示正在打开的窗口了(打开任何程序任务栏图标按钮都不显示)

热门文章

  1. PostgreSQL的安装和启动方法大全
  2. 并发编程中,你加的锁未必安全
  3. OpenMetric与时序数据库模型之主流TSDB分析
  4. AI+云原生,把卫星遥感虐的死去活来
  5. 带你了解两种线性规划的方法:稀疏矩阵存储和预处理
  6. Python基础语法和数据类型最全总结
  7. 当代开发者的六大真实现状,你被哪一个场景“戳中”了?
  8. 【华为云技术分享】竞享实例:让你尽享云服务的“鱼”和“熊掌”
  9. 【华为云技术分享】前端工程师必备:从浏览器的渲染到性能优化
  10. Python自带又好用的代码调试工具Pdb学习笔记