JDBC基础应用(数据库增删改查)

一、JDBC:解决java与数据库的连接。JDBC框架:


二、JDBC驱动程序类型:

1、JDBC-ODBC桥驱动程序:将JDBC方法调用转换为开放数据库连接(ODBC)函数调用。使Java应用程序能够使用支持ODBC驱动程序的任何数据库,通常使用独立应用程序(本地使用)。

其中,开放数据库连接(ODBC)由微软发起的,很多其他数据库厂商认同的连接方式

2、本机API驱动程序:将JDBC调用映射到本机方法调用,它们传递到本地的本机调用级接口(CLI)。本机API驱动程序没有ODBC中间层。

性能优于JDBC-ODBC桥驱动程序,通常用于基于网络的应用程序。

3、网络协议驱动程序:由客户机(包含纯Java函数)和服务器( 包含Java和本机方法)组成。

Java应用程序将JDBC调用发送到网络协议驱动程序客户机部分,后者将JDBC调用转换为数据库调用。数据库调用被发送到网络协议驱动程序服务器部分,这部分将请求转发给数据库。使用网络协议驱动程序时,在服务器上加载CLI本机库。

4、本机协议驱动程序:使用供应商(各种数据库)特定网络协议直接与数据库交互的Java驱动程序,使用时无需安装任何供应商特定的库。

每个数据库都有特定的本机协议驱动程序。

三、使用JDBC API

1、JDBC API包:java.sql 或者javax.sql

2、借助JDBC API和驱动程序建立java与数据库的连接(数据库ip地址,数据库名称,用户名,密码)

3、JDBC API中常用的类和接口:

1)DriverManager类:载入数据库的驱动程序;

2)Driver接口:表示数据库驱动程序,所有JDBC驱动程序必须实现Driver接口。

3)Connection接口:支持建立java应用程序和数据库之间的连接。建立连接后如果不关闭,则一直在内存中,所有在程序后面,使用close()方法关闭。

4)Statement接口:支持执行SQL语句。

5)ResultSet接口:表示从数据库检索到的信息,所有查询到的数据。

6)SQLException类:提供与数据库交互时发生的异常的相关信息。

4、写JDBC代码的步骤:

1)在项目中添加驱动程序:(操作:右键项目,点击my--->build Path--->add external Archiver...选择jdbc驱动,点击确定。)

其中,.jar里面都是编译完成的java应用程序。都是class文件,是java的可执行程序

2)加载驱动程序(不同的数据库,需要不同的驱动):

try{
    Class.forName("com.mysql.jdbc.Driver");//按照驱动程序的名字加载驱动,参数表示驱动的名字
}catch (ClassNotFoundException e) {
<pre name="code" class="java">    e.printStackTrace();
}

 
驱动程序名称的来源: 

3)建立连接,有以下2种方式:

DriverManager.getConnection("jdbc:mysql://数据库IP地址:端口号/数据库名称?用户名&密码");
DriverManager.getConnection("jdbc:mysql://localhost:3306/sh?user=shde&password=123456");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sh","shde","123456");

其中:localhost是本机IP地址的替换写法,?代表传一个参数。

4)操作数据库:

Statement stmt=conn.createStatement();
stmt.executeQuery("");//执行查询select语句 返回ResultSet
stmt.executeUpdate("");//执行更新,包括update/insert/delete语句 返回受影响的行数
stmt.execute("");//执行任何的SQL语句 包括create table/alter table 返回boolean类型

5)保存结果集

ResultSet rs=stmt.executeQuery("select * from employee");

6)使用结果集

//rs.next();//向前滑动游标,判断结果集里面是否有下一条数据,如果存在数据,则取出
while(rs.next()){
    //游标返回的是一行数据,需要一列,一列的取出来
   System.out.print(rs.getInt(1)+" ");//把第一列的数据取出,转换为整型
   System.out.println(rs.getObject(1));
   System.out.print(rs.getString(2)+" ");
   System.out.print(rs.getInt(3)+" ");
}

如查询数据库的代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCDemo {
	public static void main(String[] args) {
		final String driver="com.mysql.jdbc.Driver";
		try {
			Class.forName(driver);
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sh","sh","123456");
			Statement stmt=conn.createStatement();
			ResultSet rs=stmt.executeQuery("select * from employee");
			while(rs.next()){
				System.out.print(rs.getInt(1)+" ");//把第一列的数据取出,转换为整型
				//System.out.println(rs.getObject(1));
				System.out.print(rs.getString(2)+" ");
				System.out.print(rs.getInt(3)+" ");
			}
			stmt.close();//关闭连接,清除内存中的连接
			conn.close();//关闭连接,清除内存中的连接		
		} catch (ClassNotFoundException e) {
			//当驱动程序不存在或错误时报该异常
			e.printStackTrace();
		} catch (SQLException e) {
			//建立连接失败
			e.printStackTrace();
		}
	}
}
5、使用JDBC添加、修改、删除数据到数据库:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class InsertDemo {
	public static void main(String[] args) {
		final String driver="com.mysql.jdbc.Driver";
		try {
			Class.forName(driver);
			Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sh","sh","123456");
			Statement stmt=conn.createStatement();
			//executeUpdate方法返回0则处理失败,大于0返回受影响的行数
			int count2=stmt.executeUpdate("delete from employee where id=110");
			int count=stmt.executeUpdate("insert into employee values(110,'李',27,15000,'欧洲',101)");
			int count1=stmt.executeUpdate("update employee set name='恁',age=29 where id=109");
			if(count==0){
				System.out.println("数据添加失败");
			}else{
				System.out.println("成功添加数据:"+count+"条");
			}
			if(count1==0){
				System.out.println("数据更新失败");
			}else{
				System.out.println("成功更新数据:"+count+"条");
			}
			if(count2==0){
				System.out.println("数据删除失败");
			}else{
				System.out.println("成功删除数据:"+count+"条");
			}
			stmt.close();
			conn.close();
		} catch (ClassNotFoundException e) {
			//当驱动程序不存在或错误时报该异常
			e.printStackTrace();
		} catch (SQLException e) {
			//建立连接失败
			e.printStackTrace();
		}
	}
}
6、JDBC代码常见的异常:

1)ClassNotFoundException:检查驱动的名称,是否为“com.mysql.jdbc.Driver”;检查是否添加了Jar包。

2)java.sql.SQLException:No suitable driver found:驱动jar包的版本不正确;或者协议错误(正确协议:jdbc:mysql://)。

3)java.sql.SQLException: Access denied for user 'sh'@'localhost' (using password: YES):用户sh的密码不正确。

4)com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax;:sql语句有误。

5)当更新的中文数据在数据库显示乱码:

      a)检查数据库、表的字符集是否为UTF8;

      b)检查java代码所属项目的字符类型是否为GBK;

      c)在java代码的数据库连接中添加字符集参数(characterEncoding=utf-8),如下:

   Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/sh?characterEncoding=utf-8&user=sh&password=123456");
6)更新数据中,界面上接受的数据都是字符串类型,注意转型。

      a)如插入数据是int类型,获取界面上的id值,则转换如下:

   int id=Integer.parseInt(id.getText())
      b)如插入数据是String类型,获取界面上的name值,则转换如下:
   String name=name.getText();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值