JAVA_JDBC操作数据库(一)

一:JDBC概述

1:jdbc简介

jdbc—Java Database Connectivity即Java数据库连接,它由一组使用Java语言编写的类与接口组成。JDBC提供了执行sql语句标准的JavaAPI,可以方便地实现多种关系数据库的统一操作。

第一层为Java应用程序,它使用JDBC API连接和操作数据库,而使用JDBC API连接不同的数据库时,需使用不同的JDBC驱动程序。
1)JDBC API:提供了Java应用程序与各种不同数据库交互的标准接口,包括Connection、Statement、PreparedStatement、ResultSet。开发人员使用JDBC接口进行各种数据库的操作。
2)JDBC Driver Manager:能够管理各种不同JDBC驱动。
3)JDBC驱动:JDBC驱动由不同的数据库厂商提供,用于连接不同的数据库。例如Oracle公司提供专用于连接Oracle的JDBC驱动,微软提供专门连接SqlServer的JDBC驱动。JDBC驱动又实现了JDBC API的各种接口,加载JDBC驱动后才可以使用JDBC API中的接口操作数据库。
2.JDBC API
JDBC的核心是提供Java API类库,帮助用户建立与数据库的连接。执行Sql语句、检索结果集等。Java开发人员可以利用这些类库开发数据库应用程序。
JDBC API中主要类和接口
类及接口 功能描述
java.sql.DriverManager管理JDBC驱动程序
java.sql.connection建立特定数据库的连接(会话),建立连接后执行sql语句
java.sql.statement用于执行sql语句
java.sql.PreparedStatement创建可以编辑的sql语句对象,是Statement的子接口
java.sql.ResultSet创建检索sql语句的结果集
java.sqlCallableStatement执行sql存储过程
java.sql,types表示sql类型的常量
java.sql.sqlException数据库访问过程中产生的错误描述信息

注:使用JDBC操作数据库需熟练掌握JDBC API,JDBC API主要包括建立数据库的连接、发送SQL语句、处理结果三个方面,也就是操作数据库的步骤。而对于数据库进行增、删、改、查前提都是建立在数据库的连接上。
3.JDBC驱动分类
JDBC本身提供了一套数据库操作标准,并针对每个数据库厂商提供专有的驱动程序接口。
1)JDBC-ODBC桥驱动: 2)纯Java驱动: 3)JDBC网络驱动: 4)本地协议纯JDBC驱动:

二:JDBC连接数据库

1)JDBC操作步骤

(1)加载并注册驱动程序
使用class.forName()方法将指定的类加载到Java虚拟机中,若指定类不存在时则产生异常。(前提要手动把驱动包加入到项目中)
class.forName("JDBC驱动名称");
(2)与数据库建立连接
DriverManager类跟踪已注册的驱动程序,调用getConnection()方法时将查找整个驱动程序列表,加载数据连接字符串指定的数据库驱动程序,并建立与数据库的连接。该方法提供三个参数分别表示url、用户名和密码。
Connection con=DriverManager.getConnection("数据连接字符串","用户名","密码");
(3)创建操作对象,发送sql语句
使用Connection创建Statement操作对象,并将sql语句传送给所需要连接的数据库,若sql语句为查询,则返回类型为Resultset对象
Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery("select * from tab_");
(4)处理结果
使用ResultSet对象的next()方法将结果集光标只想下一行。ResultSet光标默认位于结果集第一行之前,因此首次调用next()方法时光标将被定为在结果集的第一行。光标位于结果集的最后一行也就是末尾时,ResultSet的next()方法将返回false。getxxx()方法可以获取当前行的某列数据。
while(rst.next()){
   int id=rst.getInt("id");
   String name=rst.getString("name");
}
(5)关闭连接
con.close();

2)JDBC连接数据库步骤

1)配置数据库驱动程序
实际应用中一般采用纯Java驱动的方式连接数据库,首先需要导入你需要用到的驱动包。
2)加载驱动程序
比如你导入了sqlserver的驱动包那么你的驱动程序路径就应该如下:
com.microsoft.sqlserver.jdbc.SQLServerDriver
若加载后的驱动程序出现java.lang.classnotfoundexception异常,说明此驱动程序的路径位置不正确。
3)连接及关闭数据库
数据库驱动程序正确加载后,接下来要做的就是使用DriverManager类连接数据库。
DriverManager类常用的方法
public static Conncetion getConnection(String urk,String user,String ppassword)throws SQLexecption根据提供的数据库地址、用户名、密码建立与数据库的连接
加载完成驱动后就需要提供数据库的具体连接地址,不同的数据库有不同的连接地址。
连接地址格式:
jdbc:sqlserver://ip地址:端口号;Databasename=“数据库名称”;
若果是连接本地:ip可改为localhost:端口号;
Connection接口的常用方法
返回类型方法名称描述
StatementcreateStatement()创建Statement对象
PreparedStatementprepareStatement(String sql)创建preparedStatement对象
CallableStatementprepareCall(String sql)执行存储过程
vidsetAutoCommit(boolean flag)设置数据库是否自动提交
voidrollback()回滚数据库操作
voidcommit()提交事务
voidclose()关闭数据库连接
booleanisClosed()判断连接是否已关闭

