java-jdbc操作详细代码分享
2016-08-01 22:51
555 查看
使用jar包:ojdbc6.jar
coding如下:
测试代码如下:
coding如下:
<span style="font-size:18px;">package cn.migu.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import cn.migu.base.GlobalSettings; /** * <Description>数据库操作类 * @author YanLu * */ public class JdbcUtil { /** * 声明连接数据库各个参数 * user:数据库连接的用户名 * password:数据库连接的密码 * url:要连接的数据库对象 * driverClass:数据库连接的驱动名 */ private String user; private String password; private String url; private String driverName; private Connection conn = null;// 连接对象 private ResultSet rs = null;// 结果集对象 // private Statement sm = null;// 声明(不安全,易被sql注入) private PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement private Log4jUtil log = new Log4jUtil(this.getClass().getName()); /** * 构造函数,在创建对象时候执行该方法 */ public JdbcUtil(String sql) { this.user = GlobalSettings.getProperty("DBUser"); this.password = GlobalSettings.getProperty("DBPassword"); this.url = GlobalSettings.getProperty("jdbc_url"); this.driverName = GlobalSettings.getProperty("driverName"); this.conn = createConnection(); try { pre = createPreparedStatement(conn, sql); } catch (SQLException e) { log.info("获取预编译对象失败..."); e.printStackTrace(); } } /** * 构造函数获得数据库用户名和密码 * @param user * @param pass */ public JdbcUtil(String user, String password,String sql) { this.user = user; this.password = password; this.url = GlobalSettings.getProperty("jdbc_url"); this.driverName = GlobalSettings.getProperty("driverName"); this.conn = createConnection(); try { pre = createPreparedStatement(conn, sql); } catch (SQLException e) { log.info("获取预编译对象失败..."); e.printStackTrace(); } } /** * 连接数据库 * @return */ public Connection createConnection() { try { Class.forName(driverName).newInstance(); conn = DriverManager.getConnection(url, user, password); log.info("数据库连接成功"); } catch (Exception e) { log.info("数据库连接失败"); e.printStackTrace(); } return conn; } /** * 获取预编译PreparedStatement * @param conn * @param sql * @return * @throws SQLException */ public PreparedStatement createPreparedStatement(Connection conn, String sql) throws SQLException { return conn.prepareStatement(sql); } /** * 关闭结果集 * @param conn */ public void closeResultSet(ResultSet resultSet) { try { if (resultSet != null) { resultSet.close(); } } catch (Exception e) { log.info("结果集关闭失败"); e.printStackTrace(); } } /** * 关闭声明 * @param conn */ public void closeStatement(PreparedStatement pre) { try { if (pre != null) { pre.close(); } } catch (Exception e) { log.info("声明对象关闭失败"); e.printStackTrace(); } } /** * 关闭数据库 * @param conn */ public void closeConnection(Connection conn) { try { if (conn != null) { conn.close(); } } catch (Exception e) { log.info("数据库关闭失败"); e.printStackTrace(); } } /** * 关闭资源 后打开的要先关闭,顺序不能变 * @param conn * @param statement * @param resultSet */ public void closeResources(Connection conn, PreparedStatement statement, ResultSet resultSet) { //Statement关闭会导致ResultSet关闭; Connection关闭不一定会导致Statement关闭。 closeResultSet(resultSet); closeStatement(statement); closeConnection(conn); log.info("数据库资源关闭"); } /** * 插入或更新数据 * 方法执行后会直接关闭所有资源 * @param sql * @return */ public int update(String sql) { //conn = createConnection(); int re = 0; try { conn.setAutoCommit(false);// 事物开始 // 获取预编译PreparedStatement //pre = createPreparedStatement(conn, sql); // 执行插入操作 re = pre.executeUpdate(sql);// re返回执行受到影响的行数。 if (re < 0) { // 插入失败,执行失败 conn.rollback(); // 回滚 closeStatement(pre); closeConnection(conn); return re; } conn.commit(); // 插入正常 closeStatement(pre); closeConnection(conn); //若事物成功,返回影响的行数 return re; } catch (Exception e) { e.printStackTrace(); } //closeConnection(conn); return 0; } /** * 插入或更新数据 * 方法执行后会直接关闭所有资源 * @param sql * @param param 当param有多个值时,使用数组接收 * @return */ public int update(String sql, String... param) { //conn = createConnection(); int re = 0; try { conn.setAutoCommit(false);// 事物开始 //pre = createPreparedStatement(conn, sql); if (null != param && param.length > 0) { for (int i = 0; i < param.length; i++) { //给占位符传值 pre.setString(i + 1, param[i]);//索引值从1开始 } } re = pre.executeUpdate(); if (re < 0) { // 更新失败 conn.rollback(); // 回滚 closeStatement(pre); closeConnection(conn); return re; } conn.commit(); // 更新正常 closeStatement(pre); closeConnection(conn); return re; } catch (Exception e) { e.printStackTrace(); } closeConnection(conn); return 0; } /** * 查询语句 返回结果集 * 方法执行后不关闭数据库资源 * 注意,执行查询操作返回ResultSet对象,方法中未关闭PreparedStatement对象(关闭会导致ResultSet关闭) * @param sql * @return */ public ResultSet selectSql(String sql) { conn = createConnection(); try { pre = createPreparedStatement(conn, sql); rs = pre.executeQuery(sql); return rs; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 查询语句 返回结果集 * 方法执行后不关闭数据库资源 * 注意,执行查询操作返回ResultSet对象,方法中未关闭PreparedStatement对象(关闭会导致ResultSet关闭) * @param sql * @param param * @return */ public ResultSet selectSql(String sql, String... param) { //conn = createConnection(); try { //pre = createPreparedStatement(conn, sql); if (null != param && param.length > 0) { for (int i = 0; i < param.length; i++) { pre.setString(i + 1, param[i]); } } rs = pre.executeQuery(); return rs; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 根据Result结果集对应的字段返回对应的值 * 方法执行后关闭所有资源 * @param rs * @param param(参数的值为列名) * @return * @throws SQLException */ public String getStringByResultSet(ResultSet rs,String param){ String target=null; if(rs!=null){ try { while (rs.next()) { target = rs.getString(param); //如rs.getString("id")或rs.getString(1),若使用列的索引值参数类型需为int } } catch (SQLException e) { e.printStackTrace(); } } //关闭所有数据库资源对象 closeResources(conn, pre, rs); return target; } /** * 根据结果集输出 * 方法执行后关闭所有资源 * @param rs */ public void printRs(ResultSet rs) { int columnsCount = 0; boolean f = false; try { if (!rs.next()) { return; } ResultSetMetaData rsmd = rs.getMetaData();//ResultSetMetaData对象为:有关 ResultSet 中列的名称和类型的信息。 columnsCount = rsmd.getColumnCount();// 数据集的列数 for (int i = 0; i < columnsCount; i++) { System.out.print(rsmd.getColumnLabel(i + 1) + "|"); // 输出列名 } System.out.println(); while (!f) { for (int i = 1; i <= columnsCount; i++) { System.out.print(rs.getString(i) + "|"); } System.out.println(); if (!rs.next()) { f = true; } } rs.close(); } catch (Exception e) { e.printStackTrace(); } closeStatement(pre); closeConnection(conn); } } </span>
测试代码如下:
<span style="font-size:18px;">package cn.migu.test; import java.sql.ResultSet; import java.sql.SQLException; import org.testng.annotations.Test; import cn.migu.utils.JdbcUtil; import cn.migu.utils.Log4jUtil; /** * <Description> 测试JdbcUtil类 * @author YanLu * */ public class TestOracle { private Log4jUtil log = new Log4jUtil(this.getClass().getName()); /** * 测试select操作 * @throws SQLException */ @Test(enabled = false) public void testSelect() throws SQLException{ String sql = "select * from kfmh_user_info where password = ?"; JdbcUtil jdbc = new JdbcUtil(sql); ResultSet rs=jdbc.selectSql(sql, "migu123"); if(rs!=null){ while(rs.next()){ //rs.getString(3); log.info("查询结果正确"); } } log.info("密码是:"+jdbc.getStringByResultSet(rs, "user_name")); //jdbc.printRs(jdbc.selectSql(sql, "migu123")); } /** * 测试update操作 * @throws SQLException */ @Test public void testUpdate() throws SQLException{ //String sql = "insert into kfmh_user_info values('test03','pass03')"; //String sql = "insert into kfmh_user_info values(?,?)"; //String sql = "delete from kfmh_user_info where user_name=? and password=?"; String sql ="update kfmh_user_info set user_name=? where password=?"; JdbcUtil jdbc = new JdbcUtil(sql); String[] param = {"test02","pass02"}; int num = jdbc.update(sql,param); //修改操作 log.info(num); } } </span>
相关文章推荐
- java读取文件内容的三种方法代码片断分享(java文件操作)
- java使用jdbc对mysql数据库进行操作的步骤和代码
- java使用jdbc操作数据库示例分享
- java 文件目录读写删除操作详细实现代码
- java jdbc操作数据库通用代码
- PageRank的Java代码实现及图形操作(带详细注释)!
- JAVA使用JDBC技术操作SqlServer数据库实例代码
- 【Java】利用单例模式、可变参数优化Java操作Mysql数据库、JDBC代码的写作
- 这么详细的分类 Java源代码网站你见过没有? Java中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- Java JDBC操作Oracle的代码示例
- [Sqlite]-->Java使用jdbc连接Sqlite数据库进行各种数据操作的详细过程
- Java操作oracle 数据库的详细代码
- JDBC-用java代码操作数据库
- Java实现微信公众平台朋友圈分享功能详细代码
- 实例: Java代码操作oracle数据库(JDBC+sevrlet+jsp+html)
- java连接Oracle数据库详细代码,jdbc
- 分享java操作mongodb的crud代码
- jdbc结合sqlserver的javaWeb工程的分页查询共通操作代码
- Java中各种文件类型操作的代码与详细文件IO讲解
- 使用Mycat操作Oracle数据库(七) -- JAVA代码JDBC连接Mycat