下面我整理了一下java中常用的几个与数据库交互的常用方法,仅供参考:

1.执行SQL(dao层的实现类中)

(1)SQL查询:

  1. //import org.hibernate.Query;
    //import org.hibernate.Session;
    /**
  2. * 通过名称查找id
  3. * @param psname
  4. * @return id
  5. */
  6. @Override
  7. public String findEnterpriseId(String psname) {
  8. String id = "";
  9. //查找信息的sql
  10. String sql = "select id from t_enterprise where psname = '"+psname+"'";
  11. //创建Query对象接收通过createSqlQuery()方法解析sql语句得到的结果
  12. //方式一:
  13. Query query = this.createSqlQuery(sql);
  14. //方式二:
  15. //Session session = getSession();
  16. //Query query = session.createSQLQuery(sql);
      //存储过程键值对应
      //sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);

  17. List<String[]> list = query.list();
  18. for (int i = 0; i < list.size(); i++) {
  19. Object obj = list.get(0);
  20. if (obj!=null) {
  21. id = obj.toString();
  22. }
  23. }
  24. return id;
  25. }

(2)SQL修改或删除

  1. @Override
  2. public void updateWeather(ActuallyWeather actuallyWeather) throws Exception {
  3. String sql = "update t_actually_weather set forecast_time = '"+actuallyWeather.getForecastTime()+"',"
  4. + "max_temperature = '"+actuallyWeather.getMaxTemperature()+"',"
  5. + "min_temperature = '"+actuallyWeather.getMinTemperature()+"',"
  6. + "place_name = '"+actuallyWeather.getPlaceName()+"',"
  7. + "pub_time = '"+actuallyWeather.getPubTime()+"',"
  8. + "weather_status = '"+actuallyWeather.getWeatherStatus()+"',"
  9. + "wind_power = '"+actuallyWeather.getWindPower()+"'"
  10. + " where id = '"+actuallyWeather.getId()+"'";
  11. this.getSession().clear();
  12. this.createSqlQuery(sql).executeUpdate();
  13. }

2.执行HQL(dao层的实现类中)

(1)返回Page

  1. 1
  2. //action中page属性
  3. private Page<UnifiedEnterInfo> page = new Page<UnifiedEnterInfo>(Constants.DEFAULT_PAGE_SIZE, true);
  4. 2
  5. page参数在(action)中只需要设置如下:
  6. page.setPageNo(this.getPageNo());
  7. page.setPageSize(this.getPageSize());
  8. 3
  9. /**
  10. * 查询
  11. * @param page
  12. * @param filterMap
  13. */
  14. @SuppressWarnings("rawtypes")
  15. @Override
  16. public Page<UnifiedEnterInfo> findAllEnterprise(Page<UnifiedEnterInfo> page,Map filterMap){
  17. String hql = " from UnifiedEnterInfo s where 1=1 ";
  18. //污染源名称
  19. String psname = (String) filterMap.get("psname");
  20. if (StringUtils.isNotEmpty(psname)) {
  21. String[] str = psname.split(" ");
  22. String reg = "";
  23. for (int i = 0; i < str.length; i++) {
  24. reg = str[i];
  25. if (!"".equals(reg)) {
  26. hql = hql+" and psname like '%"+reg+"%'";
  27. }
  28. }
  29. //hql = hql+" and psname like '%"+psname.trim()+"%'";
  30. }
  31.  
  32. //系统来源
  33. String systemSource = (String) filterMap.get("systemSource");
  34. if (StringUtils.isNotEmpty(systemSource)) {
  35. hql = hql+" and systemSource = "+systemSource;
  36. }
  37.  
  38. //所属区域
  39. String regionCode = (String) filterMap.get("regionCode");
  40. if (StringUtils.isNotEmpty(regionCode)) {
  41. if(!"110100".equals(regionCode))
  42. hql = hql+" and regionCode like '"+regionCode+"%'";
  43. }
  44.  
  45. //法人编码
  46. String corporationCode = (String) filterMap.get("corporationCode");
  47. if (StringUtils.isNotEmpty(corporationCode)) {
  48. hql = hql+" and corporationCode like '%"+corporationCode.trim()+"%'";
  49. }
  50.  
  51. //法人名称
  52. String corporationName = (String) filterMap.get("corporationName");
  53. if (StringUtils.isNotEmpty(corporationName)) {
  54. hql = hql+" and corporationName like '%"+corporationName.trim()+"%'";
  55. }
  56.  
  57. //地址
  58. String addr = (String) filterMap.get("addr");
  59. if (StringUtils.isNotEmpty(addr)) {
  60. hql = hql+" and addr like '%"+addr.trim()+"%'";
  61. }
  62.  
  63. //是否统一
  64. String ifUinfied =(String)filterMap.get("ifUinfied");
  65. if("1".equals(ifUinfied)) {
  66. hql = hql+" and mainOrChild=0";
  67. }else if("2".equals(ifUinfied)){
  68. hql = hql+" and mainOrChild!=0";
  69. }
  70.  
  71. hql = hql+" order by ltrim(rtrim(psname)) asc";
  72.  
  73. return this.find(page,hql);
  74. }

