javaweb使用jdbc对数据库实现增删改案例

其中包含以下知识点:jdbc,jdbc入门案例,数据库连接池,工具类,Dbutils

1.jdbc: 使用Java语言操作连接数据库

Java 数据库连接,( Java Database Connectivity ,简称 JDBC
JDBC 规范定义接口,具体的实现由各大数据库厂商来实现。
JDBC Java 访问数据库的标准规范,真正怎么操作数据库还需要具体的实现类,也就是数据库驱动。每个
数据库厂商根据自家数据库的通信格式编写好自己数据库的驱动。所以我们只需要会调用 JDBC 接口中的方法即
可,数据库驱动由数据库厂商提供。

2.Jdbc入门案例

步骤:

1. 导入 jar
mysql-connector-java-5.1.13-bin.jar
        jar包根据情况而定
2. 注册驱动
3. 获取连接对象
4. 获取执行 sql 语句的对象
5. 定义 sql 语句
6. 执行 sql
7. 处理结果
8. 释放资源
对应代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 导入 jar mysql-connector-java-5.1.13-bin.jar
// 2. 注册驱动
Class.forName("com.mysql.jdbc.Driver"); //5.5 版本后可以省略
// 3. 获取连接对象 public static Connection getConnection(String url,String user, String
password)
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1",
"root", "123456"); // 端口号是 3306 jdbc:mysql:/// 数据库名
// 4. 获取执行 sql 语句的对象
Statement statement = connection.createStatement();
// 5. 定义 sql
String sql = "INSERT INTO account VALUES(null,'root2','123')";
// 6. 执行 sql
int i = statement.executeUpdate(sql); //sql 可以直接定义在方法上
// 7. 处理结果
if (i>0){
System.out.println(" 插入数据成功 ");
}else {
System.out.println(" 插入数据失败 ");
}
// 8. 释放资源
statement.close();
connection.close();
}
}
jdbc的核心Apl

1.DriverManager类  作用:(1)管理和注册数据库驱动 ;(2)得到数据库连接对象

class DriverManager
public static Connection getConnection (String url ,String user ,String password ) throws
SQLException
url - jdbc:subprotocol:subname 形式的数据库 url
"jdbc:mysql://ip:端口号/数据库名 :"jdbc:mysql://localhost:3306/db1
注意点:
1.连接本地3306端口号的数据库 : jdbc:mysql:///db1
2. 使用jdbc连接数据库,插入数据库时,数据里的数据显示乱码,为 " ??? "
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
user - 数据库用户,连接是为该用户建立的
password - 用户的密码
2.Connection接口 作用:一个连接对象,可用于创建Statement和PreparedStatement对象
接口 : Connection
Statement createStatement() throws SQLException
创建一个 Statement 对象来将 SQL 语句发送到数据库
PreparedStatement prepareStatement (String sql)throws SQLException
创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
3.Statement接口 作用:一个SQL语句对象,用于将SQL语句发送给数据库服务器
int executeUpdate(String sql) throws SQLException
执行给定 SQL 语句,该语句可能为 INSERT、UPDATE 或 DELETE 语句,
ResultSet executeQuery (String sql) throws SQLException
sql 要发送给数据库的 SQL 语句,通常为 静态 SQL SELECT 语句
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
4.PreparedStatement接口 作用:一个SQL语句对象,是Statement的子接口
public interface PreparedStatement extends Statement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
ResultSet executeQuery()
在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
int executeUpdate()
在此 PreparedStatement 对象中执行 SQL 语句INSERT、UPDATE 或 DELETE 语句;
void setXXX(int parameterIndex, XXX x)
XXX数据类型
parameterInde
PreparedStatement 中设置参数的方法
描述
void setDouble(int parameterIndex, double x)
将指定参数设置为给定 Java double 值。
void setFloat(int parameterIndex, float x)
将指定参数设置为给定 Java REAL 值。
void setInt(int parameterIndex, int x)
将指定参数设置为给定 Java int 值。
void setLong(int parameterIndex, long x)
将指定参数设置为给定 Java long 值。
void setObject(int parameterIndex, Object x)
使用给定对象设置指定参数的值。
void setString(int parameterIndex, String x)
将指定参数设置为给定 Java String 值。
5.ResultSet接口 作用:用于封装数据库查询结果集,返回给客户端Java程序
表示数据库结果集的数据表
boolean next () throws SQLException
如果新的当前行有效,则返回 true;如果不存在下一行,则返回 false
XXX getXXX(int columnIndex)
xxx:数据类型
columnIndex - 第一个列是 1,第二个列是 2,……
XXX getXXX (String columnLabel)
xxx:数据类型
columnLabel - 列名称
关于 ResultSet 接口中的注意事项:
1) 如果光标在第一行之前,使用 rs.getXX()获取列值,报错:Before start of result set
2) 如果光标在最后一行之后,使用 rs.getXX()获取列值,报错:After end of result set
3) 使用完毕以后要关闭结果集 ResultSet,再关闭 Statement,再关闭 Connection
常用数据类型转换表
SQL 类型                 Jdbc *对应方法                         返回类型
BIT(1) bit(n)             getBoolean()                            boolean
TINYINT                   getByte()                                   byte
SMALLINT               getShort()                                 short
INT                           getInt()                                       int
BIGINT                    getLong()                                   long
CHAR,VARCHAR   getString()                                 String
Text(Clob) Blob      getClob getBlob()                     Clob Blob
DATE                       getDate()                                    java.sql.Date 只代表日期
TIME                        getTime()                                   java.sql.Time 只表示时间
TIMESTAMP            getTimestamp()                        java.sql.Timestamp 同时有日期和时间

