一、jdbc查询数据库主要步骤
1、加载驱动。
2、通过驱动管理类,获取数据库链接。
3、定义sql语句,用?表示占位符。
4、获取预处理statement。
5、设置参数,参数序号从1开始。
6、执行sql语句,查询结果集。
7、遍历查询结果集。
8、释放资源。
二、jdbc的不足
1、数据库链接创建、释放频繁,造成系统资源浪费,从而影响系统性能。可使用数据库链接池解决此问题。
2、Sql语句在代码中为硬编码,不易维护,实际应用中sql变化可能较大,sql变动需要改变java代码。
3、使用preparedStatement,参数传入为硬编码,因sql语句的where条件不定,修改sql时还要修改代码,系统不易维护。
4、对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。
三、主要代码
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager .getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "root");
//定义sql语句,?表示占位符
String sql = "select * from user where username = ?";
//获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//设置参数,sql语句中参数序号从1开始
preparedStatement.setString(1, "Tom");
//执行查询,查询结果集
resultSet = preparedStatement.executeQuery();
//遍历结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}