您的位置:首页 > 数据库

jdbc连接数据库和jdbc的核心api

2016-01-16 12:26 423 查看
什么是jdbc?

使用java代码(程序)发送sql语句的技术,就是jdbc技术!!!!

使用jdbc发送sql前提

登录数据库服务器(连接数据库服务器)

数据库的IP地址

端口

数据库用户名

密码



没有jdbc之前由程序员自己编写驱动程序来连接数据库,程序猿需要自己来维护不同的驱动程序,如果数据库改变,驱动程序可能也会随之改变这是相当不方便的!如下图:



jdbc出现以后数据库驱动(规范的实现)由数据库厂商提供符合规范(该规范由sun公司设计的一套通用的java操作不同数据库的接口)的驱动,程序猿只需维护java应用和一套规范不必再维护驱动程序,减轻了程序猿的负担。如下图 :



jdbc的接口在java.sql*\ javax.sql中*



jdbc联接数据库

新建一个Java project JdbcTest 导入相应数据库驱动这里用mysql的驱动



这里写代码片package jdbcTest;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;

public class JdbcDemo1 {
// 连接数据库的url
private String url = "jdbc:mysql://localhost:3306/sqltest";
// jdbc协议:数据库子协议://主机:端口号/连接的数据库
// 用户名
private String user = "root";
// 密码
private String password = "root";
@Test//第一种方式
public void jdebcTest1() throws SQLException {
// 创建驱动程序对象
Driver driver = new com.mysql.jdbc.Driver();
//设置用户名密码
Properties info = new Properties();
info.setProperty("user", user);
info.setProperty("password", password);
//建立连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
@Test//第二种方式
public void jdbcTest2() throws ClassNotFoundException, SQLException{
//加载com.mysql.jdbc.Driver的字节码文件Class.forName(“className”)返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class.forName("com.mysql.jdbc.Driver");
//利用DriverManager(管理一组 JDBC 驱动程序的基本服务)拿到连接
Connection conn=DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
}


成功结果:



这里推荐使用第二种方式

在调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序

我们看一下Driver的源码:



在Driver加载时就加载了静态代码块就已经将驱动交给了DriverManager注册,所以在使用Class.forName()加载字节码文件时就已经由DriverManager注了驱动类,这样接下来就可以用DriverManager.getConnection()来拿到连接。

JDBC接口核心的API

在java.sql.* 和 javax.sql.*包中

Driver接口: 表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。





DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序





Connection接口: 表示java程序和数据库的连接对象。







Statement接口: 用于执行静态的sql语句



PreparedStatement接口:用于执行预编译sql语句



CallableStatement接口:用于执行存储过程的sql语句(call xxx)

ResultSet executeQuery() : 调用存储过程的方法

ResultSet接口:用于封装查询出来的数据

boolean next() : 将光标移动到下一行

getXX() : 获取列的值

使用api

新建一个JdbcCrud类下面我们来使用一下这些核心api

这里写代码片package jdbcTest;

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

import org.junit.Test;

public class JdbcCrud {
private
4000
String url = "jdbc:mysql://localhost:3306/sqltest";
private String user = "root";
private String password = "root";

@Test
public void crudtest() {
String name="rose";
int id=5;
int math=100;
Statement sm = null;
Connection conn = null;

try {
// 注册驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 建立连接
conn = DriverManager.getConnection(url, user, password);
// 获得Statement对象用于执行静态 SQL 语句并返回它所生成结果的对象。
sm = conn.createStatement();
String sql = "insert into student(id,name,math) values('"+id+"'+,'"+name+"','"+math+"')";
//sql="update student  set math='"+math+"' where id="+id;
//sql="delete  from student where id="+id;
//查询
sql="select *from student";
//返回数据库的结果集
ResultSet rs=sm.executeQuery(sql);
while(rs!=null&&rs.next()){
System.out.print(rs.getInt(1)+" ");
System.out.print(rs.getString(2)+" ");
System.out.println(rs.getInt(3));

}
// 执行sql语句 返回受影响行数
//int count = sm.executeUpdate(sql);
//System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
} finally {// 关闭连接
if (sm != null) {
try {
sm.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {

e.printStackTrace();
}

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdbc java