简单的JDBC编程步骤
1.加载数据库驱动(com.mysql.jdbc.Driver)
2.创建并获取数据库链接(Connection)
3.创建jdbc statement对象(PreparedStatement)
4.设置sql语句
5.设置sql语句中的参数(使用preparedStatement)
6.通过statement执行sql并获取结果
7.对sql执行结果进行解析处理
8.释放资源(resultSet、preparedstatement、connection)
package cn.wh.jdbc.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * JdbcTest.java 简单的jdbc编程步骤过程 */ public class JdbcTest { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 1.加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 2.创建数据库连接 connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "1234"); // 3.书写sql语句 String sql = " select * from user where username=? "; // 4.创建statement,预处理sql语句 preparedStatement = connection.prepareStatement(sql); // 5.设置sql里的参数 preparedStatement.setString(1, "张三"); // 6.执行sql,得到结果集 resultSet = preparedStatement.executeQuery(); // 7.遍历结果集,打印输出 while (resultSet.next()) { System.out.println(resultSet.getString("id") + " " + resultSet.getString("username")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 8.释放资源 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(); } } } } }
注意:jdbc存在的问题,如何解决??
答:1.数据库链接创建、释放频繁 造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2.Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
3.使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
4.对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。