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();
}
}
}
}
}