JDBC案例
1.创建一个java项目
2.在项目中创建一个名称为lib的文件夹,并导入mysql的jar包
3.将创建一个类,将一下代码导入类中
package cn.bsw.mybatis.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 单独使用JDBC开发程序
* @author huihui
* */
public class JdbcTest {
public static void main(String[] args) {
// 数据库连接
Connection connection = null;
// 预编译的Statement,jdbc和数据库通过Statement通信,Statement中封装了sql语句及参数
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", "mysql");
// 定义sql语句 ?表示占位符
// 预编译的Statement好处:可以提高数据库的性能,使用占位符可以有效防止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();
}
}
}
}
}
问题1:程序中存在硬编码(数据加载,创建数据库连接,sql语句)问题,不利于系统维护
其中,3306/mybatis中的mybatis是在mysql中的数据库名- 问题1解决方案:可以将sql语句等配置信息配置到xml文件中
问题2:数据库连接使用时打开,不使用时立即关闭,频繁的打开和关闭是对数据库资源的一种浪费
- 问题2解决方案:使用数据库连接池对链接进行管理