案例

登录(查询)

import java.sql.*;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 请输入用户名 ");
String name = sc.next();
System.out.println(" 请输入密码 ");
String pwd = sc.next();
boolean b = login(name, pwd);
if (b){
System.out.println(" 登录成功 ");
}else {
System.out.println(" 登录失败 ");
}
}
private static boolean login(String name,String pwd) throws SQLException {
// 3. 获取连接对象
Connection connection = DriverManager.getConnection("jdbc:mysql:///db1", "root",
"123456");
// 4. 定义 sql
String sql = "SELECT * from account WHERE name= ? and pwd= ?";
// 5. 获取执行 sql 语句的对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数值
preparedStatement.setString(1,name);
preparedStatement.setString(2,pwd);
// 6. 执行 sql
ResultSet resultSet = preparedStatement.executeQuery();
// 7. 处理结果
boolean b = resultSet.next();
// 8. 释放资源
resultSet.close();
preparedStatement.close();
connection.close();
return b;
}
}
插入数据
package com.dd;
import java.sql.Connection; 删除数据
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Test7 {
public static void main(String[] args) throws Exception {
// 3. 获取连接对象
Connection connection = DriverManager.getConnection("jdbc:mysql:///db1", "root",
"123456");
// 4. 定义 sql
String sql = "INSERT INTO account values(null,?,?)";
// 5. 获取执行 sql 语句的对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 设置参数值
preparedStatement.setString(1," 大数据 1 ");
preparedStatement.setString(2,"123456");
// 6. 执行 sql
int i = preparedStatement.executeUpdate();
// 7. 处理结果
if (i>0){
System.out.println(" 成功 ");
}else {
System.out.println(" 失败 ");
}
// 8. 释放资源
preparedStatement.close();
connection.close();
}
}
删除数据
package com.dd;
import com.dd.utils.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Test9 {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement statement = null;
try {
// 1. 获取连接对象
connection = JdbcUtil.getConnection();
// 2. 定义 sql
String sql = "DELETE FROM account WHERE id=?";
// 3. 获取执行 sql 对象
statement = connection.prepareStatement(sql); 修改数据
// 4. 设置参数
statement.setInt(1, 20);
// 5. 执行 sql
int i = statement.executeUpdate();
// 6. 处理结果
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7. 释放资源
JdbcUtil.close(connection, statement);
}
}
}
修改数据
package com.dd;
import com.dd.utils.JdbcUtil;
import com.sun.org.apache.xml.internal.resolver.readers.ExtendedXMLCatalogReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class Test10 {
public static void main(String[] args) throws Exception {
// 1. 获取连接对象
Connection connection = JdbcUtil.getConnection();
// 2. 定义 sql
String sql = "UPDATE account set name=? WHERE id =?";
// 3. 获取执行 sql 对象
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 设置参数
statement.setString(1," 张三 ");
statement.setInt(2,1);
// 5. 执行 sql
int i = statement.executeUpdate();
// 6. 处理结果
System.out.println(i);
// 7. 释放资源
JdbcUtil.close(connection,statement);
}
}
模糊查询
package com.dd;
import com.dd.utils.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println(" 请输入查询条件 ");
String iname = sc.next();
// findByName(iname);
findByName2(iname);
}
private static void findByName(String name) throws SQLException {
name = "%" + name + "%";
// 1. 获取连接对象
Connection connection = JdbcUtil.getConnection();
// 2. 定义 sql
String sql = "SELECT * from account where name like ?";
// 3. 获取执行 sql 语句的对象
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 设置参数
statement.setString(1, name);
// 5. 发送 sql
ResultSet resultSet = statement.executeQuery();
// 6. 处理返回的结果
while (resultSet.next()) {
String name2 = resultSet.getString("name");
System.out.println(" 姓名是 " + name2);
}
// 7. 释放资源
JdbcUtil.close(connection, statement, resultSet);
}
private static void findByName2(String name) throws SQLException {
// 1. 获取连接对象
Connection connection = JdbcUtil.getConnection();
// 2. 定义 sql
String sql = "SELECT * from account where name like CONCAT('%',?,'%')";
// 3. 获取执行 sql 语句的对象
PreparedStatement statement = connection.prepareStatement(sql);
// 4. 设置参数
statement.setString(1, name);
// 5. 发送 sql
ResultSet resultSet = statement.executeQuery();
// 6. 处理返回的结果
while (resultSet.next()) {
String name2 = resultSet.getString("name");
System.out.println(" 姓名是 " + name2);
}
// 7. 释放资源
JdbcUtil.close(connection, statement, resultSet);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值