博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之数据库相关
阅读量:6089 次
发布时间:2019-06-20

本文共 7996 字,大约阅读时间需要 26 分钟。

这篇还是在回顾知识。主要是关于java连接Sqlserver2012数据库的一些方式记录,以便以后查询。

十一之内复习完这些知识就可以新学Hibernate啦(*^▽^*)

 


 

1.普通方式

注意,在连接数据库之前要导入JDBC驱动。因为我用的是sqlserver,所以我导入了sqljdbc4.jar

 

import java.sql.*;import java.util.ResourceBundle;//注意:dbinfo.properties要和该加载文件放到一个目录下,不用写全称,只需要写dbinfo即可public class DBUtils {    private static String driverClass;    private static String url;    static {        //此对象是用来加载properties文件数据的        ResourceBundle rb = ResourceBundle.getBundle("dbinfo");        driverClass = rb.getString("driverClass");        url = rb.getString("url");        try {            Class.forName(driverClass);        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }    public static Connection getConnection() throws Exception {            return  DriverManager.getConnection(url);    }    public static void closeAll(ResultSet resultSe, Statement statement, Connection connection){        if (resultSe != null){            try {                resultSe.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        //resultSe = null;        if (statement != null){            try {                statement.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        //statement = null;        if (connection != null){            try {                connection.close();            } catch (SQLException e) {                e.printStackTrace();            }        }       // connection = null;    }}
连接代码

 

driverClass=com.microsoft.sqlserver.jdbc.SQLServerDriverurl=jdbc:sqlserver://localhost:1433;databaseName=你的数据库名字;username=用户名;password=密码
dbinfo.properties

2.DBCP连接

需导入commons-dbcp-1.4.jar,commons-pool-1.5.6.jar。dbcpconfig.properties里面有关于线程池的内容。

