在一个Java空工程下,可以创建多个模块
创建新模块步骤:Project Structure -> Modules -> + -> New Module
此时可以选择:
Java(表示创建一个纯Java模块,不涉及任何外部东西)
Java Enterprise -> Web Application (Java Web用)
Maven
每个完整的模块应包含4个包:
src:存放项目源代码(entity,common,config,utils,controller,services,dao)
[以下三个包建好后右击:Mark Directory as...]
resources:存放外部配置文件
test:存放测试代码
testresources:存放测试配置文件
使用第三方工具的基本步骤:导包-> 写配置文件 -> 写测试代码
localhost = 127.0.0.1
使用JDBC(Java Database Connectivity)[Java中用来规范客户端程序如何访问DB的API]连接数据库步骤:
1、创建新模块(可选)
2、将mysql的jar包放入选定模块下的某个包中
3、将该jar文件与选定模块相关联:Project Structure -> Libraries -> +
java -> 找到该jar文件并与选定模块关联
4、JDBC具体使用步骤(思路):
(1)注册驱动:
原生注册方式:DriverManager.registerDriver(new Driver());
Class.forName("com.mysql.jdbc.Driver");
(2)建立连接:DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名","用户名","密码");
(3)创建对象:Statement st=con.createStatement(); [该方式有sql安全注入问题]
PreparedStatement ps=con.prepareStatement(""); [sql语句中使用占位符?,通过调用对象的set()方法向sql语句中的占位符赋值]
PreparedStatement相对于Statement的优点:
没有SQL注入的问题。
Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。
(4)执行sql语句:
查询:st.executeQuery("select * from student");
增、删、改:st.executeUpdate("");
(5)处理结果:ResultSet中的方法使用
(6)关闭资源:从内向外关闭,不用一定要关闭
构建工具类使得数据库连接更加便捷:
1、创建工具类
2、私有化构造方法
3、私有化连接参数:URL、用户名、密码
4、静态代码块加载驱动
5、对外提供静态公共方法获取连接对象
5、对外提供静态公共方法释放资源(内->外)[方法重载(只有查询才有结果集对象),关闭前要先判断是否为空]
注:将可能发生更改的驱动名,URL,用户名,密码放入外部的配置文件中(.properties)
静态代码块中以流的形式加载配置文件,获取相应值:
Properties p=new Properties();
InputStream in=工具类.class.getClassLoader().getResourceAsStream(".properties");
p.load(in); //以流的形式加载
String driveClass=p.getProperty("driveClass"); //获取相应值
Class.forName(dirveClass);
....
连接池的出现(简化连接过程,提高连接效率):
使用自定义连接池:
创建连接池类(实现javax.sql.DataSource接口) -> 创建List容器 -> 生成一定数量连接对象存入容器
-> 对外提供使用连接的方法 -> 对外提供归还连接的方法
注:每次向用户返回连接对象时要判断连接池中是否还存在对象,不存在则生成一定数量对象存入连接池
使用第三方开源连接池C3P0:
创建Web模块,除了建立resources,test,testresources包之外,额外在web包下建立名为lib的子包存放jar文件
在配置文件中修改驱动名称,URL,用户名,密码信息
ComboPooledDataSource dataSoure=new ComboPooledDataSource(); //创建连接池
Connection con=dataSoure.getConnection(); //从连接池中获得一个连接对象
DBUtils的出现(简化增删改查操作):
只需导入jar包,不需要创建配置文件
DBUtils只能帮助我们简化CRUD的代码,但是连接的创建以及获取工作不在它的考虑范围
步骤:
1、使用数据库连接池创建DBUtils核心类对象:
QueryRunner qr=new QueryRunner(new ComboPooledDataSource());
2、增删改:
qr.update("sql语句",占位符对应的值); //因为存在占位符?,所以顶层使用了PreparedStatment
查询:
1、new接口的匿名实现类:
Student ss = qr.query("select * from account where id = ?", new ResultSetHandler<Student>(){
@Override
public Student handle(ResultSet rs) throws SQLException {
Student account = new Student ();
while(rs.next()){
String name = rs.getString("name");
int money = rs.getInt("money");
account.setName(name);
account.setMoney(money);
}
return account;
}
}, 6);
2、直接使用已经实现的类:
* 查询单个对象
Student ss = qr.query("select * from account where id = ?", new BeanHandler<Student >(Student .class), 8);
* 查询多个对象
List<Student> list = qr.query("select * from account ",new BeanListHandler<Student>(Student.class));
来源:CSDN
作者:Legends_Never_Die
链接:https://blog.csdn.net/Legends_Never_Die/article/details/103757676