java之JDBC数据库的增删改查

JDBC

1、什么是JDBC?

JDBC是Java Database Connectivity(Java数据库连接),简单来说就是使用Java里面提供的一些类和方法,利于程序连接数据库,进行增删改查操作,这个过程叫做JDBC编程。

2、使用的是数据库MySQL5.7,了解MySQL的一些简单操作

在MySQL命令行里
1、 显示数据库:show datebases;
2、新建数据库:create database web01(数据库名,可自行定义)
3、删除数据库:drop database web01
4、进入某一个数据库:use web01;
5、查看wed01数据库:select database();
6、 建表并把id设置为主键,name,password:create table user(id int primary key auto_increment,username varchar(16),password varchar(16));
7、显示表:show table;
8、删除表:drop database web01;
9、查看表结构:desc user;
10、插入数据:insert into user values(null,‘xinbai’,‘123’);
【说明】:若插入的名字中含有中文,你需要修改表的结构为utf-8
alter table user default character set utf8;
alter table user change username username varchar(16) character set utf8;

11、查询表中的数据: select *from user;
12、删除数据:delete from user;
这里要注意,若要删除会导致表中所有的信息都删除。如果只有删除一个信息,可以使用id(delete from user where id=4;)
13、更新数据:update user set id=4 where username=‘新白’;
在这里插入图片描述
14、修改表的名字:rename table user to user01;

3、异常
异常的描述与处理

4、怎么导入jar包?

步骤:新建一个类为JDBC–>右击–>New–>Folder(然后命名lib)–>导入mysql-connector-java-5.0.7-bin.jar包–>右击lib下的mysql-connector-java-5.0.7-bin.jar加入到Build Path里(或者就是直接在JDBC中直接导入).

5、注册驱动

  try{    
​    //加载MySql的驱动类    
​    Class.forName("com.mysql.jdbc.Driver") ;    
​    }catch(ClassNotFoundException e){    
​    System.out.println("加载驱动失败!");    
​    e.printStackTrace() ;    
​    }  

成功加载后,会将Driver类的实例注册到DriverManager类中

6、创建数据库的连接

要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,
​ 该对象就代表一个数据库的连接,使用DriverManager的getConnectin()方法传入指定的连接的数据库的路径、数据库的用户名和密码来获得。

String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";//调整数据库的编码格式为UTF-8
			String user="root";
			String password="123456"; 
			 Connection con=DriverManager.getConnection(url,user,password);

1、执行静态SQL语句。通常通过Statement实例实现。
​ 2、执行动态SQL语句。通常通过PreparedStatement实例实现。

  Statement stmt = con.createStatement() ;    
​   PreparedStatement pstmt = con.prepareStatement(sql) ; 

7、执行sql语句

Statement  statement=con.createStatement();//1
ResultSet  resultSet=statement.executeQuery("select*from user");//2  这两行代码是像服务器端发起请求的,可以是增删查改

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute(使用executeUpdate(String sql)方法完成数据添加操作,使用executeUpdate(String sql)方法完成数据修改操作,使用executeUpdate(String sql)方法完成数据删除操作)

8、查询

while (resultSet.next()){//在你的那个数据库中查询,直至没有返回false就是退出循环				
System.out.println(resultSet.getInt(1)+","+resultSet.getString(2)+","+resultSet.getString(3));//这个数据库中有id(int)、username(String)、password(String),三个
//System.out.println(resultSet.getInt("id")+","+resultSet.getString("username")+","+resultSet.getString("password"));//这个语句也是可以输出的,和上面的代码输出结果一样
}		

9、处理异常,关闭JDBC对象资源

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
​ 1、先关闭resultSet
​ 2、再关闭statement
​ 3、最后关闭连接对象con

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(con!=null)
				try {
					con.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}

【说明】:在finally关闭资源,无论try-catch中发不发生异常,finally都执行

代码:

package com.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {
	public static void main(String[] args) {
	//selectAll();
		//sql 注入
	//System.out.println(setlectByUsernamePassword("xlinbai", "1232 ' or '1'='1"));
		//上面这个使用了错误的用户名和密码也是返回true,因为加了一个or,永真,所以返回true,这个判断不安全
System.out.println(selectBUP2("xinbai", "1223' or '1'='1"));
System.out.println(selectBUP2("xinbai","123"));
}
	public static void selectAll(){
			Connection con=null;
			Statement statement=null;
			ResultSet resultSet=null;
			try {
				Class.forName("com.mysql.jdbc.Driver");
				String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";
				String user="root";
				String password="123456"; 
				 con=DriverManager.getConnection(url,user,password);
				
				statement=con.createStatement();//1
				resultSet=statement.executeQuery("select*from user");//2  这两行代码是像服务器端发起请求的,可以是增删查改
				//ResultSet resultSet2=statement.execute
				
				
				while (resultSet.next()){
					//System.out.println(resultSet.getInt(1)+","+resultSet.getString(2)+","+resultSet.getString(3));
					System.out.println(resultSet.getInt("id")+","+resultSet.getString("username")+","+resultSet.getString("password"));
				}
			
				} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				System.out.println("加载驱动失败!");
					e.printStackTrace();
			} catch (SQLException 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(con!=null)
					try {
						con.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
	}
 public static boolean setlectByUsernamePassword(String username,String password){
	Connection connection=null;
	  Statement statement=null;
	  ResultSet resultSet=null;
	try {
		Class.forName("com.mysql.jdbc.Driver");
		String url="jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false";
	    connection=DriverManager.getConnection(url,"root","123456"); 
	    
          statement=connection.createStatement();
          String sql="select *from user where username='"+username+"'and password='"+password+"'";
	       resultSet=statement.executeQuery(sql);
	       if (resultSet.next()) {
			return true;
		}
	       else return false;
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		System.out.println("驱动注册失败");
		e.printStackTrace();
	} catch (SQLException 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();
			}
	}
	return false;
}
public static boolean selectBUP2(String username,String password){
  
	Connection  connection=null;
	PreparedStatement pstmt=null;
	  ResultSet resultSet=null;
	  try {  
	Class.forName("com.mysql.jdbc.Driver");
	connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/web01?userUnicode=true&characterEncoding=UTF8&useSSL=false","root","123456");
	String  sql="select *from user where username=?and password=?";
	 pstmt= connection.prepareStatement(sql);
	pstmt.setString(1, username);
	pstmt.setString(2, password);
	 resultSet=pstmt.executeQuery();
	
	if (resultSet.next()) 
		return true;
	else return false;
  } catch (ClassNotFoundException e) {
	// TODO Auto-generated catch block
	  System.out.println("注册驱动失败");
	e.printStackTrace();
} catch (SQLException 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(pstmt!=null)
		try {
			pstmt.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();
		}
		  }
	return false;
}
}

输出结果:
false
true

发布了45 篇原创文章 · 获赞 38 · 访问量 2144

猜你喜欢

转载自blog.csdn.net/qq_44830627/article/details/105091833