加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Java JDBC高级特性 Java JDBC基础学习小结

发布时间:2021-05-21 06:56:40 所属栏目:大数据 来源: https://www.jb51.cc
导读:?1、JDBC批处理 实际开发中需要向数据库发送多条sql语句,这时,如果逐条执行sql语句,效率会很低,因此可以使用JDBC提供的批处理机制。Statement和PreparedStatemen都实现了批处理。测试表结构如下: Statement批处理程序示例 1 package server; 2 3 import

?1、JDBC批处理

实际开发中需要向数据库发送多条sql语句,这时,如果逐条执行sql语句,效率会很低,因此可以使用JDBC提供的批处理机制。Statement和PreparedStatemen都实现了批处理。测试表结构如下:

Statement批处理程序示例

 1 package server;
 2 
 3 import java.sql.Connection;
 4  java.sql.DriverManager;
 5  java.sql.ResultSet;
 6  java.sql.Statement;
 7 
 8  com.MysqL.jdbc.PreparedStatement;
 9 
10 public class DemoJDBC {
11     static void main(String[] args) throws Exception {
12         // 加载驱动类
13         Class.forName("com.MysqL.jdbc.Driver");
14     
15          通过DriverManager获取数据库连接
16         String url = "jdbc:MysqL://192.168.1.150/test";
17         String user = "teamtalk"18         String password = "123456"19         Connection connection = (Connection) DriverManager.getConnection(
20                 url,user,password);
21         
22         String sql1 = "DROP TABLE IF EXISTS people"23         String sql2 = "CREATE TABLE people(id int,name varchar(20))"24         String sql3 = "INSERT people VALUES(2,'hdu')"25         String sql4 = "UPDATE people SET id = 1"26         Statement statement = (Statement) connection.createStatement();
27         statement.addBatch(sql1);
28         statement.addBatch(sql2);
29         statement.addBatch(sql3);
30         statement.addBatch(sql4);
31         statement.executeBatch();
32         
33         ResultSet resultSet = statement.executeQuery("SELECT * from people"34         while (resultSet.next()) {
35             System.out.println(resultSet.getString(1) + " " + resultSet.getString(2));
36         }
37     }
38 }

PreparedStatement批处理

22         PreparedStatement statement =  (PreparedStatement) connection.prepareStatement("INSERT people VALUES(?,?)"23         for (int i = 1; i < 4; i++) {
24             statement.setInt(1,i);
25             statement.setString(2,"hdu" + i);
26             statement.addBatch();
29         
30         ResultSet resultSet = statement.executeQuery("SELECT * from people"31         32             System.out.println(resultSet.getString(1) + " " + resultSet.getString(233 34 35 }

?2、JDBC处理事务

针对JDBC处理事务的操作,在Connection接口中,提供了3个相关的方法,具体如下:

1 setAutoCommit(boolean autoCommit);  设置是否自动提交事务
2 commit();  提交事务
3 rollback();  撤销事务

将setAutoCommit()方法参数设置为false后,事务必须使用conn.commit()方法提交,而事务回滚不一定显式执行conn.rollback()。如果程序最后没有执行conn.commit(),事务也会回滚,一般是直接抛出异常,终止程序的正常执行。因此,通常情况下,会conn.rollback()语句放在catch语句块执行。

将setAutoCommit()方法参数设置为false后,如果没有提交事务,也就是没有调用conn.commit()方法,则数据库中的内容不会更新,修改的只是内存缓冲区中的数据。

 demo.jdbc;
 java.sql.sqlException;
 6 
 7  com.MysqL.jdbc.Connection;
 9  com.MysqL.jdbc.Statement;
10 
11  FirstJDBC {
12      ClassNotFoundException,sqlException,InterruptedException {
13         Connection connection = null14         try {
15             16             Class.forName("com.MysqL.jdbc.Driver"17         
18             19             String url = "jdbc:MysqL://192.168.1.150/test"20             String user = "teamtalk"21             String password = "123456"22             connection =23                     url,1)">24              关闭事务的自动提交
25             connection.setAutoCommit(false26             
27             Statement statement =28             PreparedStatement statement1 = (PreparedStatement) connection.prepareStatement("INSERT people VALUES(?,1)">29             PreparedStatement statement2 = (PreparedStatement) connection.prepareStatement("INSERT people VALUES(?,1)">30             
31             statement1.setInt(1,132             statement1.setString(2,"hdu1"33             statement2.setInt(1,234             statement2.setString(2,"hdu2"35             
            statement1.executeUpdate();
            statement2.executeUpdate();
38             
39             ResultSet resultSet = statement.executeQuery("SELECT * from people"40             41                 System.out.println(resultSet.getString(1) + " " + resultSet.getString(242             }
43 44         catch (Exception e) {
45              回滚事务
46             connection.rollback();
47             e.printStackTrace();
48 49 50 }

3、JDBC连接池

DBCP数据源

使用DBCP数据源需要使用3个jar包,分别是commons-dbcp.jar包(https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi)、commons-pool.jar(http://commons.apache.org/proper/commons-pool/download_pool.cgi)包和commons-logging.jar(http://commons.apache.org/proper/commons-logging/download_logging.cgi)包。以下程序示例是通过BasicDataSource类直接创建数据源对象。

 javax.sql.DataSource;
 org.apache.commons.dbcp2.BasicDataSource;
11 
12 import com.MysqL.jdbc.Statement;
13 
14  DemoDBCP {
15     static DataSource ds = 16     
17     static18          获取DBCP数据源实现类
19         BasicDataSource bds = new BasicDataSource();
20          设置连接池配置信息
21         bds.setDriverClassName("com.MysqL.jdbc.Driver"22         bds.setUrl("jdbc:MysqL://192.168.1.150/test"23         bds.setUsername("teamtalk"24         bds.setPassword("123456"25          设置连接池参数
26         bds.setInitialSize(527         bds.setMaxTotal(528         ds = bds;
30     
31      sqlException {
32         Connection connection = (Connection) ds.getConnection();
33         java.sql.DatabaseMetaData MetaData = connection.getMetaData();
34         
35         System.out.println(MetaData.getURL());
        System.out.println(MetaData.getUserName());
        System.out.println(MetaData.getDriverName());
38         
39         Statement statement =40         ResultSet resultSet = statement.executeQuery("SELECT * from people"41         42             System.out.println(resultSet.getString(1) + " " + resultSet.getString(244 45 }

c3p0数据库连接池

c3p0是目前最流行的开源数据库连接池之一,它实现了DataSource数据源接口,支持JDBC2和JDB3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和Spring使用功能的都是该数据源。c3p0连接数据库示例(通过配置文件方式),注意:配置文件名称必须是c3p0-config.xml,该文件必须放在工程bin目录下。下载地址:https://sourceforge.net/projects/c3p0/?source=typ_redirect

配置文件c3p0-config.xml为:

<?xml version="1.0" encoding="UTF-8"?>  
 2 <c3p0-config>  
 3     default-config 4         property name="jdbcUrl">jdbc:MysqL://192.168.1.150/test</property 5         ="driverClass">com.MysqL.jdbc.Driver 6         ="user">teamtalk 7         ="password">123456 8   
 9         ="checkoutTimeout">300010         ="idleConnectionTestPeriod">3011         ="initialPoolSize">10="maxIdleTime"13         ="maxPoolSize">100="minPoolSize"="maxStatements">20016     >
17     
18     named-config ="demo"19         21         22         23   
24         26         27         28         29         30         named-config32     
>  
 5 
 com.mchange.v2.c3p0.ComboPooledDataSource;
12     
13     14         ComboPooledDataSource cpds =  ComboPooledDataSource();
15         ds = cpds;
16 20         java.sql.DatabaseMetaData MetaData =22 24 25 26 }

?参考

Java JDBC基础学习小结

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读