jdbc编程
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
1. MySQL数据库JDBC连接Demo
2. 项目名称:MybatisDemo2<br/>
3. 类名称:MySQLJDBCDemo<br/>
4. 类描述:
5. 时间 2018年6月25日 下午2:11:57
6. @author wzw
7. @version
*/
public class MySQLJDBCDemo {
public static void main(String[] args) {
//数据库连接路径
String url = "jdbc:mysql://localhost:3306/mybatis1?characterEncoding=utf-8";
//数据库用户名
String user = "root";
//数据库密码
String password = "root";
//SQL语句
String sql = "select * from user where user_name = ?";
//数据库连接
Connection connection = null;
//预编译处理
PreparedStatement ps = null;
//结果集
ResultSet rs = null;
try {
//通过类加载机制,加载MySQL数据库连接驱动
Class.forName("com.mysql.jdbc.Driver");
//连接数据库
connection = DriverManager.getConnection(url, user, password);
//对SQL语句进行预编译
ps = connection.prepareStatement(sql);
//对SQL语句中的占位符进行设置
ps.setString(1, "root");
//执行SQL,获取结果集
rs = ps.executeQuery();
System.out.println("Connection: " + connection);
System.out.println("PreparedStatement: " + ps);
System.out.println("ResultSet: " + rs);
/*
* 若直接使用resultSet会报SQL异常,异常信息为在结果集开始之前 java.sql.SQLException: Before start of result set
* 此外需要注意,rs.getString(0)会报java.sql.SQLException: Column Index out of range, 0 < 1.这是因为resultSet字段索引从1开始
* System.out.println("user: " + rs.getString(0) + " " + rs.getString(1) + " " + rs.getString(2));
*/
//遍历结果集
while (rs.next()) {
System.out.println("user: " + rs.getString(0) + " " + rs.getString(2) + " " + rs.getString(3));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
首先,jdbc编程至关重要的一点是,需要MySQL连接jar包,我们通过该jar包,使得我们的java代码可以连接上数据库,从而进行数据查询等操作。
在jdbc编程中三个类很重要,分别是数据库连接的Connection,处理SQL的PreparedStatement,存储结果的ResultSet。当然在jdbc中这三个只是其中的一部分。
我们若要想进行jdbc编程
1. 导入数据库连接jar包
2. 通过类加载机制,加载数据库连接驱动,既像代码中导入数据库连接所需要的类
3. 创建连接,连接数据库需要知道数据库路径,用户名,密码
4. 通过连接对象获取处理SQL的对象
5. 如果SQL语句中存在占位符,需要对占位符设置具体的值,注意,jdbc中索引是从1开始
6. 通过处理SQL的对象执行SQL语句获取结果集
7. 对结果集进行遍历,获取SQL执行后的结果
8. 关闭连接
jdbc编程的缺点
在成熟的数据库开发框架出现之前,一直使用的是这种原生的java语言连接数据库进行开发,而这种开发方式,步骤繁琐复杂,代码篇幅过长,存在各种各样的缺点。
1. 步骤繁琐,代码冗余
2. 各种java原生类,记忆繁琐,jdbc中存在过多的类与方法需要记忆
3. 硬编码,SQL语句需要硬编码,预编译处理中占位符需要硬编码,结果集获取时需要硬编码。ps:这里解释一下什么是硬编码,从代码中可以看出,所谓的硬编码就是需要经常变动的变量,直接嵌入java代码中。既,在计算机程序或文本编辑中,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。
4. 数据库连接关闭过于频繁,影响效率,可以通过数据库连接池解决该问题
以上四点是我所能想到的jdbc编程中存在的问题,那么我们如何解决这些问题,框架可以帮我们解决。通过封装将繁琐的步骤简单化,通过配置文件解决硬编码的问题,通过数据库连接池解决数据库频繁连接关闭的问题。