学习了jdbc的两种连接池技术及依赖于数据库连接池的Spring JDBC JdbcTemplate,并进行了一些练习
1.代码部分(druid): (1)DruidDemo1类package datasource.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo1 {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();
pro.load(new FileReader("C:\Users\GG\IdeaProjects\demo13\druid\src\druid.properties"));
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//配置文件中设置的连接数量最大值为10,修改i为11运行后会报错
for(int i = 1;i<=10;i++){
Connection conn = ds.getConnection();
System.out.println(i+" : "+conn);
}
}
}
运行结果:
(2)Druid的工具类:JDBCUtils类
package utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static DataSource ds;
static{
try {
Properties pro = new Properties();
// pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
pro.load(new FileReader("C:\Users\GG\IdeaProjects\demo13\druid\src\druid.properties"));
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void close(PreparedStatement pstmt, Connection conn){
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static DataSource getDataSource(){
return ds;
}
}
(3)基于JDBCUtils工具类的Druid类:DruidDemo2类
package datasource.druid;
import utils.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DruidDemo2 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
String sql = "insert into stu values(?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"HHHHHH");
pstmt.setString(2,"6666666");
int count = pstmt.executeUpdate();
System.out.println(count);
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(pstmt,conn);
}
}
}
运行结果
代码量相对于原本少了许多
2.JdbcTemplate (1)JDBCTemplateDemo1package datasource.JDBCTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import utils.JDBCUtils;
public class JDBCTemplateDemo1 {
public static void main(String[] args) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
String sql = "Update stu set password=? where username=?";
int count = jdbcTemplate.update(sql, "1225500102", "LISA");
System.out.println(count);
}
}
运行结果
代码量又少了一点
(2)定义了一个Emp类package domain;
public class Emp {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Emp{" +
"username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}
(3)JdbcTemplateDemo2(对JdbcTemplate中常用方法的一些练习)
package datasource.JDBCTemplate;
import domain.Emp;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import utils.JDBCUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class JdbcTemplateDemo2 {
private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
@Test
public void test1(){
String sql = "update stu set password=? where username=?";
int count = jdbcTemplate.update(sql,"123456","Henry");
System.out.println(count);
}
@Test
public void test2(){
String sql = "insert into stu values(?,?)";
int count = jdbcTemplate.update(sql,"Hu","654321");
System.out.println(count);
}
@Test
public void test3(){
String sql = "delete from stu where username=?";
int count = jdbcTemplate.update(sql,"Hu");
System.out.println(count);
}
@Test
public void test4(){
String sql = "select * from stu where username=?";
Map map = jdbcTemplate.queryForMap(sql, "Henry");
System.out.println(map);
}
@Test
public void test5(){
String sql = "select * from stu";
List
可见在框架下的JDBC代码量又少了许多,或许懒惰才是第一生产力。
运行结果
test1 == test2 == test3
test4
test5 == test6 == test7
test8
学习内容二:算法学习(前缀和)
Accepted!
1.一维前缀和输入一个长度为 nn 的整数序列。
接下来再输入 mm 个询问,每个询问输入一对 l,rl,r。
对于每个询问,输出原序列中从第 ll 个数到第 rr 个数的和。
输入格式
第一行包含两个整数 nn 和 mm。
第二行包含 nn 个整数,表示整数数列。
接下来 mm 行,每行包含两个整数 ll 和 rr,表示一个询问的区间范围。
输出格式
共 mm 行,每行输出一个询问的结果。
数据范围
1≤l≤r≤n1≤l≤r≤n,
1≤n,m≤1000001≤n,m≤100000,
−1000≤数列中元素的值≤1000−1000≤数列中元素的值≤1000
输入样例:
5 3 2 1 3 6 4 1 2 1 3 2 4
输出样例:
3 6 10代码部分:
#include
using namespace std;
const int N = 100010;
int a[N];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-1];
}
while(m--)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%dn",a[r]-a[l-1]);
}
return 0;
}
输入一个 nn 行 mm 列的整数矩阵,再输入 qq 个询问,每个询问包含四个整数 x1,y1,x2,y2x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。
对于每个询问输出子矩阵中所有数的和。
输入格式
第一行包含三个整数 n,m,qn,m,q。
接下来 nn 行,每行包含 mm 个整数,表示整数矩阵。
接下来 qq 行,每行包含四个整数 x1,y1,x2,y2x1,y1,x2,y2,表示一组询问。
输出格式
共 qq 行,每行输出一个询问的结果。
数据范围
1≤n,m≤10001≤n,m≤1000,
1≤q≤2000001≤q≤200000,
1≤x1≤x2≤n1≤x1≤x2≤n,
1≤y1≤y2≤m1≤y1≤y2≤m,
−1000≤矩阵内元素的值≤1000−1000≤矩阵内元素的值≤1000
输入样例:
3 4 3 1 7 2 4 3 6 2 8 2 1 2 3 1 1 2 2 2 1 3 4 1 3 3 4
输出样例:
17 27 21代码部分 :
#include
using namespace std;
const int N = 1010;
int a[N][N];
int main()
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
while(q--)
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%dn",a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1]);
}
return 0;
}



