JDBC
JDBC(Java DataBase Connectivity)
一.概念
- Java数据库连接技术,能实现Java程序对各种数据库的访问,简单点说就是使用统一的一套java代码来操作所有的关系型数据库
- 由一组使用Java语言编写的类和接口(JDBC API)组成,它们位于java.sql以及javax.sql中
二.前提:导入jar包
三.JDBC访问数据库步骤
1.Class.forName()加载驱动
Class.forName("com.mysql.jdbc.Driver");
注:此处需要抛一个异常
2.DriverManager获取Connection连接(需要数据库地址URL,用户名,密码)
String url="jdbc:mysql://192.168.83.2:3306/test";
Connection conn = DriverManager.getConnection(url, "root", "ok");
注:
- 192.168.83.2是我的虚拟机地址,每个人都不一样
- 3306是端口号,每人是一样的
- test是数据库中的一个库名
- root是我的用户名,ok是我的密码
3.创建Statement执行SQL语句
Statement stat = conn.createStatement();
4.返回ResultSet查询结果
//查询的grade表
String sql="select * from grade";
ResultSet rs = stat.executeQuery(sql);
//索引法,索引为1的时候是gradeId所在列
while (rs.next()) {
int gradeId = rs.getInt(1);
String gradeName= rs.getString(2);
System.out.println(gradeId+"\t|\t"+gradeName);
}
数据库中grade表信息
注:
查询语句就是executeQuery
增删改语句是executeUpdate
用ResultSet集合来接收查询的结果,
结果遍历打印出来,用next方法
5.释放资源
rs.close();
stat.close();
conn.close();
注:依次关闭资源
6.查询结果
四.访问数据库步骤statement(使用封装)
public class Demo1 {
private static Connection conn;
private static Statement stat;
private static ResultSet rs;
public static void getConn(){
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2.获取连接,数据库地址URL,用户名,密码
String url="jdbc:mysql://192.168.83.2:3306/test";
try {
Connection conn = DriverManager.getConnection(url,"root","ok");
if (conn!=null)
//3.创建statement执行sql语句
stat=conn.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void query(String sql,String param){
//查询的方法
try {
if (stat!=null)
//接收返回结果
rs = stat.executeQuery(sql + param);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static boolean update(String sql){
//增删改的方法
int num=-1;
try {
if(stat!=null) {
num= stat.executeUpdate(sql);
}
} catch (SQLException e) {
e.printStackTrace();
}
return num>0?true:false;
}
public static void close(){
//关闭资源的方法
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat!=null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception{
getConn();
String sql="select * from grade where gradeId=";
query(sql,"2");
if (rs.next()){
System.out.println(rs.getString(2));
}
}
}
查询结果
五.访问数据库步骤PreparedStatement(使用封装)
public class Demo1 {
private static Connection conn;
private static PreparedStatement pst;
private static ResultSet rs;
private static final String URL="jdbc:mysql://192.168.83.2:3306/test";
public static void getConn(){
//1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(URL,"root","ok");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void query(String sql,String...params){//可变参数
//查询的方法
try {
pst = conn.prepareStatement(sql);
for (int i = 0; i <params.length ; i++) {
pst.setObject(i+1,params[i]);
}
//接收返回结果
rs =pst.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static boolean update(String sql,String...params){
//增删改的方法
int num=0;
try {
pst=conn.prepareStatement(sql);
for (int i = 0; i <params.length ; i++) {
pst.setObject(i+1,params[i]);
}
num= pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return num>0;
}
public static void close(){
//关闭资源的方法
try {
if (rs!=null)
rs.close();
if (pst!=null)
pst.close();
if (conn!=null)
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
getConn();
String sql="select * from grade where gradeId=?";
//用问号代表参数,可变参数也可以不传
query(sql,"3");
while (rs.next()){
int i=1;
while (rs.getMetaData().getColumnCount()>=i){
System.out.println(rs.getObject(i)+"\t|");
i++;
}
System.out.println();
}
}
}
运行结果