public class JDBCUtils {
private static DataSource source;//声明静态属性连接池
static {
Properties p = new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");//获取配置文件
try {
p.load(is);
source = DruidDataSourceFactory.createDataSource(p);//创建针对配置文件的连接池
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws Exception {
Connection connection = source.getConnection();//从连接池中获取连接
return connection;
}
public static void close(Connection connection) {//归还连接
try {
if (connection != null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
说明:连接池的属性和要连接的数据库写在了配置文件里,每次更新配置文件就可以了
2、增删改查
1、增
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "insert into customers(name,email,birth)values(?,?,?)";//填写sql语句
int count = runner.update(connection, sql, "何成飞", "he@qq.com", "1992-09-08");//调用update()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
说明:
1、update()方法返回值是影响的数据条数
2、update()方法的参数列表分别是:连接,sql语句,形参列表
2、删
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "delete from customers where id = ?";//填写sql语句
int count = runner.update(connection,sql,17);//调用update()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
3、改
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "update customers set name = ? where id = ?";//填写sql语句
int count = runner.update(connection,sql,"陈思齐",14);//调用update()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
4、查一条数据
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "select id,name,salary from customers where id = ?";//填写sql语句
BeanHandler<Customer> handler = new BeanHandler<>(Customer.class);//获取Beanhandler对象
Customer customer = runner.query(connection,sql,handler,14);//调用query()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
说明:
1、BeanHandler用来接收一条数据,使用前需要创建表数据对应的对象即Customer类的javabean
2、使用query方法处理查询语句,参数多了BeanHandler对象
5、查多条数据
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "select id,name,salary from customers where id < ?";//填写sql语句
BeanListHandler<Customer> handler = new BeanListHandler<>(Customer.class);//获取Beanhandler对象构成的list
List<Customer> customers = runner.query(connection,sql,handler,14);//调用query()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
6、查一条记录,使用Map
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "select id,name,salary from customers where id = ?";//填写sql语句
MapHandler handler = new MapHandler();//获取Maphandler对象构成的map
Map<String,Object> map = runner.query(connection,sql,handler,14);//调用query()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
说明:String为列名,对应的数据为Object类型,表现形式是name="Tom"
7、查一条记录,最大值
QueryRunner runner = new QueryRunner();//创建QueryRunner对象
Connection connection = JDBCUtils.getConnection();//使用工具类创建连接
String sql = "select max(salary) from customers";//填写sql语句
ScalarHandler handler = new ScalarHandler();//获取Scalarhandler对象构成的map
long maxSalary = runner.query(connection,sql,handler);//调用query()方法进行数据库操作
JDBCUtils.close(connection);//关闭连接
说明:
1、ArrayHandler:用数组呈现表中的一行数据,
2、ArrayListHandler:用List呈现多行数据,List中的元素为数组,数组中为表中的一行数据,
3、BeanHandler:用JavaBean实例呈现表中一行数据,前提是造一个和表对应的javaBean,
4、BeanListHandler:用List呈现多行数据,List中的元素为javaBean实例,javaBean实例中为表中一行数据,
5、ColumnListHandler:将某一列的数据存放到List中,
6、KeyedHandler(name):将结果的每一行数据都封装到一个Map里,再把这些map再存到一个map里,其key为指定的key,比如说name,遍历map时我们就能用name,便利到所有人的信息,
7、MapHandler:将结果的第一行数据封装到一个Map里,key是列名,value就是对应的值,
8、MapListHandler:将结果的每一行数据都封装到一个Map里,然后再存放到List,
9、ScalarHandler:查询单个值对象(对应单行函数),
3、设置隔离
1、显示级别:select @@tx_isolation
2、设置级别:set transaction isolation level read committed (当前数据库)
set global transaction isolation level read committed (全局)
3、新建用户:create user `Tom` identified by '123abc'
4、授予权限:
#授予通过网络方式登录的tom用户,对所有库所有表的全部权限,密码设为abc123.
grant all privileges on *.* to tom@'%' identified by 'abc123';
#给tom用户使用本地命令行方式,授予atguigudb这个库下的所有表的插删改查的权限。
grant select,insert,delete,update on atguigudb.* to tom@localhost identified by 'abc123';
4、PreparedStatement
//1、注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2、获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day04_test01_bookstore", "root", "1234");
//3、编写sql
String sql = "DELETE FROM orders WHERE id = '15275760194821'";
//4、创建PreparedStatement
PreparedStatement pst = conn.prepareStatement(sql);//此时的sql带?的
//5、执行sql
int len = pst.executeUpdate();
System.out.println(len>=0 ? "删除成功" : "删除失败");
//6、关闭
pst.close();
conn.close();