Java连接数据库 JDBC

 

1、JDBC是什么?

JDBC,英文全称:Java DataBase Connectivity,中文全称:java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,由一组用Java语言编写的类和接口组成。


2、JDBC能做什么?

简单来说,JDBC 可做三件事:与数据库建立连接、发送和执行操作数据库的语句、处理SQL语句执行结果。


3、Java连接数据库的步骤

(1)加载驱动类

Oracle数据库的驱动类名称为:oracleDriverName = oracle.jdbc.driver.OracleDriver

MySQL数据库的驱动类名称为:mysqlDriverName = com.mysql.jdbc.Driver

//加载驱动类,也可以叫做注册载入驱动
Class.forName(DriverName); //DriverName为驱动类的名称,具体应用时要替换成具体数据库的驱动类名称

//加载MySQL驱动类
Class.forName("com.mysql.jdbc.Driver");

//加载Oracle驱动类
Class.forName("oracle.jdbc.driver.OracleDriver");

(2)创建连接对象

 获取连接对象时的三个参数:url、username、password

Oracle数据库:

url = jdbc:oracle:thin:@oracleip:port:dbname  (其中oracleip为Oracle数据库所在电脑的ip地址,port为Oracle数据库的端口号默认端口号为1521,dbname 为所使用的数据库名称)

username = scott (用户名称,默认的是Scott,实际应用时,具体名称,具体设置)

password为使用数据库时的密码;

MySQL数据库:

url = jdbc:mysql://mysqlip:port/dbname  (其中mysqlip为mysql数据库所在电脑的ip地址,如果mysql数据库安装在主机中,则mysqlip可以写成localhost,post为mysql数据库的端口号,默认端口号为3306,dbname为数据库的名称)

username = root

password为使用数据库时的密码;

//例如如下语句:

//创建连接对象
Connection conn =DriverManager.getConnection(url ,username , password ) ;   

//创建和MySQL数据库连接的对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "root",
					"123456");

在这里可以写个方法对以上两个步骤进行测试: 

package sql; //类所在的包

//需要导入的包
import java.sql.Connection;
import java.sql.DriverManager;

public class DbTest {
	public static void main(String[] args) {
		//获取mysql数据库连接步骤
		//第一步:加载驱动类
		Class.forName("com.mysql.jdbc.Driver");
		//第二步:创建连接对象
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zxdb","root","123456");
		//控制台输出数据库连接对象
		System.out.println(conn);
	}
}

//注意,本段代码为原始代码,里面有异常未处理,请继续向下阅读
未对异常进行处理的原始代码

观察两种异常的类型:

注意两种异常类型的不同

对原始代码进行异常处理:

package sql; //类所在的包

//需要导入的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbTest {
	public static void main(String[] args) {
		//获取mysql数据库连接步骤
		//第一步:加载驱动类
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//第二步:创建连接对象
		Connection conn = null;
		try {
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zxdb","root","123456");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//控制台输出数据库连接对象
		System.out.println(conn);
	}
}
程序运行结果

处理异常:是为了提高代码的健壮性,当程序运行发生异常并被捕获时,根据捕获异常时得到的异常信息,就可以很快定位到出现异常的代码位置。

将驱动类的名称故意写错,观察错误信息:

将驱动类的名字写错,观察异常信息内容

 

将驱动类和URL写错,观察错误信息

也可以将获取数据库连接对象用方法(函数)的形式来写,当需要获取数据库连接对象时,直接调用方法(函数)即可,不用每次都写获取数据库连接对象的全部代码。

package sql; //类所在的包

//需要导入的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbTest {
	/**
	 * 函数功能:获取数据库连接对象
	 * @return 返回一个数据库连接对象
	 */
	public static Connection getConn(){
				//第一步:加载驱动类
				try {
					Class.forName("com.mysql.jdbc.Driver");
				} catch (ClassNotFoundException e) {
					System.out.println("驱动类加载失败");
					e.printStackTrace();//打印详细的异常信息内容
				}
				//第二步:创建连接对象
				Connection conn = null;
				try {									
					conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zxdb","root","123456");
				} catch (SQLException e) {
					System.out.println("获取连接对象时出错");
					e.printStackTrace();//在控制台输出具体的异常信息内容
				}
				return conn;
	}
	public static void main(String[] args) {
		Connection conn = getConn();	//调用获取数据库连接对象的函数
		System.out.println(conn);	//控制台输出数据库连接对象
	}
}
用方法(函数)来获取数据库连接对象

(3)创建执行SQL语句的对象

 使用数据库连接对象,调用createStatement()方法,创建一个执行SQL语句的对象,即Statement对象;

// 创建执行SQL语句的对象
Statement st = conn.createStatement();

(4)执行SQL语句

 executeQuery(String sql)方法:只能执行查询语句,返回一个结果集对象;

executeUpdate(String sql)方法:可执行增、删、改语句及DDL语句,返回执行语句受到影响的记录条数(返回结果为int类型);

//执行查询语句
ResultSet rs = st.executeQuery(sql);

//执行增删改语句和DDL语句
int cnt = st.executeUpdate(sql);

(5)关闭资源

关闭资源的顺序和创建资源的顺序相反,称为“倒关闭”

rs.close(); //关闭结果集对象
st.close();  //关闭执行SQL语句的对象
conn.close();  //关闭连接对象

为了较少报错的几率,最好使用try...catch...判断处理错误;

try {
    if (rs != null) {
        rs.close();
    }
} catch (SQLException e) {
    e.printStackTrace();
    } finally {
        try {
            if (st != null) {
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
            } finally {
                try {
                    if (conn != null) {
                        conn.close();
                    }
                 } catch (SQLException e) {
                           e.printStackTrace();
                  }
               }
}

实例请查看:JDBC操作数据库实例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值