Java JDBC高级特性 Java JDBC基础学习小结
?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基础学习小结 (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |