JDBC(Mysql)个人总结

JDBC(Mysql)个人学习

1,什么是JDBC?
2,JDBC可以做什么?
3,如何去使用JDBC?

什么是JDBC?

JDBC(Java DataBase Connectivity),java数据库连接,是一种用于执行SQL语句的Java API,也可以这样理解,是Java语言定义的一个SQL调用接口。方便了Java程序猿。

JDBC可以做什么?

JDBC 可做三件事:与数据库建立连接、发送操作数据库的语句并处理结果。

如何去使用JDBC?

1,注册驱动(两种方法)

1,com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
2,Class.forName("com.mysql.jdbc.Driver");(运用了Java中的反射机制)

2,获得数据库链接

Connection connection = DriverManager.getConnection(url,user,password);
Connection类 属于java.sql.Connection 包下。

3,创造数据库操作对象

1,Statement statement = connection.createStatement();
  Statement类 属于java.sql.Statement,此操作对象一般用于执行静态sql语句
2,PreparedStatement preparedStatement = connection.prepareStatement();
  PreparedStatement 继承Statement类 属于java.sql.Statement,此操作对象一般用于执行动态sql
  语句,可以进行sql语句的预编译,可以防止部分情况下的sql语句注入等。

4,定义sql语句

1,String sql = "select * from test"静态sql查询语句
   String sql = "insert into test (name,age) values ("zhangsan",20)";静态sql插
   入语句,(可自己写入delete,update等语句)
2,String sql = "select * from test where name = ?动态sql查询语句
   String sql = "insert into test (name,age) values (?,?)";
   其中的?代表占位符。此语句用于preparedStatement进行sql语句的预编译

5,执行sql语句

1,查询语句的执行

1,静态查询
   Result result = statement.exeuteQuery(sql);
   以上语句执行会得到一个结果集,方便对查询结果的处理。
2,动态查询
   preparedStatement.setString(1,"zhangsan");
   Result result = preparedStatement.exeuteQuery();
   以上语句执行会得到一个结果集,方便对查询结果的处理。

2,动态语句的执行

1,静态增删改
   int count = statement.executeUpdate(sql);
   其中count为每次对数据库正确操作后返回的一个整数。
2,动态增删改
   int count = prepareStatement.executeUpdate();

6,对结果集进行操作

如:while(resultSet.next()){
     String name = resultSet.getString("name");
     String age = resultSet.getString("age");
     System.out.println("name:" + name + ",age:" + age);}

7,关闭资源
   close();各个对象调用方法关闭该资源。

以下为展示代码。

package cn.sxflow.JDBC;
//此为静态查询
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//静态sql语句查询
public class Test01 {
	public static void main(String[] args) {
		try {
			//注册驱动
			com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
			//链接数据库
			Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123123");
			//获取数据库操作对象
			Statement statement = connection.createStatement();
			//执行sql语句,sql语句出现文档中的顺序不受限制
			//该例测试的是查询语句
			String sql = "select * from student";
			//sql - 要发送到数据库的SQL语句,通常为静态SQL SELECT语句 
			//结果:一个ResultSet对象,其中包含给定查询产生的数据; 从不null 
			ResultSet resultSet = statement.executeQuery(sql);
			//对结果集进行处理
			while(resultSet.next()) {
				String name = resultSet.getString("name");
				String age = resultSet.getString("age");
				System.out.println("name:" + name + ",age:" + age);
			}
			resultSet.close();
			statement.close();
			connection.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}

package cn.sxflow.JDBC;
//此为静态插入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test02 {
	public static void main(String[] args) {
		Connection connection = null;
		Statement statement = null;
		ResultSet resultSet = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123123");
			statement = connection.createStatement();
			String sql = "insert into student (name,age) values ('wangwu',30),('zhaoliu',31)";
			//执行给定的SQL语句,这可能是INSERT , UPDATE ,或DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。 
			int executeUpdate = statement.executeUpdate(sql);
			System.out.println(executeUpdate);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(resultSet!=null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (statement!=null) {
				try {
					statement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (connection!=null) {
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

package cn.sxflow.JDBC;
//此为动态插入
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test03 {
	public static void main(String[] args) {
		Connection connection = null;
		PreparedStatement prepareStatement = null;
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//数据库链接
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123123");
			String sql = "insert into student values (?,?)";
			//编译预处理
			prepareStatement = connection.prepareStatement(sql);
			prepareStatement.setString(1, "蜡笔小新");
			prepareStatement.setInt(2, 25);
			int executeUpdate = prepareStatement.executeUpdate();
			System.out.println(executeUpdate);
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			if (prepareStatement != null) {
				try {
					prepareStatement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

关于事务的提交。

值得注意的是,在mysql中有事务一说。
什么是事务?
    即用户定义的一个数据库操作序列。这些操作要么全部执行,要么就是任意一个执行失败后,其他的也全部失效,自动恢复至原样,这种行为被称为回滚。
关于事务的展示代码如下:

package cn.sxflow.JDBC;
//此为事务的手动提交
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test04 {
	public static void main(String[] args) {
		Connection connection = null;
		PreparedStatement statement = null;
		ResultSet resultSet = null;
		String className = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "123456";
		try {
			Class.forName(className);
			connection = DriverManager.getConnection(url, user, password);
			//关闭事务的自动提交
			connection.setAutoCommit(false);
			String sql = "insert into student values(?,?)";
			statement = connection.prepareStatement(sql);
			statement.setString(1, "zhangsan");
			statement.setInt(2, 30);
			int executeUpdate = statement.executeUpdate();
			System.out.println(executeUpdate);
			//手动提交事务
			connection.commit();
		} catch (Exception e) {
			System.out.println("操作失败,请重试!!!");
			try {
				connection.rollback();
			} catch (Exception e2) {
				e2.getMessage();
			}
		} finally {
			if(resultSet!= null) {
				try {
					resultSet.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (statement != null) {
				try {
					statement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42036640/article/details/84065457