JDBC连接数据库(详细步骤)
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC连接数据库(详细步骤)相关的知识,希望对你有一定的参考价值。
JDBC连接数据库
总结了JDBC连接数据库具体步骤的的实现
JDBC连接数据库的步骤
- 注册驱动
- 获取连接
- 获取数据库操作对象
- 执行sql语句
- 处理查询结果集
- 释放资源
步骤的具体实现
注册驱动
注册驱动时,需要导入mysql的驱动包mysql-connector-java-5.1.32.jar包,通过这个包才能时java程序能够连上数据库。如果导入后不能连接上数据库,可能是因为数据库的版本太高,需要新一级的驱动包mysql-connector-java-8.0.24.jar包。
具体实现
Class.forName(com.mysql.jdbc.Driver) //一般通过反射来注册驱动
获取连接
获取连接时,一般需要获得数据库的url,用户名,和密码然后通过Connection类获取连接
具体实现
// url表示数据的url地址 url: jdbc:mysql://访问的地址:3306/数据库名 3306是MySQL的默认端口
// user表示数据库的用户名 user: 用户名
// user表示数据库的密码 password: 密码
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url,user,password);
获取数据库操作对象
获取数据库操作对象可以通过Statement和PreparedStatement两种方式来获取数据库操作对象。
Statement: 操作数据库时是直接编译SQL语句,是一致拼接字符串的方式来拼接SQL语句,这种方式来操作数据库对象,容易造成SQL注入现象。
PreparedStatement: 操作数据库时,是先将SQL语句预编译一遍,然后将值注入进来,这样不易造成SQL注入。
虽然Statement易造成SQL注入现象,但是在有些需求时,还是会用到Statement操作数据库。例如查询出来的数据需要动态输入是否排序时就需要Statement实现
具体实现
Statement stmt = conn.createStatement(); // Statement方式获取数据库操作对象
PreparedStatement ps = conn.prepareStatement(sql); //PreparedStatement方式获取,预编译SQL语句
执行SQL语句
如果是执行增删改(DML)语句就需要使用**executeUpdate()方法,如果执行的是查询(DQL)语句就需要使用executeQuery()**方法,使用查询语句才会有结果集返回。
具体实现
String sql = "select e.ename,e.sal from emp e"; //DQL语句
stmt.executeQuery(sql); //Statement方式
ps.executeQuery(); //PreparedStatement方式 因为先执行了SQL语句所以在这就不用再传入sql了
String sql = "update emp set sal = sal-1000 where empno=?"; // DQL语句 PreparedStatement方式
//PreparedStatement中下标没有0所以从1开始往后添加第一个要注入的值就是1第二给为2依次往后推
ps.setInt(1,7369); //将值注入进SQL语句中 因为已经执行过SQL语句了,这里只需将值传入就行
String sql = "update emp set sal = sal-1000 where empno= "+num+""; // DQL语句 Statement方式
stmt.executeUpdate(sql);
//注意ps和stmt是由上一步获取数据库连接对象获得的对象
要导入数据是什么类型就用set什么类型的方法
处理查询结果集
查询(DQL)语句才会有结果集,一般将结果集用ResultSet类封装
具体实现
String sql = "select ename,sal from emp";
ResultSet rs = stmt.executeQuery(sql); //接收返回的结果集
ResultSet rs = ps.executeQuery();
while(rs.next()){ //rs.next()表示将光标往下一行读取下面一行的数据
//根据字段名来读取数据
rs.getString("ename"); //获取查询出来的ename 数据拿到了后续要怎么操作就看自己的需求了,这里就不做演示
rs.getDouble("sal"); //获取查询出来的sal
//根据下标来读取数据
rs.getString(1); //获取查询出来的ename
rs.getDouble(2);//获取查询出来的sal
}
释放资源
释放资源时,需要先进行判断是否存在这个资源,然后再将这个资源关闭,一般是从后往前关闭,先创建的后关闭。
具体实现
if (rs != null){
try{
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (stmt != null){
try{
stmt.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (conn != null){
try{
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
}
总结
一般来说,获取数据连接时数据库的url,用户名,密码,驱动类型一般写在db.properties配置文件中,因为这样以后数据库信息更改之后易于维护。并且将获取数据连接,释放资源一般封装在一个工具类DBUtlis类中,封装之后就不会经常性的写重复的代码,下面展示一个完整的JDBC连接操作。
db.properties配置文件的编写
db.properties配置文件需要写在resourses包中
driver=com.mysql.jdbc.Driver //驱动类型
url=jdbc:mysql://localhost:3306/test //url
user=root //数据库用户名
password=123456 //数据库密码
DBUtils文件的编写
// 数据库工具类
public class DBUtils {
//工具类中的构造方法一般都是私有化的,为什么?
//构造方法私有化是为了防止new对象
private DBUtils(){}
//类加载时绑定属性资源文件 通过次类来绑定db.properties文件以此来获取db.properties文件中的信息
private static ResourceBundle bundle = ResourceBundle.getBundle("resources/db");
//注册驱动
static {
try {
Class.forName(bundle.getString("driver"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取数据库连接对象
public static Connection getConnection() throws SQLException {
String url = bundle.getString("url"); //获取url
String user = bundle.getString("user"); //获取数据库用户名
String password = bundle.getString("password"); //获取数据库密码
Connection conn = DriverManager.getConnection(url,user,password);
return conn;
}
//释放资源
public static void close(Connection conn, Statement stmt, ResultSet rs){
if (rs != null){
try{
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (stmt != null){
try{
stmt.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if (conn != null){
try{
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
测试类的编写
这里用PreparedStatementa来操作对象
// 测试DBUtils
public class JDBCTest05 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DBUtils.getConnection();
String sql = "select ename,sal from emp where ename like ?";
ps = conn.prepareStatement(sql);
ps.setString(1,"%s%");
rs = ps.executeQuery();
while (rs.next()){
System.out.println(rs.getString("ename")+","+rs.getDouble("sal"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtils.close(conn,ps,rs);
}
}
}
以上是关于JDBC连接数据库(详细步骤)的主要内容,如果未能解决你的问题,请参考以下文章