1.封装代码(java连接mysql)
1.完整代码,返回Connection
import java.sql.*;
public class JDBC {
private static final String driver="com.mysql.cj.jdbc.Driver";
private static final String url="jdbc:mysql://localhost:3306/data?useUnicode=true&useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
private static final String username="root";
private static final String password="aass2580";
//获得连接对象的方法
public static Connection getConnection(){
try {
//加载数据库驱动
Class.forName(driver);
System.out.println("驱动加载成功");
//连接数据库获得连接对象
System.out.println("数据库连接成功");
return DriverManager.getConnection(url,username,password);
} catch (SQLException | ClassNotFoundException throwables) {
System.out.println("数据库连接失败");
throwables.printStackTrace();
}
return null;
}
//释放资源的方法
public static void close(Connection conn, Statement statement, ResultSet result){
try {
if (result != null) {
result.close();
result=null;
}
if (statement != null) {
statement.close();
statement=null;
}
if (conn != null) {
conn.close();
conn=null;
}
}catch (SQLException e){
e.printStackTrace();
}
}
}
2.对代码进行解析
private static final String driver="com.mysql.cj.jdbc.Driver";
Class.forName(driver);
这一句为加载驱动,我们首先要下载jar包,然后调用jar中的驱动
private static final String url="jdbc:mysql://localhost:3306/data?useUnicode=true&useSSL=false&serverTimezone=UTC&characterEncoding=utf-8";
private static final String username="root";
private static final String password="aass2580";
DriverManager.getConnection(url,username,password);
username为用户名
passwoed为密码
url构造:jdbc(方式):(方式)mysql:(数据库)//localhost:3306(端口号)/data(要连接的数据库名)
3.了解url
用于标识数据库的位置
jdbc为连接方法, java开发的时候,数据库连接方式除了jdbc,,jndi,,还有JDBC-ODBC桥的方式、、JDBC+厂商Database Connection Server+DataBase的形式和纯JDBC+DATABASE的连接方式。
2)mysql为需要连接的数据库, 数据库的类型有许多,Oracle数据库, SQLServer数据库,DB2数据库
3)localhost:3306 IP地址+端口号,localhost为本地主机。也可以写127.0.0.1(回送地址)
4)data 为需要连接的数据库的名称
4.了解JDBC
JDBC(Java Data Base Connectivity)(java 数据库连接),官方解释它是java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,从根本上来说是一种规范,它提供的接口可以便携式访问底层数据库。
我们需要导入jar包,其他的开发者可以将自己编写的代码打包为jar包,我们只需要导入这个jar包作为依赖,即可直接使用别人的代码,就向我们直接使用jdk提供的类一样。
5.了解DriverManager
获得数据库的连接
管理和注册我们的数据库驱动
DriverManager.getConnection(url,name,password)静态方法,用于连接对应的数据库
加载成功之后会返回connect对象。
2.对MySQL语句的操作
1.statement与preparedStatement概念
1.概念
PreparedStatement是用来执行SQL查询语句的API之一
Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句
- Statement 用于通用查询,
- PreparedStatement 用于执行参数化查询,
- CallableStatement则是用于存储过程。
2.了解statement
使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.了解preparedStatement
PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。
数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。
2.对statement与preparedStatement进行分析
1.使用statement
使用范围:当执行相似SQL(结构相同,具体值不同)语句的次数比较少
优点:语法简单
缺点:采用硬编码效率低,安全性较差。
原理:硬编码,每次执行时相似SQL都会进行编译
2.使用preparedStatement
使用范围:当执行相似sql语句的次数比较多(例如用户登陆,对表频繁操作…)语句一样,只是具体的值不一样,被称为动态SQL
优点:语句只编译一次,减少编译次数。提高了安全性(阻止了SQL注入)
缺点: 执行非相似SQL语句时,速度较慢。
原理:相似SQL只编译一次,减少编译次数
4.拿到结果集result , 了解ResultSet
1)调用Statement 对象的executeQuery(sql) 可以得到结果集.
2)调用preparedStatementStatement 对象的executeQuery() 可以得到结果集
ResultSet 返回的实际上就是一张数据表 . 有一个指针指向数据表的第一行的前面. 可以调用next()方法检测下一行是否有效,若有效该方法放回true,且指针下移。
当指针对位到一行时,可以通过调用getXxx(index)或getXxx(columnName)获取每一列的值. 例如:getInt(1),getString(“name”)
ResultSet 也需要关闭.
我们需要循环对表进行遍历
例如
while (result.next()){
int type=result.getInt("type");
}
4.对数据库进行操作
1.sql语句的预处理
private static final String SQL_USER_INSERT = "INSERT INTO stu_information VALUES(?,?,?,?)";
private static final String SQL_USER_DELETE = "DELETE FROM stu_information WHERE id=? AND name=?";
private static final String SQL_USER_SELECT = "SELECT * FROM stu_information WHERE id=? AND name=?";
private static final String SQL_USER_UPDATE = "UPDATE stu_information SET age=? , class=? WHERE id=? AND name=?";
- INSERT INTO stu_information VALUES(?,?,?,?) 向stu_information表中添加元素
- DELETE FROM stu_information WHERE id=? AND name=? 通过id和name进行查找并进行删除
- SELECT * FROM stu_information WHERE id=? AND name=? 通过id和name进行查找
- UPDATE stu_information SET age=? , class=? WHERE id=? AND name=? 通过id和name进行查找并对age和class进行修改。
2.增加
public boolean insert(int id, String name, int age, String classes) {
//连接数据库,创建连接对象conn
PreparedStatement preparedStatement=null;
ResultSet result=null;
Connection conn= JDBC.getConnection();
try{
//创建预编译环境
preparedStatement=conn.prepareStatement(SQL_USER_INSERT);
//设置sql语句中的参数 1是第一个问号,2是第二个问号
preparedStatement.setInt(1,id);
preparedStatement.setString(2,name);
preparedStatement.setInt(3,age);
preparedStatement.setString(4,classes);
//执行sql语句
int line=preparedStatement.executeUpdate();
if(line>0){
return true;
}
}catch (SQLException e){
e.printStackTrace();
}finally {
JDBC.close(conn,preparedStatement,result);
}
return false;
}
3.删除
public boolean delete(int id, String name) {
//连接数据库,创建连接对象conn
PreparedStatement preparedStatement=null;
ResultSet result=null;
Connection conn= JDBC.getConnection();
try{
//创建预编译环境
preparedStatement=conn.prepareStatement(SQL_USER_DELETE);
//设置sql语句中的参数 1是第一个问号,2是第二个问号
preparedStatement.setInt(1,id);
preparedStatement.setString(2,name);
//执行sql语句
int line=preparedStatement.executeUpdate();
if(line>0){
return true;
}
}catch (SQLException e){
e.printStackTrace();
}finally {
JDBC.close(conn,preparedStatement,result);
}
return false;
}
4.查找
public boolean select(int id, String name) {
//连接数据库,创建连接对象conn
PreparedStatement preparedStatement=null;
ResultSet result=null;
Connection conn= JDBC.getConnection();
try{
//创建预编译环境
preparedStatement=conn.prepareStatement(SQL_USER_SELECT);
//设置sql语句中的参数 1是第一个问号,2是第二个问号
preparedStatement.setInt(1,id);
preparedStatement.setString(2,name);
//执行sql语句 Query ,得到结果集对象result
result=preparedStatement.executeQuery();
while (result.next()){
return true;
}
}catch (SQLException e){
e.printStackTrace();
}finally {
JDBC.close(conn,preparedStatement,result);
}
return false;
}
5.修改
public boolean update(int id, String name, int age, String classes) {
//连接数据库,创建连接对象conn
PreparedStatement preparedStatement=null;
ResultSet result=null;
Connection conn=null;
conn= JDBC.getConnection();
try{
preparedStatement=conn.prepareStatement(SQL_USER_UPDATE);
//设置sql语句中的参数 1是第一个问号,2是第二个问号
preparedStatement.setInt(1,age);
preparedStatement.setString(2,classes);
preparedStatement.setInt(3,id);
preparedStatement.setString(4,name);
//执行sql语句
int line=preparedStatement.executeUpdate();
if(line>0){
return true;
}
}catch (SQLException e){
e.printStackTrace();
}finally {
JDBC.close(conn,preparedStatement,result);
}
return false;
}
3.MySQL主要语句
1.查看整表 user为表名
SELECT * FROM user
2.根据条件进行查找 where后面为条件 返回的是整行
SELECT * FROM `user` WHERE uname='admin' AND upass='admin'
3.返回一行中一个属性的值 type为一个属性
SELECT type FROM user WHERE uname='admin' AND upass='admin'
4.向表中添加一个学生 VALUES后跟的是添加的内容
INSERT INTO user VALUES(id,"zs","zs",2)
5.从表中删除一个学生信息
DELETE FROM user WHERE uname='zs'
6.修改表中的属性 没有from直接表名 set后面为修改内容
UPDATE user SET upass='mc' WHERE uname='mc'