六.jdbc基础

一.JDBC简介
1.数据访问技术

2.JDBC和ODBC
Jdbc:是用于执行sql语句的java API。由java语言编写的类和接口组成。
ODBC:ODBC (Open DataBase Connectivity): 依赖微软os平台,导致Java的平台无关性技术特性和面向对象编程的特性都丧失、同时对数据库系统的访问效率也比较低——不能满足企业级大数据量的访问要求
3.两者之间关系
都是用来连接数据库的启动程序,jdbc与odbc由于具有数据独立性甚至平台无关性,因此对Internet对数据的操作提供了很好的操作
4.JDBC体系结构

5.JDBC驱动器
1.JDBC-ODBC桥:是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库驱动代码.
2.本地API驱动:本地API驱动直接把JDBC调用转变为数据库的标准调用再去访问数据库.
3.网络协议驱动:JDBC先把对数局库的访问请求传递给网 络上的中间件服务器.中间件服务器------------数据库Server
4.本地协议驱动:本地协议驱动---------数据库Server
JDBC访问数据库过程
1.加载驱动

public JDBCTools() {
//加载驱动类
try {
Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException e) {e.printStackTrace();
}
}

2.加载链接

public Connection getConnection() throws SQLException {
//url jdbc:mysql://localhost:3306/+javaee_day06
//三个参数(url,user,password)
conn=DriverManager.getConnection(
“jdbc:mysql://localhost:3306/javaee_day06”,
“root”,
“123”);
return conn;
}
3.执行sql语句
A.第一种写法
JDBCTools tools = new JDBCTools();
String name = “Alice”;
Connection conn = tools.getConnection();
String sql = “select *from user where userName=?”;
// PreparedStatement 更安全
PreparedStatement ps = conn.prepareStatement(sql);
//参数的相关设置写法
ps.setString(1, “Alice”);// 第一个?的值是Bob
// ps.setString(2, “Bob”);//第二个?的值是Bob
// ps.setObject(, x);//最简单的写法
B.第二种写法
JDBCTools tools = new JDBCTools();
Connection conn = tools.getConnection();
Statement statement = conn.createStatement();
// 1.执行查询,结果集类型就是resultSet不安全
ResultSet rs = statement.executeQuery(“select *from user where userName=”+name);
4.返回结果集且循环结果,同时关闭驱动
A.
while (rs.next()) {
// 1.以几列获取
rs.getInt(1);
// 2. 以列名获取
rs.getInt(“userid”);
rs.getString(“userName”);
System.out.println(rs.getObject(“userid”) + “\t” + rs.getObject(2) + “\t” + rs.getObject(3) + “\t”+ rs.getObject(4) + “\t” + rs.getObject(5) + “\t”);
}
// 倒着关闭
rs.close();//关闭ResultSet对象
statement.close();//关闭Statement对象
conn.close();//关闭 Connection 对象

B. 用元数据来查询结果System.out.println("----------------------------------");
String sql3=“select *from user”;
ResultSet rs3=tools.executeQuery(sql3);
/ /对元数据的操作
ResultSetMetaData resultSetMetaData=rs3.getMetaData();//获取元数据
System.out.println(“总列数:”+resultSetMetaData.getColumnCount());
System.out.println(“第一名:”+resultSetMetaData.getColumnTypeName(1));
for(int i=1;i<=resultSetMetaData.getColumnCount();++i) {
System.out.print(“列名:”+resultSetMetaData.getColumnName(i)+"\t");
}
System.out.println();
while(rs3.next()) {
System.out.println(“数据:”+rs3.getObject(“userid”)+"\t");
}
C.通过元数据来取值
ResultSetMetaData resultSetMetaData=rs3.getMetaData();//获取元数据
//获取列名
String namee=resultSetMetaData.getColumnName(1);
while(rs3.next()) {
System.out.print(“列名值:”+rs3.getString(namee));
}
注意:
//1.执行查询的时候
ResultSet rs = ps.executeQuery();
// 2.执行 增删改
statement.executeUpdate(sql);
//3.执行查询和增删改
execute:

