JDBC 入门

一、JDBC基本概念

JDBC(Java DataBase Connectivity)是一组用于连接数据库,执行SQL语句的Java API。
JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

二、JDBC相关API

Java中用来操作数据库的API都在java.sql与javax.sql包中。

类DriverManager,管理JDBC驱动程序的基本服,主要用于加载驱动。
常用方法:
static void registerDriver(Driver driver)  //加载一个具体的驱动 如MySql,SQLServer驱动等
static Connection getConnection(String url, String user, String password) //返回一个到指定的数据库的连接
static void deregisterDriver(Driver driver) //从DriverManage的列表中删除一个驱动


接口DataSource,表示到物理数据源的连接。是一种规范,各数据库应用程序开发商可以有具体的实现。
三种实现:1.生成基本的Connection对象
                    2.生成参与连接池的Connection对象(连接池实现,即由连接池产生Connection对象)
                    3.分布式事务实现
常用方法:
Connection getConnection()  返回一个与此DataSource表示的数据源的连接
Connection getConnection(String username, String password)  //返回一个与此DataSource表示的数据源的连接
void close()  // 立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。 


接口Connection,与指定数据库的连接。
常用方法
void setAutoCommit() //设置是否为自动提交模式
void commit()  //使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。
void setTransactionIsolation(int level)  //将此 Connection对象的事务隔离级别更改为给定的级别。  
PreparedStatement prepareStatement(String sql) //预编译一个SQL语句,返回一个执行具体SQL语句的PreparedStatement对象
Statement createStatement()   //创建一个Statement对象来执行具体SQL语句


接口Statement,用于执行静态SQL语句,并返回结果集。
常用方法:
void excute(String sql) //执行指定的SQL语句
ResultSet excuteQuerty(String sql) //执行指定的SQL语句,并返回结果集
int excuteUpdate(String sql) //执行指定的SQL语句(insert,update,delete),返回结果表示表在受影响的记录数
ResultSet getResultSet()  //以 ResultSet 对象的形式获取当前结果


类PreparedStatement,实现了Statement接口。表示被预编译的SQL语句的对象。SQL语句被预编译并存储在PreparedStatement中,然后可以使用此对象多次地执行该语句。

类ResultSet,保存执行SQL后返回的结果。
ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;
因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
常用方法:
Date getDate(int columnIndex)  //以 Java 编程语言中 java.sql.Date 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
int  getInt(int columnIndex)  //以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值.(获取八种基本类型的方法都有)
Reader getCharacterStream(String columnLabel) //以 java.io.Reader 对象的形式获取此 ResultSet 对象的当前行中指定列的值。
boolean next()   //如果还有下一行,返回true,将光标移动到下一行,否则返回false 



三、JDBC操作数据库基本流程
首先导入支持具体数据库驱动程序的jar包,以mysql为例
mysql-connector-java-5.1.18-bin.jar

1.加载驱动
2.建立连接
3.创建用于执行SQL语句的Statement对象
4.执行具体SQL语句,得到返回的结果集
5.从结果集中取出数据



四、实例

package com.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.Driver;

/**
 * @author jiazhengfeng
 * @time 2017年4月16日
 */
public class JDBCDemo {
	private static String url = "jdbc:mysql://localhost:3306/myjdbc"; //数据库的url地址   jdbc:mysql为协议名称
	private static String user = "root"; //数据库用户名
	private static String password = "root"; //对应用户名的密码

	/**
	 * @param args
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws SQLException {
		Connection con = null;
		Statement st = null;
		ResultSet result = null;

		try {
			//1.加载驱动(这里是加载mysql的驱动  所以Drive为 com.mysql.jdnc.Driver)
			//DriverManager.registerDriver(new Driver());   不推荐!1.因为会创建两个驱动对象,Drive对象内部已经加载了驱动。2.依赖mysql jar包 导致在其他环境中无法运行。	

			Class.forName("com.mysql.jdbc.Driver");

			//2.创建连接
			con = DriverManager.getConnection(url, user, password);

			//3.获取用于向数据库发送sql语句的statement
			st = con.createStatement();

			//4.向数据库发送sql语句,获得代表结果集的resultset
			String sql = "select id,username,password from user";
			result = st.executeQuery(sql);

			//5.从结果集中取出数据
			while (result.next()) {
				System.out.println("id=" + result.getObject(1));
				System.out.println("username=" + result.getObject(2));
				System.out.println("password=" + result.getObject(3));
			}
			
			
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		} catch (SQLException e) {

			e.printStackTrace();
		}

		finally {
			//6.关闭连接,释放资源(释放所有与数据库交互的对象  关闭顺序与声明顺序相反)
			if (result != null) {
				try {
					result.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			
			if (st != null) {
				try {
					st.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

			if (con != null) {
				try {
					st.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}

	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值