JDBC学习笔记1

时间:2021-10-10 00:02:49

JDBC(java database connectivity)
一、基于socket+数据库底层协议
java sun ------标准(接口)java.sql.*;
jdbc sun公司为了方便连接数据库,给出了一套接口。这套接口由各大数据库厂商去实现,最终数据库厂商都会给出一套jar包。

二、接口

Driver 数据驱动,直接将我们编写的代码转化为数据库的网络协议
Statement 执行静态的sql语句
preparedstatement预编译
Connection 获取数据库的连接
ResultSet 接受数据库返回的结果集

DirverManager 驱动管理类,对驱动进行管理
ojdbc14.jar 开发人员提供的
ojdbc14_g.jar 运行的时候会输入大量的测试语句,数据开发人员
ojdbc5.jar 因为jdk版本太高,就用这个jar包

连接数据库的四个要素

//驱动类
private String driver="oracle.jdbc.OracleDriver";
//请求资源路径
private String url="jdba:oracle:thin:@localhost:1521:XE";
//用户名
private String user="victor";
//密码
private String password="victor";

1、driver--指向的是包名+类名
oracle.jdbc.driver.OracleDriver
2、url:jdbc:oracle:thin:@localhost:1521:XE
thin代表的是连接方式
@localhost请求数据库所处服务器的ip地址
1521数据库的端口号
网页的端口号8080
XE数据库的名字
3、user 用户名---》自己将来要连接操作的用户
4、password 登录密码

Properties集合
存放的是key——value,一般只对字符串使用
存值setProperty(key,value);类型都是String
取值getProperty(key);key必须是String
可以加载普通的file文件,或以.properties结尾的文件
文件里的内容必须是=连接的,不要出现空格

操作流程:

1、注册驱动
2、获取数据库的连接
3、创建statement对象
4、执行sql语句
5、关闭资源

execute(sql) boolean执行sql语句的时候,执行成功true,反之false
executeUpdate(sql) int 表示影响的行计数
executeQuery(sql) resultSet 返回结果集,通常用在查询语句中,获取数据库的数据

加载驱动的三种方式:自动加载【反射创建】、手动加载【实例化】、虚拟机传参数创建