总结:
1.工具类:
package cn.goketech.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCTools {
private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
public JDBCTools() {
//加载驱动类
try {
Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//二.应用层
/**
* 1.获取链接
* @return
* @throws SQLException
/
public Connection getConnection() throws SQLException {
//url jdbc:mysql://localhost:3306/+javaee_day06
//三个参数(url,user,password)
conn=DriverManager.getConnection(
“jdbc:mysql://localhost:3306/javaee_day06”,
“root”,
“123”);
return conn;
}
/
*
* 执行查询方法
* @param sql
* @return
*
* …表示可变参数
*/
public ResultSet executeQuery(String sql,Object …obj) {

	try {
		//1.产生链接
		conn=getConnection();
		//2.用链接产生prepareStatement
		ps=conn.prepareStatement(sql);
		//3.设置参数(?)
		for(int i=0;i<obj.length;++i) {
			ps.setObject(i+1, obj[i]);
		}
		//4.执行查询
		rs=ps.executeQuery();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	return rs;
}
/**
 * 执行增删改
 * @param sql1
 * @param obj
 * @return
 */
public int  executeUpdate(String sql1,Object... obj) {
	int count=0;
	try {
		conn=getConnection();
		ps=conn.prepareStatement(sql1);
    	for(int i=0;i<obj.length;++i) {
    		ps.setObject(i+1, obj[i]);
    	}
    	count =ps.executeUpdate();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	return count;
}
public int  executeUpdate2(String sql2,Object... obj) {
	int count=0;
	try {
		conn=getConnection();
		ps=conn.prepareStatement(sql2);
    	for(int i=0;i<obj.length;++i) {
    		ps.setObject(i+1, obj[i]);
    	}
    	count =ps.executeUpdate();
    	
    	
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	return count;
}
/**
 * 关闭连接
 */
public void close() {
	try {
		rs.close();
		ps.close();
		conn.close();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

}

}

2.测试工具类
package cn.goketech.test;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import cn.goketech.jdbc.JDBCTools;
public class TestTools {
public static void main(String[] args) {
// TODO Auto-generated method stub
JDBCTools tools=new JDBCTools();
String sql=“select *from user “;
ResultSet rs=tools.executeQuery(sql);
try {
while(rs.next()) {
// 1.以几列获取
rs.getInt(1);
// 2. 以列名获取
rs.getInt(“userid”);
rs.getString(“userName”);
System.out.println(rs.getObject(“userid”) + “\t” + rs.getObject(2) + “\t” + rs.getObject(3) + “\t”
+rs.getObject(4) + “\t” + rs.getObject(5) + “\t”);
}
tools.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(”----------------------------------”);
// String sql1=“insert into user(userName,sex,age,phoneNumber) values(?,?,?,?)”;
// int count =tools.executeUpdate(sql1,“Clover”,“女”,18,“456”);
//
// System.out.println(“count=”+count);

 System.out.println("----------------------------------");
 String sql2="delete from user where userid=?";
 int  count2 =tools.executeUpdate(sql2,1002);
 System.out.println("count2="+count2);
 System.out.println("----------------------------------");
 String sql3="select *from user";
 ResultSet rs3=tools.executeQuery(sql3);
 //对元数据的操作
 try {
	 ResultSetMetaData resultSetMetaData=rs3.getMetaData();//获取元数据
	 System.out.println("总列数:"+resultSetMetaData.getColumnCount());
	 System.out.println("第一列名类型:"+resultSetMetaData.getColumnTypeName(1));
	 String   namee=resultSetMetaData.getColumnName(1);
	 for(int i=1;i<=resultSetMetaData.getColumnCount();++i) {
		 System.out.print("列名:"+resultSetMetaData.getColumnName(i)+"\t");
	 }
	 System.out.println();
	while(rs3.next()) {
		 System.out.print("列名值:"+rs3.getString(namee));
		 System.out.println("数据:"+rs3.getObject("userid")+"\t");
	 }
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
     }

}
3.测试工具类
package cn.goketech.test;

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

import cn.goketech.jdbc.JDBCTools;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
JDBCTools tools = new JDBCTools();
String name = “Alice”;
try {
Connection conn = tools.getConnection();
Statement statement = conn.createStatement();
String sql = “select *from user where userName=?”;
// PreparedStatement 更安全
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, “Alice”);// 第一个?的值是Bob
// ps.setString(2, “Bob”);//第二个?的值是Bob
// ps.setObject(, x);//最简单的写法
// 1.执行查询,结果集类型就是resultSet不安全
// ResultSet rs = statement.executeQuery(“select *from user where
// userName=”+name);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
// 1.以几列获取
rs.getInt(1);
// 2. 以列名获取
rs.getInt(“userid”);
rs.getString(“userName”);
System.out.println(rs.getObject(“userid”) + “\t” + rs.getObject(2) + “\t” + rs.getObject(3) + “\t”
+ rs.getObject(4) + “\t” + rs.getObject(5) + “\t”);
}
// 倒着关闭
rs.close();
statement.close();
conn.close();
// 2.执行 增删改
// statement.executeUpdate(sql);

	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

总结:
/**

  • 一. 驱动层
  • 1.加载驱动
  • 二.应用层
  • 1.链接 Connection
  • 2.操作接口Statement
  • 3.结果集 ResultSe
  • 4.关闭操作

*/

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值