JDBC工具类 不多解释了 注释写的挺全的
package com.sdu.utils; import java.io.UnsupportedEncodingException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * @类功能说明:JDBC工具类 * @公司名称:jinhou * @作者:WeiYC * @创建时间:2015-1-26 上午10:41:52 */ public class JDBCUtility { private Connection conn; private Statement st; private PreparedStatement pps; private ResultSet rs; public String url = DBPropertiesUtility.getUrl(); private String user = DBPropertiesUtility.getUser(); private String password = DBPropertiesUtility.getPwd(); private static String driver1 = "oracle.jdbc.driver.OracleDriver"; private static String driver2 = "com.mysql.jdbc.Driver"; // 加载驱动、放在静态代码块中,保证驱动在整个项目中只加载一次,提高效率 static { try { // String driver = DBPropertiesUtility.getDriver(); Class.forName(driver1); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 获取连接的方法 * * @return Connection 一个有效的数据库连接 */ public Connection getConnection() { try { // 注意链接时,要换成自己的数据库名,数据库用户名及密码 Connection con = DriverManager.getConnection(url, user, password); return con; } catch (SQLException e) { e.printStackTrace(); } return null; } /** * 用于执行更新的方法,包括(insert delete update)操作 * * @param sql * String 类型的SQL语句 * @return Integer 表示受影响的行数 */ public int update(String sql) { // 定义变量用来判断更新操作是否成功,如果返回-1说明没有影响到更新操作的数据库记录条数,即更新操作失败 int row = -1; try { // 如果数据库链接被关闭了,就要既得一个新的链接 if (conn == null || conn.isClosed()) { conn = getConnection(); } // 使用Connection对象conn的createStatement()创建Statement(数据库语句对象)st st = conn.createStatement(); // 执行更新操作,返回影响的记录条数row row = st.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return row; } /** * 基于PreparedStatement的修改方法 PreparedStatement:表示预编译的 SQL 语句的对象 * * @param sql * String 类型的SQL语句(insert delete update) * @param obj * 存放动态参数的数组 * @return Integer 表示受影响的行数 */ public int update(String sql, Object... obj) { try { // 获取链接 if (conn == null || conn.isClosed()) { conn = getConnection(); } // 创建预编译的 SQL 语句对象 pps = conn.prepareStatement(sql); // 定义变量length代表数组长度,也就是预处理的sql语句中的参数个数 int length = 0; // ParameterMetaData:用于获取关于 PreparedStatement 对象中每个参数的类型和属性信息的对象 ParameterMetaData pmd = pps.getParameterMetaData(); length = pmd.getParameterCount(); // 循环将sql语句中的?设置为obj数组中对应的值,注意从1开始,所以i要加1 for (int i = 0; i < length; i++) { pps.setObject(i + 1, obj[i]); } // 执行更新操作 return pps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return -1; } /** * 获取一条记录的方法,要依赖于下面的queryToList方法,注意泛型的使用 * * @param sql * @return Map<String,Object> */ public Map<String, Object> getOneRow(String sql) { // 执行下面的queryToList方法 List<Map<String, Object>> list = queryToList(sql); // 三目运算,查询结果list不为空返回list中第一个对象,否则返回null return list.size() > 0 ? list.get(0) : null; } /** * 返回查询结果列表,形如:[{TEST_NAME=aaa, TEST_NO=2, TEST_PWD=aaa}, {TEST_NAME=bbb, * TEST_NO=3, TEST_PWD=bbb}...] * * @param sql * @return List<Map<String,Object>> */ public List<Map<String, Object>> queryToList(String sql) { // 创建集合列表用以保存所有查询到的记录 List<Map<String, Object>> list = new LinkedList<Map<String, Object>>(); try { if (conn == null || conn.isClosed()) { conn = getConnection(); } st = conn.createStatement(); rs = st.executeQuery(sql); // ResultSetMetaData 是结果集元数据,可获取关于 ResultSet 对象中列的类型和属性信息的对象 // 例如:结果集中共包括多少列,每列的名称和类型等信息 ResultSetMetaData rsmd = rs.getMetaData(); // 获取结果集中的列数 int columncount = rsmd.getColumnCount(); // while条件成立表明结果集中存在数据 while (rs.next()) { // 创建一个HashMap用于存储一条数据 HashMap<String, Object> onerow = new HashMap<String, Object>(); // 循环获取结果集中的列名及列名所对应的值,每次循环都得到一个对象,形如:{TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa} for (int i = 0; i < columncount; i++) { // 获取指定列的名称,注意orcle中列名的大小写 String columnName = rsmd.getColumnName(i + 1); //进行编码设置 int type = rsmd.getColumnType(i+1); if(type==Types.CHAR||type==Types.VARCHAR||type==Types.LONGVARCHAR){ if(!CommonUtility.isEmpty(rs.getString(i+1))){ String value=""; try { value = new String(rs.getString(i+1).getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } onerow.put(columnName, value); System.out.println("列名:"+columnName+" 值:"+value); } }else{ onerow.put(columnName, rs.getObject(i + 1)); System.out.println("列名:"+columnName+" 值:"+rs.getObject(i + 1)); } } // 将获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa}放到集合列表中 list.add(onerow); } } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return list; } /** * 返回查询结果列表,使用的是预编绎SQL 语句对象PreparedStatement 形如:[{TEST_NAME=aaa, TEST_NO=2, * TEST_PWD=aaa}, {TEST_NAME=bbb, TEST_NO=3, TEST_PWD=bbb}] * * @param sql * @param paramValues * @return List<Map<String,Object>> */ public List<Map<String, Object>> queryWithParam(String sql, Object... paramValues) { // 创建集合列表用以保存所有查询到的记录 List<Map<String, Object>> list = new LinkedList<Map<String, Object>>(); try { if (conn == null || conn.isClosed()) { conn = getConnection(); } pps = conn.prepareStatement(sql); for (int i = 0; i < paramValues.length; i++) { pps.setObject(i + 1, paramValues[i]); } rs = pps.executeQuery(); // ResultSetMetaData 是结果集元数据,可获取关于 ResultSet 对象中列的类型和属性信息的对象 // 例如:结果集中共包括多少列,每列的名称和类型等信息 ResultSetMetaData rsmd = rs.getMetaData(); // 获取结果集中的列数 int columncount = rsmd.getColumnCount(); // while条件成立表明结果集中存在数据 while (rs.next()) { // 创建一个HashMap用于存储一条数据 HashMap<String, Object> onerow = new HashMap<String, Object>(); // 循环获取结果集中的列名及列名所对应的值,每次循环都得到一个对象,形如:{TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa} for (int i = 0; i < columncount; i++) { // 获取指定列的名称,注意orcle中列名的大小写 String columnName = rsmd.getColumnName(i + 1); //进行编码设置 int type = rsmd.getColumnType(i+1); if(type==Types.CHAR||type==Types.VARCHAR||type==Types.LONGVARCHAR){ if(!CommonUtility.isEmpty(rs.getString(i+1))){ String value=""; try { value = new String(rs.getString(i+1).getBytes("ISO-8859-1"),"GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } onerow.put(columnName, value); } }else{ onerow.put(columnName, rs.getObject(i + 1)); } } // 将获取到的对象onewrow={TEST_NAME=aaa, TEST_NO=2, // TEST_PWD=aaa}放到集合列表中 list.add(onerow); } } catch (SQLException e) { e.printStackTrace(); } finally { close(); } return list; } /** * 关闭数据库各种资源Connection Statement PreparedStatement ResultSet的方法 */ private void close() { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pps != null) { try { pps.close(); } catch (SQLException e) { e.printStackTrace(); } } try { if (conn != null && !conn.isClosed()) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } catch (SQLException e) { e.printStackTrace(); } } public static void main(String args[]){ JDBCUtility db = new JDBCUtility(); Map<String,Object> map = db.getOneRow("select * from HIS_BASE_DEPARTMENT"); System.out.println(map.get("DESCN")); } }
配置文件获取类
package com.sdu.utils; import java.io.IOException; import java.util.Properties; import com.sdu.utils.mail.PropertiesUtil; /** * @类功能说明:静态读取数据库配置文件 * @作者:WeiYC * @创建时间:2015-1-26 上午11:31:14 */ public class DBPropertiesUtility { private static Properties pros = new Properties(); private static String CONFIG_FILE = "res/jdbc.properties"; //配置文件路径 /** * 静态执行一段代码,将配置文件读入到内存中 */ static{ try { pros.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(CONFIG_FILE)); } catch (IOException e) { e.printStackTrace(); } } public static String getDriver(){ return pros.getProperty("oracle.driver"); } public static String getUrl(){ return pros.getProperty("oracle.url"); } public static String getUser(){ return pros.getProperty("oracle.user"); } public static String getPwd(){ return pros.getProperty("oracle.password"); } public static void main(String args[]){ System.out.println(DBPropertiesUtility.getDriver()); } }
配置文件
#oracle数据库参数 oracle.driver=oracle.jdbc.driver.OracleDriver oracle.url=jdbc:oracle:thin:@192.168.1.120:1521:db oracle.user=dbuser oracle.password=123456 #mysql数据库参数 mysql.driver=com.mysql.jdbc.Driver mysql.url=jdbc:mysql://192.168.1.120:3306/db mysql.username=root mysql.password=123456 mysql.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
项目目录结构
相关推荐
JdbcUtils是一个封装了对数据库操作的Java工具类,主要使用JDBC(Java Database Connectivity)API来实现数据库操作。JDBC是Java的一个标准扩展,它提供了一组API用于执行SQL语句。以下是对JdbcUtils工具类的知识点...
`SupplyunittableUtil.java` 这个文件名暗示了这是一个Java工具类,专门用于处理“供应单位表”(可能是一个数据库表格或数据结构)的业务逻辑,并且这个类可能包含了针对中文乱码问题的解决方案。 中文乱码问题...
Java程序员在面试或笔试中可能遇到的...对于JDBC操作,理解编码转换的重要性;对于Servlet,掌握响应内容的正确编码设置;以及对于Web服务器,知道如何调整CLASSPATH以加载自定义类。这些都是Java开发者的必备技能。
5. 掌握DBUtils工具类的使用、初步体会ORM思想 6. 初步具有独立阅读Java doc的能力 7. 能通过大公司的Java基础测试、数据库面试题 适合目标群体: 1. 在校的本专科院校大学生,有无基础均可,但必须对软件开发有...
从RDD转换为DataFrame有两种常见方式:手动转换和样例类转换。手动转换通常涉及创建一个Schema并使用`toDF()`方法。样例类转换更为推荐,因为它提供了类型安全和编译时检查。首先,定义一个样例类,然后使用...
2. **第三方工具**: 如压缩包中的"DBF to Oracle v1.0 英文版",这类工具通常提供了图形化的界面,简化了导入过程。用户只需指定DBF文件和目标Oracle表,工具会自动处理数据转换和加载。这种方法对于不熟悉SQL*...
Oracle 11g是一款强大的关系型数据库管理系统,它支持空间数据类型,使得存储和管理带有地理坐标的数据变得可能。 首先,我们需要理解什么是空间数据。空间数据是指包含地理空间位置信息的数据,如地图、地理坐标、...
4. **IO流**:JAVA的IO流用于读写文件、网络通信等,案例可能会有文件读取、数据复制、字符编码转换等实际操作。 5. **多线程**:JAVA提供了强大的多线程支持,案例可能包含线程同步、线程池的使用,以及并发控制...
在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,它采用了模板模式来分离数据库访问中的不变和可变部分,提供了一种更加健壮且易于使用的数据访问机制。`JdbcTemplate`负责处理资源的获取、关闭以及...
- **java.util**:熟悉List、Set、Map等集合框架,以及正则表达式、压缩、日期时间处理、随机数生成等工具类。 - **java.io**:理解输入输出流的概念,熟练使用File、BufferedReader/Writer、InputStream/...
生成的代码会带有清晰的注释,方便理解其功能和用法。 在实际应用中,使用MyBatis自动生成器需要注意以下几点: 1. 配置文件:需要正确配置数据库的URL、用户名、密码以及驱动类名,确保生成器能成功连接到数据库...
遵循一定的编码规范有助于提高代码的可读性和可维护性。例如,类名通常采用驼峰命名法(Camel Case),方法名以动词开头等。 #### 十、广度学习 除了以上技能之外,Java程序员还应当具备一定的广度知识。例如,...
这要求对Java异常处理机制有深入理解,并能够运用调试工具和日志分析来排查问题。 ### 面向对象思想 面向对象编程(OOP)是Java的核心理念之一。理解封装、继承、多态等原则,能够设计出模块化、易于扩展和维护的...
文档注释特别适用于自动生成API文档,可通过JDK自带的`javadoc`工具将这些注释转换成HTML格式的文档。 #### 五、标识符命名规则与约定 在Java中,标识符用于命名类、变量和方法。命名规则包括:以字母、下划线“_”...
本项目"spring-demo:带有Spring框架的RESTful API"是基于Spring框架创建的一个示例,展示了如何利用Spring来开发RESTful API。RESTful API是现代Web服务的标准设计模式,它强调了资源的概念并通过HTTP协议进行操作...
`mybatis-3.2.2-javadoc.jar` 提供了MyBatis的API文档,其中详细列出了所有类、接口、方法及注解的说明,是开发者快速查找和理解MyBatis功能的必备工具。通过文档,开发者可以了解如何配置SqlSessionFactory,创建...
实例084 温度单位转换工具 105 实例085 域的默认初始化值 106 实例086 编写同名的方法 107 实例087 构造方法的应用 108 5.2 修饰符的使用 109 实例088 单例模式的应用 109 实例089 祖先的止痒药方 110 实例090 统计...