(2)返回唯一值:

  1. /**
  2. * 查询获取最大的统一污染源编码
  3. */
  4. @Override
  5. public String findMaxUniqueCode(){
  6. String hql = "select max(uniqueCode) from UnifiedEnterInfo ";
  7. return (String)this.findUnique(hql);
  8. }

(3)返回List:

  1. @Override
  2. public List<UnifiedEnterInfo> getUnifiedEnterInfosList(Map filterMap) {
  3. String hql = " from UnifiedEnterInfo s where 1=1 ";
  4. String psname = (String) filterMap.get("psname");
  5. if (StringUtils.isNotEmpty(psname)) {
  6. hql = hql+" and psname like '%"+psname.trim()+"%'";
  7. }
  8.  
  9. String corporationCode = (String) filterMap.get("corporationCode");
  10. if (StringUtils.isNotEmpty(corporationCode)) {
  11. hql = hql+" and corporationCode like '%"+corporationCode.trim()+"%'";
  12. }
  13.  
  14. String corporationName = (String) filterMap.get("corporationName");
  15. if (StringUtils.isNotEmpty(corporationName)) {
  16. hql = hql+" and corporationName like '%"+corporationName.trim()+"%'";
  17. }
  18.  
  19. String addr = (String) filterMap.get("addr");
  20. if (StringUtils.isNotEmpty(addr)) {
  21. hql = hql+" and addr like '%"+addr.trim()+"%'";
  22. }
  23.  
  24. hql = hql+" order by psname asc";
  25.  
  26. return this.find(hql);
  27. }

3.执行存储过程(dao层的实现类中)

注意:如果查询执行的时候数据库返回”该语句没有返回结果集。“这样的错误,存储过程中少了一句代码:SET NOCOUNT ON
 
(1)查询:
  1. public List findPsList(String psCode) {
  2. Long psCode1;
  3. //创建session对象
  4. Session session = this.getSession();
  5. //创建事务的对象
  6. Transaction trans = session.beginTransaction();
  7. //调用存储过程
  8. SQLQuery sqlQuery = session.createSQLQuery("{Call Proc_ZL_PSFlowRecharge(?)}");
  9. if ("".equals(psCode)||psCode==null) {
  10. psCode1 = (long) -1;
  11. }else{
  12. psCode1 = Long.parseLong(psCode);
  13. }
  14. //为存储过程设置输入参数
  15. sqlQuery.setLong(0,psCode1 == null ? 0 : psCode1);
         //存储过程键值对应
         //sqlQuery.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
  16. //提交事务
  17. trans.commit();
  18. //获取存储过程的运行结果(得到的结果是Object类型的数组集合)存入list集合
  19. List list = sqlQuery.list();
  20.  
  21. return list;
  22. }

(2)修改:

  1. public String savePSGross(Map<String, Object> map) {
  2. Date date = null;
  3. SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
  4. Long psCode1;
  5. //企业编码
  6. String psCode =(String) map.get("psCode");
  7. //污染因子编码
  8. String monitorItemCode =(String) map.get("monitorItemCode");
  9. //充值时间
  10. String time = (String) map.get("time");
  11. //充值量
  12. String acpNumber =(String) map.get("acpNumber");
  13. //充值类型
  14. String rechargeType =(String) map.get("rechargeType");
  15. //创建session对象
  16. Session session = this.getSession();
  17. //创建事务的对象
  18. Transaction trans = session.beginTransaction();
  19. //调用存储过程
  20. SQLQuery query = session.createSQLQuery("{Call Proc_ZL_SavePSGrossInfo(?,?,?,?,?)}");
  21. if ("".equals(psCode)||psCode==null) {
  22. psCode1 = (long) -1;
  23. }else{
  24. psCode1 = Long.parseLong(psCode);
  25. }
  26. if (StringUtils.isNotEmpty(time)) {
  27. try {
  28. date = sf.parse(time);
  29. } catch (ParseException e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. //为存储过程设置输入参数
  34. query.setLong(0,psCode1 == null ? 0 : psCode1);
  35. query.setString(1,monitorItemCode == null ? "" : monitorItemCode);
  36. query.setString(2,time == null ? "" : time);
  37. query.setBigDecimal(3,acpNumber == null ? new BigDecimal("0") : new BigDecimal(acpNumber));
  38. query.setString(4,rechargeType == null ? "" : rechargeType);
  39. query.executeUpdate();
  40. return "success";
  41. }

(3)用JDBC方式连接数据库执行存储过程:

所需的jar包:sqljdbc4.jar

工具类:

  1. package com.jointsky.jointframe.ui.project.util;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.FileInputStream;
  5. import java.io.InputStream;
  6. import java.sql.Connection;
  7. import java.sql.DriverManager;
  8. import java.util.Properties;
  9.  
  10. import com.jointsky.jointframe.system.config.service.JointFrameConfigManager;
  11.  
  12. /**
  13. *
  14. * <p>Description:JDBC连接工具类</p>
  15. *
  16. * @author liuf
  17. * @date 2017-6-26
  18. * @version 1.0
  19. */
  20. public class JdbcUtil {
  21. public static Connection getConn() {
  22. String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  23. String dbURL = "jdbc:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=数据库名";
  24. String userName = "sa";
  25. String userPwd = "123.com";
  26. Connection dbConn = null;
  27. try {
  28.  
  29. Class.forName(driverName);
  30.  
  31. dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
  32.  
  33. System.out.println("连接数据库成功");
  34.  
  35. } catch (Exception e) {
  36.  
  37. e.printStackTrace();
  38.  
  39. System.out.print("连接失败");
  40.  
  41. }
  42. return dbConn;
  43. }
  44. }

调用方式:

  1. @Override
  2. public List<MonitorData> getAllMonitorDatas(Map<String, Object> filterMap)
  3. throws Exception {
  4.  
  5. List<MonitorData> list = new ArrayList<MonitorData>();
  6. try {
  7. Connection dbConn = JdbcUtil.getConn();
  8. CallableStatement statement = dbConn.prepareCall("SET NOCOUNT ON exec dbo.ProcGetMonitorDatas ?,?,?,?,?,?,?,?");
  9. //开始时间
  10. Date beginTime = (Date) filterMap.get("beginTime");
  11. //结束时间
  12. Date endTime = (Date) filterMap.get("endTime");
  13. //编码
  14. String monitorPointCode = (String) filterMap.get("monitorPointCode");
  15. //编码
  16. String pollutantCode = (String)filterMap.get("pollutantCode");
  17. //编码
  18. String psCode = (String)filterMap.get("psCode");
  19. //类型
  20. Integer outputType = (Integer)filterMap.get("outputType");
  21. //类型
  22. Integer alarmType = (Integer) filterMap.get("alarmType");
  23. //类型细分
  24. Integer alarmTypeDetails = (Integer) filterMap.get("alarmTypeDetails");
  25. if (endTime == null) {
  26. endTime = new Date();
  27. }
  28. //为存储过程设置输入参数
  29. statement.setDate(1,new java.sql.Date(beginTime == null ? null : beginTime.getTime()));
  30. statement.setDate(2,new java.sql.Date(endTime == null ? null : endTime.getTime()));
  31. statement.setString(3,(String) (monitorPointCode == null ? "" : monitorPointCode));
  32. statement.setString(4,(String) (pollutantCode == null ? "" : pollutantCode));
  33. statement.setString(5,(String) (psCode == null ? "" : psCode));
  34. statement.setInt(6,outputType == null ? -1 : outputType);
  35. statement.setInt(7,alarmType == null ? -1 : alarmType);
  36. statement.setInt(8,alarmTypeDetails == null ? -1 : alarmTypeDetails);
  37. ResultSet rs = statement.executeQuery();
  38. while (rs.next()) {
  39. MonitorData c = new MonitorData();
  40. //String id = rs.getString("id");
  41. //String monitorPointName = rs.getString("jkkljj");
  42.  
  43. c.setPsName(rs.getString("psName"));
  44. c.setMonitorPointName(rs.getString("monitorPointName"));
  45. c.setPollutantName(rs.getString("pollutantName"));
  46. c.setMonitorTime(rs.getDate("monitorTime"));
  47. c.setMonitorTimeCn(StringUtils.isEmpty(rs.getString("monitorTime")) ? "" : rs.getString("monitorTime").substring(0, 13) + "时");
  48. c.setMonitorValueType(rs.getString("monitorValueType"));
  49. c.setMonitorValue(rs.getString("monitorValue"));
  50. c.setOutputType(Integer.parseInt(rs.getString("outputType")));
  51.  
  52. list.add(c);
  53. }
  54. statement.close();
  55. } catch (Exception e1) {
  56. e1.printStackTrace();
  57. }
  58. return list;
  59. }

4.用Criteria执行查询:

  1. public Page<AddressBook> find(Page<AddressBook> page,
  2. Map<String, String> filterMap) {
  3. Criteria criteria = this.createCriteria();
  4. try {
  5. if (filterMap.size() > 0) {
  6. String name = filterMap.get("fullName");
  7. if (StringUtils.isNotEmpty(name)) {
  8. criteria.add(Restrictions.like("fullName", name,
  9. MatchMode.ANYWHERE));
  10. }
  11. String unit = filterMap.get("unit");
  12. if (StringUtils.isNotEmpty(unit)) {
  13. criteria.add(Restrictions.like("unit", unit,
  14. MatchMode.ANYWHERE));
  15. }
  16. criteria.addOrder(Order.asc("fullName"));
  17.  
  18. }
  19. Page<AddressBook> pages = this.findByCriteria(page, criteria);
  20. return pages;
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24. return null;
  25. }

java与数据库交互常用到的一些方法的更多相关文章

  1. java 获取键盘输入常用的两种方法

    java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...

  2. java十五个常用类学习及方法举例

    <code class="language-java">import java.util.Scanner; import java.util.Properties; i ...

  3. Java中Object类常用的12个方法,你用过几个?

    前言 Java 中的 Object 方法在面试中是一个非常高频的点,毕竟 Object 是所有类的“老祖宗”.Java 中所有的类都有一个共同的祖先 Object 类,子类都会继承所有 Object ...

  4. 【助教】Java获取数据库数据展示

    本文将给出一个最简单的Java查询数据库中一张表的数据并将查询结果展示在页面的例子. 实际上,我们要解决以下两个问题: Java与数据库交互(以JDBC为例) 数据展示在前台页面(以Servlet+J ...

  5. 说说Java程序和数据库交互的乱码解决

    本文就本人遇到的问题进行讲解 1.通过jdbc直连方式,连接Mysql数据库,从程序向数据库中写入数据出现的乱码解决方案. 当通过程序向Student表中写入一条数据时,写入数据库的内容会产生乱码. ...

  6. Java豆瓣电影爬虫——减少与数据库交互实现批量插入

    节前一个误操作把mysql中record表和movie表都清空了,显然我是没有做什么mysql备份的.所以,索性我把所有的表数据都清空的,一夜回到解放前…… 项目地址:https://github.c ...

  7. Eclipse中java向数据库中添加数据,更新数据,删除数据

    前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...

  8. OAF_JDBC系列1 - 数据库交互取值方式(案例)

    2014-06-15 Created By BaoXinjian

  9. 辅助的写与数据库交互的XML文件的类

    现在企业级WEB应用中与数据库交互的XML文件都是通过插件自动生成的,不过有些时候修改比较老的项目的时候也是需要手动的来做这一动作的!如下代码就是一个实现上述的功能的辅助类,在此记录一下以备后用! p ...

随机推荐

  1. ListBoxEdit

    <dxe:ListBoxEdit ShowBorder="False" SelectedIndex="0" x:Name="lbView&quo ...

  2. [android错误] Failed to install *.apk on device 'emulator-5554': timeout

    [2014-06-26 15:35:42 - app] ------------------------------ [2014-06-26 15:35:42 - app] Android Launc ...

  3. mac 下vim 配置文件

    " Configuration file for vim set modelines=0 " CVE-2007-2438 " Normally we use vim-ex ...

  4. ubuntu 安装 codelite

    http://www.linuxidc.com/Linux/2013-06/85332.htm Ubuntu 12.04下为codelite增添更新源 1.获取codelite的公钥 sudo apt ...

  5. jsoup抓取豆瓣美女

    package com.huowolf; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOu ...

  6. rpm常用命令及rpm参数介绍

    RPM是RedhatPackageManager的缩写,是由RedHat公司开发的软件包安装和管理程序,同Windows平台上的Uninstaller比较类似.使用RPM,用户可以自行安装和管理Lin ...

  7. filezilla

    中文网站:https://www.filezilla.cn/ 英文网站:https://filezilla-project.org/ FileZilla 客户端是一个快速可靠的.跨平台的FTP,FTP ...

  8. $nextTick 宏任务 微任务 macrotasks microtasks

    1.nextTick调用方法 首先看nextTick的调用方法: https://cn.vuejs.org/v2/api/#Vue-nextTick // 修改数据 vm.msg = 'Hello' ...

  9. Eclipse中jar包关联JDK源代码

    1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES"2.此 ...

  10. mysql-cluster 7.3.5-linux 安装

    [集群环境] 管理节点    10.0.0.19 数据节点    10.0.0.12                    10.0.0.17 sql节点       10.0.0.18 10.0.0 ...