import java.sql.DriverManager;
import java.sql.SQLException;
public class Touch {
//连接数据库的四要素
//驱动类
private String driver="oracle.jdbc.OracleDriver";
//请求资源路径
private String url="jdba:oracle:thin:@localhost:1521:XE";
//用户名
private String user="victor";
//密码
private String password="victor";
public void connect(){
//1、自动注册驱动[通过反射注册驱动]
java.sql.Connection con;
try {
//加载驱动
Class.forName(driver);
//获取数据库连接
con=DriverManager.getConnection(url, user, password);
System.out.println(con);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void connect1(){
//2、注册驱动,实例化,手动注册
java.sql.Connection con;
try {
////加载驱动
//Driver dri=new OracleDriver();
//获取数据库连接
con=DriverManager.getConnection(url, user, password);
System.out.println(con);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void connect2(){
//3、虚拟机传参数
//-Djdbc.drivers=oracle.jdbc.OracleDriver
java.sql.Connection con;
try {
//获取数据库连接
con=DriverManager.getConnection(url, user, password);
System.out.println(con);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
Touch t=new Touch();
t.connect();
t.connect1();
t.connect2();
}
}

插入数据的两种方式【带参数和不带参数】和手动提交事务

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

import oracle.jdbc.driver.OracleDriver;

public class LinkInsert {
private String url="jdbc:oracle:thin:@localhost:1521:XE";
private String user="victor";
private String password="victor";
//插入数据第一种方式
public void link(){
java.sql.Connection con;
java.sql.Statement sta;
java.sql.ResultSet res;
try {
//加载驱动
Class.forName(driver);
//获取数据库连接
con=DriverManager.getConnection(url, user, password);
//创建statement对象
sta=con.createStatement();
String sql="insert into lanzhou values(2,'lisi','femal')";
//执行SQL语句
res=sta.executeQuery(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//插入数据第一种方式
public void link1(int id, String name,String gender){
java.sql.Connection con;
java.sql.Statement sta;
java.sql.ResultSet res;
Driver driver=new OracleDriver();
try {
DriverManager.registerDriver(driver);
con=DriverManager.getConnection(url, user, password);
sta=con.createStatement();
String sql="insert into lanzhou values("+id+",'"+name+"','"+gender+"')";
res=sta.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
//手动提交事物
public void link2(){
java.sql.Connection con = null;
java.sql.Statement sta = null;
java.sql.ResultSet res = null;
//第一步:注册驱动
Driver driver=new OracleDriver();
try {
DriverManager.registerDriver(driver);
//第二部:获取连接
con=DriverManager.getConnection(url, user, password);
//手动提交事物的设置,默认为true
con.setAutoCommit(false);
//第三步:创建Statement对象
sta=con.createStatement();
String sql="insert into lanzhou values(4,'wangwu','femal')";
//第四步:执行sql语句
res=sta.executeQuery(sql);
//第五步:提交事物
con.commit();
} catch (SQLException e) {
//事物回滚,撤销
try {
con.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(res!=null)
res.close();
if(sta!=null)
sta.close();
if(con!=null)
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
LinkInsert l=new LinkInsert();
//l.link();
//l.link1(3, "lisi", "male");
l.link2();
}
}

两种查询【带参数和不带参数】

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

import oracle.jdbc.driver.OracleDriver;

public class Connection {
private String url="jdbc:oracle:thin:@localhost:1521:XE";
private String user="victor";
private String password="victor";
public void connect(){
java.sql.Connection con=null;
java.sql.Statement sta=null;
java.sql.ResultSet res=null;
Driver driver=new OracleDriver();
try {
DriverManager.registerDriver(driver);
con=DriverManager.getConnection(url, user, password);
sta=con.createStatement();
String sql="select * from lanzhou";
//执行sql语句,要有结果放回,故用下面的语句
res=sta.executeQuery(sql);
//set.next返回的是boolean,如果下一个位置有值true
while(res.next()){
System.out.println("id="+res.getInt(1)+" ; "+"name="+res.getString(2)+" ; "+"gender="+res.getString(3));
//System.out.println("name="+res.getString(2));
//System.out.println("gender="+res.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void connect1(int id){
java.sql.Connection con=null;
java.sql.Statement sta=null;
java.sql.ResultSet res=null;
Driver dri=new OracleDriver();
try {
DriverManager.registerDriver(dri);
con=DriverManager.getConnection(url, user, password);
sta=con.createStatement();
String sql="select * from lanzhou where id="+id;
res=sta.executeQuery(sql);
while(res.next()){
System.out.println("id="+res.getInt(1)+" ; "+"name="+res.getString(2)+" ; "+"gender="+res.getString(3));
//System.out.println("id="+res.getInt(1));
//System.out.println("name="+res.getString(2));
//System.out.println("gender="+res.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
Connection c=new Connection();
//c.connect();
c.connect1(1);
}
}

eclipse和数据库手动连接的步骤:

1、创建一个.sql文件

2、打开open perspective窗口,选择datebase development

3、选择date source explorer窗口点击带黄色加号的图标(new connection profile)

4、然后选择相应的数据库【oracle等等】,可以将名字(name)改为数据库的名字

5、进入Driver设置选项,点击 new driver definition

6、设置name/type为9或者10;设置添加数据库中jdbc相应的jar包(ojdbc14.jar);properties设置将@后面的server设置为localhost,将db改为数据库的名字(如:XE);

将datebase name 改为数据库中自己的用户,将password改为自己用户的密码。

7、然后点击OK ,最后输入user name 输入自己数据库用户的密码,最后点击test connection测试,如果显示ping successed! 则表示连接成功。最后选择savepassword,并点击finish。

8、最后在新建的sql文件中选择type:数据库类型[oracle9、10];

name:数据库的名字[oracle];

datebase:数据库的名字[XE].

这样就可以在eclipse中操作数据库了,SQL result 中会显示.sql文件中操作语句的状态和操作结果。

调用Test方法运行程序

导入JUnit4包即可:

@Test
public void clrear(){
//clear清空缓存中的对象
Person p1=new Person();
p1.setId(2L);
p1.setName("王五");
p1.setGender("nan");
p1.setBird(new Date());
session.save(p1);
tran.commit();
session.clear();
Person ps=(Person) session.get(Person.class, 2L);
System.out.println(ps);
session.close();
}