连接步骤:
- 注册驱动
Class.forName("com.mysql.jdbc.Driver"); - 获取连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/newdb3", "root", "123456");
System.out.println(conn); - 创建执行SQL语句的对象
Statement stat = conn.createStatement(); - 执行SQL
String sql = "create table jdbct1(id int primary key auto_increment,name varchar(10))";
stat.execute(sql); - 关闭资源
conn.close();
Statement
- execute(sql) 执行sql,返回值为布尔值,返回值true代表有结果集 false代表没有结果集,此方法可以执行任意SQL,但是只推荐执行DDL(数据定义语言)
- executeUpdate(sql) 此方法执行insert、update、delete,返回值int,返回值代表生效行数
- executeQuery(sql) 此方法执行select 返回值为ResultSet(结果集)
ResultSet
- 两种获取数据的方式
- rs.getString("查询结果中字段的名称");
- rs.getString(查询结果中字段的位置); 位置从1开始
连接池DBCP
- Database Connection Pool 数据库连接池
- 为什么使用连接池: 将连接重用,避免资源浪费,提高执行效率
dataSource.setInitialSize(3);//初始连接数量
dataSource.setMaxActive(5);//最大连接数量
PreparedStatement
- 预编译sql执行对象
- 好处:
- 代码结构整齐,可读性高
- 带有预编译功能,在创建对象时就把sql逻辑固定,可以避免sql注入( ' or '1'='1)
- 因为带有预编译功能,如果批量插入多条数据时,可以只编译一次sql,从而提高执行效率
- 当sql语句中没有变量时使用Statement,如果有变量时使用PreparedStatement
分页查询
String sql = "select name from jdbcperson "
+ "limit ?,?";
PreparedStatement ps =
conn.prepareStatement(sql);
ps.setInt(1, (page-1)*count);
ps.setInt(2, count);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
String name = rs.getString(1);
System.out.println(name);
}
事务
- 关闭事务自动提交
conn.setAutoCommit(false) - 提交事务
conn.commit(); - 回滚事务
conn.rollback();