Java通过JDBC实现对数据库的访问,是Java数据库连接(Aava DataBase Connectivity)的简称
JDBC组成要素
JDBC API:
Connection(连接)接口:负责连接数据库并承担传送数据的任务
Statement接口:由Connection生产,负责执行SQL语句
ResultSet(结果集)接口:负责保存和处理Statement执行后所产生的查询结果
PreparedStatement接口:Statement的子接口,由Connection产生,执行SQL语句,有高安全性、高性能、高可读性、高可维护性的优点
JDBC Driver Manager(驱动程序管理器) :DriverManager类:装载驱动程序,并为创建新的数据库连接提供支持
JDBC驱动
访问步骤:1.加载JDBC驱动
Class.forName(“驱动名称”)
2.与数据库建立连接
Connection con = DriverManager.getConnection(数据连接字符串,数据库用户名、密码);
3.发送SQL语句,并返回结果
Statement stmt = con.createStatement();
ResultSet rs = stmt.execteQuery(“SELECT id,name from master”)
4.返回结果
While(rs.next()){
int id=rs.getInt(“id”);
String name = rs.getString(“name”);
System.out.println(id+” ”+name)
}
两种常用驱动方式:
使用JDBC-ODBC桥连方式
桥连方式就是将JDBC API的调用转换为另一组数据库连接(ODBC)API的调用
使用纯JAVA方式连接数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/**
* 添加数据
* @author MrGuo
*
*/
public class Test2 {
public static void main(String[] args) throws SQLException {
//构建连接对象
Connection con = getConnection();
//构建命令对象,发送SQL指令,并且执行
Statement stat = con.createStatement();
System.out.println("年级名称");
Scanner input = new Scanner(System.in);
String gname=input.next();
String sql = "insert into grade(gname) values('"+gname(字段名)+"')";
//直接调度命令方法
int count = stat.executeUpdate(sql);
if(count>0) {
System.out.println("add ok!");
}
//关闭资源
stat.close();
con.close();
}
private static Connection getConnection() throws SQLException {
// TODO Auto-generated method stub
String url="jdbc:mysql://localhost:3306/数据库名称";
String user = "账号";
String password="密码";
//驱动字符串
String driver = "com.mysql.jdbc.Driver";
Connection con = DriverManager.getConnection(url, user, password);
System.out.println("connect ok ");
return con;
}
}
Connection常用接口方法
方法名称 |
作用 |
void close() |
立即释放此Connection对象的数据库和JDBC资源 |
Statement createStatement() |
创建一个Statement对象来将SQL语句发送到数据库 |
PreparedStatement preareStatement(String sql) |
创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库 |
boolean isClosed() |
查询此Connection对象是否已经被关闭 |
Statement接口
主要用于将SQL语句发送到数据库中
常用方法
方法名称 |
作用 |
ResultSet executeQuery(String sql) |
可以执行SQL查询并获取ResultSet对象 |
int executeUpdate(String sql) |
可以执行插入、删除、更新的操作,返回值是执行该操作所影响的行数 |
boolean execute(String sql) |
可以执行任意SQL语句,若结果为ResultSet对象,则返回true;若其为更新计数或者不存在任何结果,则返回false |
ResultSet接口常用方法及作用
方法名称 |
作用 |
boolean next() |
将光标从当前位置向下移动一行 |
boolean previous() |
将光标从当前位置向上移动一行 |
void close() |
关闭ResultSet对象 |
int getInt(int columnIndex) |
以int的形式获取结果集当前行指定列号的值 |
int getInt(String columnLabel) |
以int的形式获取结果集当前行指定列名的值 |
float getFloat(int columnIndex) |
以float的形式获取结果集当前行指定列号的值 |
float getFloat(String columnLabel) |
以float的形式获取结果集当前行指定列名的值 |
String getString(int columnIndex) |
以String的形式获取结果集当前行指定列号的值 |
String getString(String columnIndex) |
以String的形式获取结果集当前行指定列名的值 |
int getRow() |
得到光标当前所值行的行号 |
boolean absolute(int row) |
光标移动到row指定的行 |
PreparedStatement
方法名称 |
作用 |
boolean exectute() |
在此PreparedStatement对象中执行SQL语句,该语句可以是任何SQL语句。如结果是Result对象,则返回true,如结果是更新计数或没有结果,则返回false |
ResultSet executeQuery() |
在此PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象 |
int executeUpdate() |
在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句,如INSERT、UPDATE或DELETE语句;或者是无返回内容的SQL语句,如DDL语句,返回值是执行该操作所影响的行数 |
void setInt(int index,int x) |
将指定参数设置为给定Java int 值。设置其他类型参数的方法与此类似,如setFloat(int index,flost x)、setDouble(int index,double x)等 |
void setObject(int index,Object x) |
使用给定对象设置指定参数的值 |