数据库(名称为database)信息
所需jar包
实体类
public class User {
private String username;
private String password;
/................/
/................/
/................/
}
public class JdbcTemplateSource {
//Jdbc最原始代码
@Test
public void JdbcSource() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection("jdbc:mysql:///database", "root", "root");
String sql = "select * from test where username=?";
//预编译sql
pstmt = (PreparedStatement) conn.prepareStatement(sql);
//pstmt是从1开始 , hql是从0开始
pstmt.setString(1, "aa");
rs = pstmt.executeQuery();
//光标一开始位于第一行之前 next后才能移到第一行 才能进行getString操作
rs.next();
String username = rs.getString("username");
String password = rs.getString("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
System.out.println(user);
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
rs.close();
pstmt.close();
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
问题总结:
1.数据库连接,使用时创建,使用完之后释放,对数据库进行频繁的开启和关闭,造成数据库资源浪费,影响性能
*解决:使用数据库连接池管理数据库连接
2.将sql语句硬编码(写死了,固定了)到java代码中,如果sql语句要修改,需要重新编译java代码,硬编码就不利于系统维护
*解决:将sql语句配置在xml中
3.向preparedStatement中设置参数,对占位符号和设置参数值,硬编码在java代码中,同样不利于系统维护
*解决:也将占位符和参数配置在xml中
4.从resultSet(getString)等方法获取数据,同样也是硬编码,不利于维护
*解决:将查询的结果集,自动映射成java对象