赞
踩
右上角
或者 左下角
双击数据库可以查看数据库表的内容
修改数据库的表,看下图:
控制台(写SQL语言的地方)选择默认的即可
切换数据库
跟Navicate一样,选择运行的语句(Navicate会同步出现account表)
连接数据库遇到的问题
如果再IDEA连接不上数据库,则再这里修改为数据库对应的版本的SQl驱动(失败的最主要的原因就是数据库驱动问题)
要么都成功,要么失败
package com.sgl.lession02; import com.sgl.lession02.utils.JdbcUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class TestTransaction { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement =null; ResultSet resultSet =null; try { connection = JdbcUtils.getConnection(); //关闭数据库的自动提交事务 会自动提交事务 connection.setAutoCommit(false); String sql1 = "update account set money=money-500 where name = 'coco'"; preparedStatement = connection.prepareStatement(sql1); preparedStatement.executeUpdate(); //int x = 1/0;//报错 String sql2 = "update account set money=money+500 where name = 'sgl'"; preparedStatement = connection.prepareStatement(sql2); preparedStatement.executeUpdate(); //业务完毕提交事务 connection.commit(); System.out.println("成功"); } catch (SQLException throwables) { //如果失败默认回滚, try { connection.rollback(); //如果失败就回滚 } catch (SQLException e) { e.printStackTrace(); } throwables.printStackTrace(); }finally { JdbcUtils.release(connection,preparedStatement,null); } } }
数据库连接------->执行完毕-------->释放
连接到释放 十分浪费系统资源
池化技术:准备一些预先的资源,过来就连接预先准备好的
最小连接数:10
最大连接数:15
等待超时:100ms
编写连接池,实现一个接口 DataSource
开源数据源实现
DBCP
C3P0
Bruid:阿里巴巴
使用这些数据库连接池后,在项目开发中就不需要编写连接数据库的代码了!!!!
DBCP
需要jar包 commons-dbcp-1.4.jar commons-pool-1.6.jar maven仓库直接下载
*代码测试
配置文件 dbcpconfig.properties
# 连接设置 driverClassName = com.mysql.jdbc.Driver url = jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false username = root password = 123456 # 以下也可以不用配置 # <!-- 初始化连接 --> initialSize=10 #最大连接数量 maxActive=50 # <!-- 最大空闲空间 --> maxIdle=20 # <!-- 最小空闲空间 --> minIdle=5 # <!-- 超时等待以毫秒为单位 --> maxWait=60000 #JDBC驱动建立连接时附带的连接属性,属性的格式必须为这样:[属性名=property] #注意:"user"与"password"两个属性会被明确地传递,因为这里不需要包含他们 connectionProperties=useUnicode=true;characterEncoding=UTF8 #指定由连接池所创建的连接的自动提交 (auto-commit) 状态 defaultAutoCommit=true #driver default 指定由连接池所创建的连接的只读(read-only)状态 defaultReadOnly= #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation) #可用值为下列之一:NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ 详情可见javadoc defaultTransactionIsolation=READ_UNCOMMITTED
创建一个类JdbcUtils_DBCP
package com.sgl.lession03.utils; import com.sgl.lession02.utils.JdbcUtils; import org.apache.commons.dbcp.BasicDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JdbcUtils_DBCP { private static DataSource dataSource = null; static { try { InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); Properties properties = new Properties(); properties.load(in); //创建数据源 工厂模式----> 创建 dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } // 释放连接 public static void release(Connection connection, Statement statement, ResultSet resultSet){ if (resultSet!=null){ try { resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (statement!=null){ try { statement.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (connection!=null){ try { connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
测试插入
package com.sgl.lession03; import com.sgl.lession03.utils.JdbcUtils_DBCP; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class TestDBCP { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JdbcUtils_DBCP.getConnection(); //区别 // 使用? 占位符代替参数 String sql = "INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)"; preparedStatement = connection.prepareStatement(sql);//预编译SQL,先写sql,然后不执行 //手动给参数赋值 preparedStatement.setInt(1,4); preparedStatement.setString(2,"tqq"); preparedStatement.setString(3,"987456"); preparedStatement.setString(4,"2259567490@qq.com"); //sql.Date 数据库 java.sql.Date() //util.Date Java new Date().getTime() 获得时间戳 preparedStatement.setDate(5,new java.sql.Date(new Date().getTime())); int i = preparedStatement.executeUpdate(); if (i>0){ System.out.println("插入成功"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JdbcUtils_DBCP.release(connection,preparedStatement,null); } } }
运行结果:
C3P0
需要jar包 mchange-commons-java-0.2.19.jar c3p0-0.9.5.5.jar maven仓库直接下载
配置文件c3p0-config.xml
<c3p0-config> <!-- c3p0的缺省(默认)配置 如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");"这样写就表示使用的是c3p0的缺省(默认) --> <named-config name="MySQL"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config> <!-- c3p0的缺省(默认)配置 如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("ORACLE");"这样写就表示使用的是c3p0的缺省(默认) --> <named-config name="ORACLE"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <property name="acquireIncrement">5</property> <property name="initialPoolSize">10</property> <property name="minPoolSize">5</property> <property name="maxPoolSize">20</property> </named-config> </c3p0-config>
创建一个类JdbcUtils_C3P0
package com.sgl.lession03.utils; import com.mchange.v2.c3p0.ComboPooledDataSource; import java.sql.*; public class JdbcUtils_C3P0 { private static ComboPooledDataSource dataSource = null; static { try { // 代码版配置 // dataSource = new ComboPooledDataSource(); // dataSource.setDriverClass(); // dataSource.setUser(); // dataSource.setPassword(); // dataSource.setJdbcUrl(); // dataSource.setMaxPoolSize(); // dataSource.setMinPoolSize(); //创建数据源 工厂模式----> 创建 dataSource = new ComboPooledDataSource("MySQL"); } catch (Exception e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection() throws SQLException { return dataSource.getConnection(); } // 释放连接 public static void release(Connection connection, Statement statement, ResultSet resultSet){ if (resultSet!=null){ try { resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (statement!=null){ try { statement.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (connection!=null){ try { connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
测试插入
package com.sgl.lession03; import com.sgl.lession03.utils.JdbcUtils_C3P0; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Date; public class TestC3P0 { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; try { connection = JdbcUtils_C3P0.getConnection(); //区别 // 使用? 占位符代替参数 String sql = "INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)"; preparedStatement = connection.prepareStatement(sql);//预编译SQL,先写sql,然后不执行 //手动给参数赋值 preparedStatement.setInt(1,5); preparedStatement.setString(2,"hello"); preparedStatement.setString(3,"987456"); preparedStatement.setString(4,"2259567490@qq.com"); //sql.Date 数据库 java.sql.Date() //util.Date Java new Date().getTime() 获得时间戳 preparedStatement.setDate(5,new java.sql.Date(new Date().getTime())); int i = preparedStatement.executeUpdate(); if (i>0){ System.out.println("插入成功"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { JdbcUtils_C3P0.release(connection,preparedStatement,null); } } }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。