1 import org.apache.commons.dbcp.BasicDataSourceFactory; 2 import javax.sql.DataSource; 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.util.Properties; 8  9 public class DBCPUtils {10     private static DataSource ds = null;11     static {12         Properties prop = new Properties();13         try {14             prop.load(DBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));15             ds = BasicDataSourceFactory.createDataSource(prop);//得到一个数据源,自动实现了装饰模式16         } catch (Exception e) {17            throw new ExceptionInInitializerError("初始化错误请检查配置文件");18         }19     }20     public static Connection getConnectin(){21         try {22             return ds.getConnection();23         } catch (SQLException e) {24             throw new RuntimeException("连接失败");25         }26 27     }28     public static void release(Connection connection, PreparedStatement statement, ResultSet resultSe){29         if (resultSe != null){30             try {31                 resultSe.close();32             } catch (SQLException e) {33                 e.printStackTrace();34             }35         }36         //resultSe = null;37         if (statement != null){38             try {39                 statement.close();40             } catch (SQLException e) {41                 e.printStackTrace();42             }43         }44         //statement = null;45         if (connection != null){46             try {47                 connection.close();48             } catch (SQLException e) {49                 e.printStackTrace();50             }51         }52     }53 }
DBCP连接
1 #连接设置 2 driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver 3 url=jdbc:sqlserver://localhost:1433;databaseName=数据库名;username=用户名;password=密码 4  5  6 #
7 initialSize=10 8 9 #最大连接数量10 maxActive=5011 12 #
13 maxIdle=2014 15 #
16 minIdle=517 18 #
19 maxWait=6000020 21 22 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 23 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。24 connectionProperties=useUnicode=true;characterEncoding=utf825 26 #指定由连接池所创建的连接的自动提交(auto-commit)状态。27 defaultAutoCommit=true28 29 #driver default 指定由连接池所创建的连接的只读(read-only)状态。30 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)31 defaultReadOnly=32 33 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。34 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE35 defaultTransactionIsolation=REPEATABLE_READ
dbcpconfig.properties

3.C3P0连接

需导入c3p0-0.9.1.2.jar。c3p0-config.xml放在包外。

1 import com.mchange.v2.c3p0.ComboPooledDataSource; 2  3 import java.sql.Connection; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7  8 public class C3P0Utils { 9     private static ComboPooledDataSource dataSource = new ComboPooledDataSource();10 11     public static ComboPooledDataSource getDataSource() {12         return dataSource;13     }14 15     public static Connection getConnection(){16         try {17             return dataSource.getConnection();18         } catch (SQLException e) {19             throw new RuntimeException("请检查配置文件。");20         }21     }22     public static void release(Connection conn, Statement stmt, ResultSet rs){23 24         if(rs!=null){25             try {26                 rs.close();27             } catch (Exception e) {28                 e.printStackTrace();29             }30             rs = null;31         }32         if(stmt!=null){33             try {34                 stmt.close();35             } catch (Exception e) {36                 e.printStackTrace();37             }38             stmt = null;39         }40         if(conn!=null) {41             try {42                 conn.close();43             } catch (Exception e) {44                 e.printStackTrace();45             }46             conn = null;47         }48     }49 }
c3p0连接
1 
2
3
4
com.microsoft.sqlserver.jdbc.SQLServerDriver
5
jdbc:sqlserver://localhost:1433;databaseName=day12
6
sun
7
123000
8
10
9
30
10
100
11
10
12 13
14 15
c3p0-config.xml

 

DBUtils:(commons-dbutils-1.4.jar)

  DBUtils封装了对JDBC的操作,简化了读写操作,可以使用数据源,数据库连接池等技术来优化性能。三个核心对象:QueryRunner类,ResultSetHandler接口,DBUtils类。

  (1)QueryRunner类

    提供对sql语句操作的API

      query():用于执行select

      update():用于执行insert,update,delete

      batch():批处理

    构造函数:

      > new QueryRunner(); 它的事务可以手动控制。

 

       也就是说此对象调用的方法(如:query、update、batrch)参数中要有Connection对象。

      > new QueryRunner(DataSource ds); 它的事务是自动控制的。一个sql一个事务。

                 此对象调用的方法(如:query、update、batrch)参数中无需Connection对象

 

QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());//不开启事务list = qr.query("select * from users where id=?",new BeanListHandler
(User.class),1);
QueryRunner qr = new QueryRunner();//事务
qr.update(ManagerThreadLocal.getConnection(),"update account set money=? where name=?",account.getMoney(),account.getName());

  

  (2)ResultSetHandler接口

    用于定义select操作后怎么封装结果集

 

      ArrayHandler:适合取1条记录。把该条记录的每列值封装到一个数组中Object[]

 

      ArrayListHandler:适合取多条记录。把每条记录的每列值封装到一个数组中Object[],把数组封装到一个List中

 

      ColumnListHandler:取某一列的数据。封装到List中。

 

      KeyedHandler:取多条记录,每一条记录封装到一个Map中,再把这个Map封装到另外一个Map中,key为指定的字段值。

 

      MapHandler:适合取1条记录。把当前记录的列名和列值放到一个Map中

 

      MapListHandler:适合取多条记录。把每条记录封装到一个Map中,再把Map封装到List中

 

      ScalarHandler:适合取单行单列数据

 

      BeanHandler:取第一行数据。new BeanHandler<XXX>(XXX.class),封装到泛型指定的对象中去。XXX要有set方法。

 

      BeanListHandler

 

  (3)DBUtils类

    工具类,定义了关闭资源和事务处理的方法

 

4.因为涉及到线程池关闭线程(实际上不是关闭,而是把当前线程放回到线程池中),所以要用到包装类(即装饰设计模式)。目的是为了改写已存在类的某个方法或某些方法。下面将写一下我对包装类的理解。实际上我们不需要手写,因为dbcp,c3p0都已经自带线程池管理了。但是还是需要了解,所以就再回顾一下。

装饰设计模式(包装模式)的书写口诀:

   (1)编写一个类,实现与被包装类相同的接口

   (2)定义一个被包装类类型的对象

   (3)定义构造方法,把被包装类的对象注入,给被包装类变量赋值

   (4)对于不需要改写的方法,调用原有的方法

   (5)对于需要改写的方法,写自己的代码。

  下面是关于当前线程放回pool的close放的改写:

  

5.事务..事务有点麻烦,要和线程混在一起。。我再理解理解

 

转载于:https://www.cnblogs.com/sy-deku/p/9736432.html

你可能感兴趣的文章
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>