回顾JDBC理解及应用实战

一.什么是JDBC     

        JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用JAVA语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

二.常用的接口

   1.Driver接口:

    Driver接口是由数据库驱动程序已经实现了的接口,在进行Java Web开发时,程序员只需要根据程序使用的驱动程序类型,针对应的Driver接口装载就行,不同Driver的装载方法如下:

  • 使用SQL Server 2005数据库驱动:Class.forName("sun.jdbc.odbc.jdbcOdbcDriver");
  • 使用MySQL数据库驱动:Class.forName("com.mysql.jdbc.Driver");
  • 使用Oracle数据库驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

    2.Connection接口:

  Connection接口代表与特定的数据库的连接.要对数据表中的数据进行操作,首先要获取数据库连接.Connection实现就像在应用程序中与数据库之间开通了一条渠道.通过DriverManager类的getConnection()方法可获取Connection实例.

  • 连接SqlServer数据库:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;        DatabaseName=database","user","password");
  • 连接MySQL数据库:Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database","user","password");
  • 连接Oracle数据库:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:database","user", "password");

         常用的方法:

  •             创建向数据库发送sql的Statement对象:createStatement();
  •      创建向数据库发送预编译sql:prepareStatement(sql);
  •      创建执行存储过程的callableStatement对象:prepareCall(sql);
  •      设置食物是否自动提交:setAutoCommit(boolean autoCommit);
  •      在链接上提交事务:commit();
  •      在此链接上回滚事务:rollback();

 3.Statement 接口:

  Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement 对象,用于执行不带参数的简单SQL语句。

   Statement的子接口CallableStatement和 PreparedStatement。

  • Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
  • PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
  • CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程

 常用Statement方法:

  •     运行语句,返回是否有结果集:execute(String sql);
  •     运行select语句,返回ResultSet结果集:executeQuery(String sql);
  •     运行增删改操作,返回更新的行数:executeUpdate(String sql);
  •     把多条sql语句放到一个批量处理中:addBatch(String sql);
  •     向数据库发送一批sql语句执行:executeBatch();

 4.ResultSet 接口  

   ResultSet,数据库结果集的数据表,通常通过执行查询数据库的语句生成。

    ResultSet提供检索不同类型的方法和都结果集进行滚动的方法:

  •      获取数据库里是varchar、char等类型的数据对象:getString(int index)、getString(String columnName);
  •      获取在数据库里是Float类型的数据对象:getFloat(int index)、getFloat(String columnName);
  •      获取在数据库里是Date类型的数据:getDate(int index)、getDate(String columnName);
  •      获取在数据库里是Boolean类型的数据:getBoolean(int index)、getBoolean(String columnName);
  •      获取在数据里任意类型的数据:getObject(int index)、getObject(String columnName);
  •      移动到下一行:next();
  •      移动到前一行:Previous();
  •      移动到指定行:absolute(int row);
  •      移动resultSet的最前面:beforeFirst();
  •      移动到resultSet的最后面:afterLast();    

. 使用JDBC的步骤

  1.  注册驱动(注册一次即可)
  2.  创建数据库连接
  3.  创建Statement
  4.  执行查询或更新
  5.  处理结果
  6.  释放资源   

 注:释放资源:后开先关,先开后关 ResultSet→PreperedStatement→Connection

实例:  运用的MySQL数据库当作实例       

//外部资源db.properties文件
dirverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ceshi
username=root
password=root

JDBC工具类:   

//静态变量
	private static  String Driver=null;
	private static  String url=null;
	private static  String userName=null;
	private static  String passWord=null;
	
	static {
		//读取外部的文件的信息
		InputStream inputStream = Util.class.getClassLoader().getResourceAsStream("db.properties");
		//创建属性对象解析输入流配置信息
		Properties ps=new Properties();
		//解析
		try {
			ps.load(inputStream);
			//获取驱动
			Driver=ps.getProperty("dirverName");
			//获取数据库链接
			url=ps.getProperty("url");
			//获取用户名
			userName=ps.getProperty("username");
			//获取密码
			passWord=ps.getProperty("password");
			//加载驱动
			Class.forName(Driver);
		} catch (IOException e) {
			e.printStackTrace();
			//程序员自定义异常错误抛出
			throw new RuntimeException("Io错误!!");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("驱动加载驱动失败!!");
	}
	//链接数据库
	public static Connection getConection() throws SQLException {
		Connection con =null;
		con = DriverManager.getConnection(url, userName, passWord);
		return con;
	}
	//释放资源
	public static void getClose(ResultSet rs,PreparedStatement pst,Connection con){
		if(rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(pst!=null) {
			try {
				pst.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(con!=null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
          }

main方法测试:
//main函数测试连接
	public static void main(String[] args) {
		try {
			//定义PreparedStatement
			PreparedStatement prepareStatement = null;
			//创建连接
			Connection con = Util.getConection();
			//插入一条信息
			String sql="insert into user(username,password) values(?,?)";
			//预编译
			prepareStatement=con.prepareStatement(sql);
			//给占位符赋值
			prepareStatement.setString(1, "zhangsan");
			prepareStatement.setString(2, "123");
			//执行sql
			prepareStatement.executeUpdate();
			//关闭资源
			Util.getClose(null, prepareStatement, con);
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
结果:
                 


   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值