当前位置:Gxlcms > 数据库问题 > java操作数据库的3中基本方式

java操作数据库的3中基本方式

时间:2021-07-01 10:21:17 帮助过:18人阅读

//jdbc提取出来的工具类

package utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.mysql.jdbc.Statement;

public class JdbcUtils {
private static final String DRIVERCLASS;
private static final String URL;
private static final String USERNAME;
private static final String PASSWORD;
static{
Properties p = new Properties();
try {
p.load(new FileInputStream("src/jdbc.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
DRIVERCLASS = p.getProperty("driverClass");
URL = p.getProperty("url");
USERNAME = p.getProperty("username");
PASSWORD = p.getProperty("password");
}
/**

  • 加载驱动
    */
    public static void loadDriver(){
    try {
    // 加载驱动
    Class.forName(DRIVERCLASS);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    /**
  • 获取连接,返回连接
  • @return
    */
    public static Connection getConnection(){
    // 调用一次加载驱动的方法
    loadDriver();
    Connection conn = null;
    try {
    // 获取连接
    conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return conn;
    }
    /**
  • 释放资源
  • @param stmt
  • @param conn
    */
    public static void release(Statement stmt,Connection conn){
    if(stmt != null){
    try {
    stmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(conn != null){
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    /**

  • 释放资源
  • @param stmt
  • @param conn
    */
    public static void release(ResultSet rs,Statement stmt,Connection conn){
    if(rs != null){
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(stmt != null){
    try {
    stmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if(conn != null){
    try {
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    }

//链接池和jdbc联合提取出来的工具类
package utils;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.Statement;

public class JdbcUtils {

  1. <code>/**
  2. * 获取连接,返回连接 是apache的
  3. * @return
  4. */
  5. public static Connection getDbcpConnection(){
  6. Connection connection = null;
  7. try {
  8. Properties pro = new Properties();
  9. pro.load(new FileInputStream("src\\dbcpconfig.properties"));
  10. DataSource ds = BasicDataSourceFactory.createDataSource(pro);
  11. connection = ds.getConnection();//被增强后的connetion
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. return connection;
  16. }
  17. /**
  18. * 获取连接,返回连接 不是apache的
  19. * 配置文件名称是固定的c3p0-config.xml 并且 放在src目录下
  20. * ComboPooledDataSource会自动去src目录查找c3p0-config.xml的配置文件
  21. * @return
  22. */
  23. public static Connection getC3P0Connection(){
  24. Connection connection = null;
  25. try {
  26. DataSource ds =new ComboPooledDataSource();//这个地方的参数是与配置文件匹配,如果不写,则为默认
  27. connection = ds.getConnection();//被增强后的connetion
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. }
  31. return connection;
  32. }
  33. /**
  34. * 释放资源
  35. * @param stmt
  36. * @param conn被增强后的
  37. */
  38. public static void release(Statement stmt,Connection conn){
  39. if(stmt != null){
  40. try {
  41. stmt.close();
  42. } catch (SQLException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. if(conn != null){
  47. try {
  48. // 已经变成了归还了...
  49. conn.close();
  50. } catch (SQLException e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. }
  55. /**
  56. * 释放资源
  57. * @param stmt
  58. * @param conn被增强后的
  59. */
  60. public static void release(ResultSet rs,Statement stmt,Connection conn){
  61. if(rs != null){
  62. try {
  63. rs.close();
  64. } catch (SQLException e) {
  65. e.printStackTrace();
  66. }
  67. }
  68. if(stmt != null){
  69. try {
  70. stmt.close();
  71. } catch (SQLException e) {
  72. e.printStackTrace();
  73. }
  74. }
  75. if(conn != null){
  76. try {
  77. // 把close()给修改了,原来是销毁连接,现在让方法变成归还连接。
  78. conn.close();
  79. } catch (SQLException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. }</code>

}

//DButis的使用 导入包

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import javax.sql.DataSource;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;
/**

  • 因为:没有使用DButis之前
  • (1)数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义
    (2)封装数据的代码重复,而且操作复杂,代码量大
    (3)释放资源的代码重复
    结果:(1)程序员在开发的时候,有大量的重复劳动。(2)开发的周期长,效率低
    所以apache开发了一套封装jdbc的工具类DButis提供给程序员使用
  • @author WangShuang
  • */
    public class test {
    DataSource ds = new ComboPooledDataSource();@Test
    br/>@Test
    /**

      1. 先创建QueryRunner类
      1. 调用update()方法,可以完成增删改的操作
        /
        QueryRunner qr = new QueryRunner(ds);
        try {
        // 添加
        qr.update("insert into product values (null,?,?,?)", "鸭梨",3.5,new Date());
        } catch (SQLException e) {e.printStackTrace();
        }
        }
        @Test
        br/>e.printStackTrace();
        }
        }
        @Test
        QueryRunner qr = new QueryRunner();
        try {
        qr.query("select
        from product where pid = ?",new MyResultSetHandler() , 1);
        } catch (SQLException e) {
        e.printStackTrace();
        }
        }
        }
        /**
  • 类似BeanHandler
  • @author WangShuang
  • */
    class MyResultSetHandler implements ResultSetHandler<Product>{@Override
    br/>@Override
    Product p = new Product();
    p.setPid(arg0.getInt(1));
    p.setPname(arg0.getString(2));
    p.setPrice(arg0.getDouble(3));
    p.setPdate(arg0.getDate(4));
    return p;
    }
    }

java操作数据库的3中基本方式

标签:并且   net   封装   values   factory   dbutil   自动   pre   override   

人气教程排行