2.1 jdbc编程步骤:
1、 加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement 对象
4、 设置sql 语句
5、 设置sql 语句中的参数( 使用preparedStatement)
6、 通过statement 执行sql 并获取结果
7、 对sql 执行结果进行解析处理
8、 释放资源(resultSet 、preparedstatement 、connection)
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, "王五" );
// 向数据库发出sql执行查询,查询出结果集
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 ) {
// TODO Auto-generated catch block
e .printStackTrace();
}
}
if ( preparedStatement != null ) {
try {
preparedStatement .close();
} catch (SQLException e ) {
// TODO Auto-generated catch block
e .printStackTrace();
}
}
if ( connection != null ) {
try {
connection .close();
} catch (SQLException e ) {
// TODO Auto-generated catch block
e .printStackTrace();
}
}
}
}
2.2 jdbc 问题总结如下:
1、 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用中sql 变化的可能较大,sql 变动需要改变java 代码。
3、 使用preparedStatement 向占有位符号传参数存在硬编码,因为sql 语句的where 条件不一定,可能多也可能少,修改sql 还要修改代码,系统不易维护。
4、 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo 对象解析比较方便。
2.3 Mybatis 解决 jdbc 编程的问题
1、 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决: 在SqlMapConfig.xml 中配置数据连接池,使用连接池管理数据库链接。
2、Sql 语句写在代码中造成代码不易维护,实际应用sql 变化的可能较大,sql 变动需要改变java 代码。
解决: 将Sql 语句配置在XXXXmapper.xml 文件中与java 代码分离。
3、 向sql 语句传参数麻烦,因为sql 语句的where 条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis 自动将java 对象映射至sql 语句,通过statement 中的parameterType 定义输入参数的类型。
4、 对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo 对象解析比较方便。
解决:Mybatis 自动将sql 执行结果映射至java 对象,通过statement 中的resultType 定义输出结果的类型。
版权声明:本文为qq_18142501原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。