Interfaces JDBC comumente usadas e bibliotecas de classes
1.DriverManager: classe de serviço que conduz o driver JDBC
2. Conexão: objeto de conexão de banco de dados
3. Instrução: o objeto para executar sql
4. PreparedStatement: o objeto que executa sql
5. ResultSet: objeto do conjunto de resultados, encapsula os resultados da consulta
Criar não é fácil, se este blog é útil para você, lembre-se de deixar uma mensagem + curtir.
JDBC é uma interface importante para programas Java se conectarem a bancos de dados. É uma ponte importante para a construção de programas e bancos de dados Java. Descreve uma biblioteca padrão para acessar bancos de dados relacionais e fornece uma estrutura de sistema padrão para fornecedores de banco de dados. O JDBC permite que os usuários acessem qualquer forma de dados da tabela, o processo de execução: 1. Conecte-se à fonte de dados 2. Passe as instruções de consulta e atualização para o banco de dados 3. Processe a resposta do banco de dados e retorne o resultado.
Se você não está familiarizado com as instruções SQL comumente usadas, pule aqui primeiro! ! A instrução SQL mais comumente usada na história
Interfaces JDBC comumente usadas e bibliotecas de classes
1.DriverManager: classe de serviço que conduz o driver JDBC
A principal função é registrar o driver e obter o objeto Connection
1. Registre o driver: diga ao programa qual jar do driver de banco de dados usar
//注册与给定的驱动程序 DriverManager
static void registerDriver(Driver driver) ;
//写代码使用
Class.forName("com.mysql.jdbc.Driver");
2. Obtenha a conexão do banco de dados:
方法: Conexão estática getConnection (String url, String usuário, String senha)
parâmetro:
url: especifique o caminho da conexão
usuário: nome de usuário
senha: senha
Sintaxe: jdbc: mysql: // endereço ip (nome de domínio): número da porta / nome do banco de dados, usuário, senha
Detalhes: Se você está se conectando ao servidor mysql nativo, e a porta padrão do serviço mysql é 3306, o url pode ser abreviado como: jdbc: mysql: /// nome do banco de dados
//获取数据库连接对象Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
2. Conexão: objeto de conexão de banco de dados
Cada conexão representa uma sessão de conexão física. Para acessar o banco de dados, você deve primeiro obter uma conexão de banco de dados.
Métodos comuns:
1. Obtenha o objeto para executar sql
Instrução createStatement ()
PreparedStatement prepareStatement (String sql)
2. Assuntos de gestão:
Iniciar transação: setAutoCommit (boolean autoCommit): chame este método para definir o parâmetro como falso, ou seja, iniciar a transação
Confirme a transação: commit ()
Reverter a transação: rollback ()
3. Instrução: o objeto para executar sql
Statemet é uma interface de ferramenta para executar instruções SQL. O objeto pode executar instruções DDL, DCL ou DML. Ao executar consultas SQL, ele retornará o conjunto de resultados da consulta.
Método principal
1. Boolean execute (String sql): Este método pode executar qualquer instrução sql. Apenas entenda
2. int executeUpdate (String sql): executa instruções DML (inserir, atualizar, excluir), instruções DDL (criar, alterar, descartar)
Valor de retorno: o número de linhas afetadas, que pode ser usado para determinar se a instrução DML foi executada com sucesso
Se o valor de retorno for> 0, a execução foi bem-sucedida, caso contrário, falha.
3. ResultSet executeQuery (String sql): execute a instrução DQL (selecionar)
Este método só pode ser usado para executar instruções de consulta e retornar o objeto ResultSet correspondente ao resultado da consulta.
4. PreparedStatement: o objeto que executa sql
PreparedStatement é um objeto Statement pré-compilado. PreparedStatement é uma subinterface de Statement. Ele permite que o banco de dados pré-compile instruções SQL. No futuro, você só precisa alterar os parâmetros do comando SQL para evitar que o banco de dados compile instruções SQL a cada tempo, então o desempenho é melhor. SQL pré-compilado resolve o problema de injeção de SQL SQL pré-compilado: Use? Como um espaço reservado para parâmetros.
Método comum
boolean execute (): executa a instrução SQL neste objeto PreparedStatement, a instrução pode ser qualquer tipo de instrução SQL.
int executeUpdate (): objeto PreparedStatement para executar esta instrução SQL, deve ser uma linguagem de manipulação de dados SQL (DML) instruções, como
INSERT
,UPDATE
ouDELETE
; ou não retorna nenhuma instrução SQL, por exemplo, instruções DDL.ResultSet executeQuery (): executa a consulta SQL neste objeto PreparedStatement e retorna
ResultSet
o objeto gerado pela consulta.
Como PreparedStatement é uma subinterface de Statement, seus métodos comuns são muito consistentes. PreparedStatement é principalmente SQL pré-compilado, que resolve o problema de injeção de SQL e melhora o desempenho.
5. ResultSet: objeto do conjunto de resultados, encapsula os resultados da consulta
ResultSet é um objeto de resultado, que contém métodos de resultados de consulta.O ResultSet pode obter os dados na coluna através do índice ou da classe do nome da coluna.
Método comum
boolean next (): Mova o cursor uma linha para baixo para determinar se a linha atual é o fim da última linha (se há dados), se for, retorna falso, se não, retorna verdadeiro
void beforeFirst (): Posicione o ponteiro do registro do ResultSet na posição inicial antes da primeira linha.
absoluto booleano (linha interna): Mova o ponteiro do registro do conjunto de resultados para a linha da linha.
getXxx (parâmetro): Obter dados
Xxx: representa o tipo de dados, como: int getInt (), String getString ()
parâmetro:
1. int: representa o número da coluna, começando em 1, como: getString (1)
2. String: representa o nome da coluna. Como: getDouble ("balance")
Etapas para usar JDBC
Etapas para compilar SQL estaticamente: instrução de uso
1. Importe o pacote jar do driver mysql-connector-java-5.1.37-bin.jar 1. Copie mysql-connector-java-5.1.37-bin.jar para o diretório libs do projeto 2. Clique com o botão direito -> Adicionar como biblioteca 2. Registre o motorista 3. Obtenha o objeto de conexão do banco de dados Connection 4. Defina sql 5. Obtenha a instrução de objeto que executa a instrução sql 6. Execute sql e aceite o resultado retornado 7. Resultados de processamento 8. Libere recursos |
Compile dinamicamente as etapas SQL: use o objeto PreparedStatement
1. Importe o pacote jar do driver mysql-connector-java-5.1.37-bin.jar 2. Registre o motorista 3. Obtenha o objeto de conexão do banco de dados Connection 4. Defina sql * Nota: Qual é o uso de parâmetros sql? Como um espaço reservado. Tal como: select * from user where username =? And password =?; 5. Obtenha a Conexão de PreparedStatement.prepareStatement (String sql) 6. Dê? Tarefa: * Método: setXxx (parâmetro 1, parâmetro 2) * Parâmetro 1 :? O número da posição começa em 1 * Parâmetro 2 :? Valor de 7. Execute sql e aceite o resultado retornado sem passar a instrução sql 8. Processando resultados 9. Libere recursos |
public static void main(String[]args)throwsException{
//1.导入驱动jar包
//2.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//3.获取数据库连接对象Connection
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db3","root","root");
//4.定义SQL
Stringsql="update emp set salary=8001 WHERE id=1001;";
//5.执行SQL语句对象Statement
Statementstmt=conn.createStatement();
//6.执行SQL,接收返回结果
intcount=stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
}
Exercício de login
Ferramentas JDBC
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
/**
* JDBC工具类
*/
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* 文件的读取,只需要读取一次即可拿到这些值。使用静态代码块
*/
static{
//读取资源文件,获取值。
try {
//1. 创建Properties集合类。
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
//2. 加载文件
pro.load(new FileReader(path));
//3. 获取数据,赋值
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(Statement stmt,Connection conn){
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源
* @param stmt
* @param conn
*/
public static void close(ResultSet rs,Statement stmt, Connection conn){
if( rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if( conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Código de acesso
public class DemoLogin {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号:");
String userName = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
boolean flag = new DemoLogin().login2(userName, password);
if (flag) {
System.out.println("登录成功!");
} else {
System.out.println("账号或密码错误!");
}
}
public boolean login(String name, String password) {
//账号密码正确性校验
if (name == null || password == null) {
return false;
}
Connection conn = null;
Statement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
statement = conn.createStatement();
String sql = "SELECT*FROM login WHERE username='" + name + "'andpassword='" + password + "';";
System.out.println(sql);
resultSet = statement.executeQuery(sql);
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
//使用PreparedStatement传参
public boolean login2(String name, String password) {
//账号密码正确性校验
if (name == null || password == null) {
return false;
}
Connection conn = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
conn = JDBCUtils.getConn();
String sql = "SELECT*FROM login WHERE username=? and password=?;";
//预编译SQL
statement = conn.prepareStatement(sql);
System.out.println(sql);
//给参数赋值
statement.setString(1, name);
statement.setString(2, password);
//执行查询
resultSet = statement.executeQuery();
return resultSet.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
JDBCUtils.close(conn, statement, resultSet);
}
return false;
}
}