三:Statement接口

数据库连接后可以使用Statement接口进行具体操作,该接口引用指向Connection接口提供的createStatement()方法获得。

createStatement()的常用方法
返回类型方法名称描述
intexecuteUpdate(String sql)执行数据库更新sql语句:insert、update、delte。并返回更新的记录数
ResultSetexecuteQuery(String sql)执行数据库查询操作,返回结果集对象
booleanexecute(String sql)执行sql语句,返回执行结果true、false
voidclose()关闭statement操作

<span style="font-size:18px;"><span style="font-size:18px;">package com.Connection;

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


public class Test {
	private static final String DRIVER="com.mysql.jdbc.Driver";
	private static final String URL="jdbc:mysql://localhost/mytest";
	public static void main(String[] args) {
		Connection con=null;
		Statement sta=null;
		try {
			Class.forName(DRIVER);
			con=DriverManager.getConnection(URL, "root", "123456");
			sta=con.createStatement();
			sta.execute("insert into test values('4','tom')");
			sta.close();
			String tname="mack";
			sta=con.createStatement();
			String sql="update test set tname='"+tname+"'where tid="+2; 
			sta.execute(sql);
			sta.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}</span></span>

注意:操作中分别先关闭了statement和Connection。一般连接关闭后其他所有操作均将被关闭,但实际开发中,建议先关闭所有对象且采用先打开后关闭的方式。所以先关闭statement,之后再关闭Connction。

四:ResultSet接口

1)resultSet简介:数据库的更新操作insert、update、delete均可以直接使用statement接口中的executeUpdate()方法完成。而数据库的查询操作,则使用statement接口中的executeQuery()方法,该方法返回类型为ResuletSet。JDBC中数据库的所有查询记录使用ResultSet接收并显示内容。
ResultSet常用方法
返回类型方法名称描述
booleannext()将指针指到下一行
intgetInt(int columnIdex)以整数形式按列的编号取得指定列的内容
intgetInt(String columnname)以整数形式取得指定列的内容
stringgetString(int columnIndex)以字符串形式按列的编号取得指定列的内容
stringgetString(String columnName)以字符串形式取得指定列的内容
2)ResulSet应用
package com.Connection;

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


public class Test {
	private static final String DRIVER="com.mysql.jdbc.Driver";
	private static final String URL="jdbc:mysql://localhost/mytest";
	public static void main(String[] args) {
		Connection con=null;
		Statement sta=null;
		ResultSet rst=null;
		try {
			Class.forName(DRIVER);
			con=DriverManager.getConnection(URL, "root", "123456");
			sta=con.createStatement();
			rst=sta.executeQuery("select * from test");
			while(rst.next()){
				System.out.println(rst.getInt(1));//获取的tid是int类型。1表示第一列
				System.out.println(rst.getString(2));//获取的tname是String类型。2表示第二列的数据类型
				
				//可以将以上的获取方式该为通过列名获取
				System.out.println(rst.getString("tid"));//通过列名获取数据
				System.out.println(rst.getString("tname"));//通过列名获取数据
			}
			rst.close();
			sta.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}


五:PreparedStatemnt接口

1)PreparedStatement简介:
PreparedStatement接口继承自Statement接口,其使用更为灵活高效。该接口实例包含已编译的、具有输入参数的sql语句。Sql语句中输入参数的值,创建时未被指定,而是保留?作为占位符。
try {
			Class.forName(DRIVER);
			con=DriverManager.getConnection(URL, "root", "123456");
			String sql="insert into test values(?,?)";
			pst=con.prepareStatement(sql);
			pst.setInt(1, 5);
			pst.setString(2, "xxx");
			pst.execute();
			pst.close();
			con.close();
			System.out.println("添加成功!");
			
		} catch (Exception e) {
			// TODO: handle exception
		}
PreparedStatement和Statement都可以对数据库进行操作。但PreparedStatement语句可以进行预编译,再次执行相同的sql语句时数据库端不在进行编译,故其性能较高,在开发中建议使用PreparedStatement。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值