JDBC数据库

news/2024/5/19 0:49:26 标签: java, mysql, jdbc

建立数据库连接:

对数据库进行连接操作:
DB.java文件
需要设置的参数:
1、启动数据库驱动:该驱动就是下载的数据库jar包中的Drive类的路径
2、连接路径:要连接的数据库的路径
jdbc:使用的数据库://localhost:数据库使用的端口号/连接的数据库名
例:jdbc:mysql://localhost:3306/Person
使用mysql数据库,数据库端口号为3306,连接的数据库名为Person
3、数据库用户名:设置的连接的用户名
4、数据库连接密码:设置的连接的密码
5、设置获取连接的对象
6、预编译对象
7、用于获取结果集的对象
以下参数写在类变量的定义区域

java">private static String driver = "com.mysql.cj.jdbc.Driver"; //数据库驱动类路径
private static String url = "jdbc:mysql://localhost:3306/Persn";  //连接的数据库路径
private static String user = "root";   //连接用户名
private static String pwd = "root";    //连接密码
private static Connection conn = null; //连接

启动对数据库的连接操作:
1、执行驱动
2、获取连接,填入数据库连接路径,用户名,密码

java">public static void main(String[] args) {
        try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url,user,pwd);
                System.out.println("数据库连接成功");
            } catch (ClassNotFoundException e) {
                System.out.println("找不到驱动!");
                e.printStackTrace();
            } catch (SQLException e) {
                System.out.println("数据库连接失败!请检查url,user,pwd");
                e.printStackTrace();
        }
    }

在这里插入图片描述
异常:
Access denied for user ‘xxxx’@‘localhost’ (using password: YES):表示用户名或连接密码错误。
Unknown database ‘xxxx’:表示所连接的数据库不存在

增删改查

在进行以下操作时,我对DB.java该文件进行了部分改动:

java">import java.sql.*;

public class DB {
    private static String driver = "com.mysql.cj.jdbc.Driver"; //数据库驱动类路径
    private static String url = "jdbc:mysql://localhost:3306/Person";  //连接的数据库路径
    private static String user = "root";   //连接用户名
    private static String pwd = "root";    //连接密码
    private static Connection conn = null; //连接
    DB(){
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,user,pwd);
            System.out.println("数据库连接成功");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("数据库连接失败!请检查url,user,pwd");
            e.printStackTrace();
        }
    }

    public static void setDriver(String driver) {
        DB.driver = driver;
    }

    public static void setUrl(String url) {
        DB.url = url;
    }

    public static void setUser(String user) {
        DB.user = user;
    }

    public static void setPwd(String pwd) {
        DB.pwd = pwd;
    }

    public static void setConn(Connection conn) {
        DB.conn = conn;
    }

    public static String getDriver() {
        return driver;
    }

    public static String getUrl() {
        return url;
    }

    public static String getUser() {
        return user;
    }

    public static String getPwd() {
        return pwd;
    }

    public static Connection getConn() {
        return conn;
    }
}

将以上代码复制入Dao.java文件中即可使用。
新建一个类:Dao.java,存储对数据库的增删改查操作
属性:

java">private static String sql; //设置的预编译语句格式
private static PreparedStatement pstmt = null;	//使用预编译语句
private static ResultSet rs = null; //获取的结果集
private static DB db = null;    //连接数据库

Dao.java类构造函数:

java">    Dao(){
        db = new DB();	//建立对数据库的连接
    }

检查

检查结果集是否为空

java">    private Boolean checkRsNul(ResultSet rs){
        try {
            if (rs == null || !rs.next()){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

java">public Boolean add(Person p){
        sql = "SELECT * FROM DATA WHERE IDENTITY = ?";	//查询数据库中是否已经存在相同主键的数据
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,p.getIdentity());
            rs = pstmt.executeQuery();
            if(!checkRsNul(rs)){	//若存在则不执行新增操作
                System.out.println("新增数据的主键在数据库中已存在");
                return false;
            }
            sql = "INSERT INTO DATA VALUES(?,?,?)"; //新增数据库的预编译格式
            pstmt = db.getConn().prepareStatement(sql);	//检查预编译格式
            //将应写入的值替换占位符
            pstmt.setString(1,p.getIdentity());
            pstmt.setString(2,p.getName());
            pstmt.setString(3,p.getSex());
            //判断新增语句是否成功执行,成功执行该语句的返回值应该为1
            if(pstmt.executeUpdate() == 0){
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

java">public Boolean del(String Identity){
        sql = "SELECT * FROM DATA WHERE identity = ?";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,Identity);
            rs = pstmt.executeQuery();
            if (checkRsNul(rs)){	//检查结果集是否为空,若为空则不执行删除操作,返回false
                return false;
            }
            sql = "DELETE FROM DATA WHERE identity = ?";
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,Identity);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

java">public Boolean update(String oldIdentity,String newIdentity){
        sql = "SELECT * FROM DATA WHERE IDENTITY = ?";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,oldIdentity);
            rs = pstmt.executeQuery();
            if(checkRsNul(rs)){
                System.out.println("指定修改数据不存在");
                return false;
            }
            pstmt.setString(1,newIdentity);
            rs = pstmt.executeQuery();
            if(!checkRsNul(rs)){
                System.out.println("需要修改的主键数据已存在");
                return false;
            }
            sql = "UPDATE DATA SET IDENTITY= ? WHERE IDENTITY= ?";
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,newIdentity);
            pstmt.setString(2,oldIdentity);
            if (pstmt.executeUpdate() == 0){
                System.out.println("更新失败!");
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

该方法用于从数据库中获得所需要的数据

java">public ArrayList<Person> getAll(){
        sql = "SELECT * FROM DATA";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            rs = pstmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return getByRs(rs);
    }

该方法用于将数据库中获取的结果取出

java"> private ArrayList<Person> getByRs(ResultSet rs){
        ArrayList<Person> arrP = new ArrayList();
        try {
            if(checkRsNul(rs)){
                return null;
            }
            do{
                Person p = new Person();
                p.setIdentity(rs.getString("identity"));
                p.setName(rs.getString("name"));
                p.setSex(rs.getString("sex"));
                arrP.add(p);
            }while (rs.next());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return arrP;
    }

测试类

DBTest.java:对已写完的数据库操作类进行测试
增:

java">public static void main(String[] args) {
        Dao d = new Dao();
        Person p = new Person("555555555555555555","eee","男");  //增
        if(d.add(p)){
            System.out.println("新增数据操作成功!");
        }else {
            System.out.println("新增数据操作失败!");
        }
    }

在这里插入图片描述
删:

java">public static void main(String[] args) {
        Dao d = new Dao();
        if(d.del("555555555555555555")){
            System.out.println("删除操作执行成功");
        }else{
            System.out.println("删除操作执行失败");
        }
    }

在这里插入图片描述
改:

java">public static void main(String[] args) {
    Dao d = new Dao();
    if(d.update("555555555555555555","666666666666666666")){
        System.out.println("更新操作执行成功");
    }else{
        System.out.println("更新操作执行失败");
    }
}

在这里插入图片描述
查:

java">public static void main(String[] args) {
        Dao d = new Dao();
        ArrayList<Person> arrP = d.getAll();
        for (Person person : arrP) {
            System.out.println(person);
        }
    }

在这里插入图片描述

异常

You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near…:Sql语句中存在错误,检查。
Duplicate entry ‘xxx’ for key ‘PRIMARY’:被修改的数据与数据库中的某个数据的主键冲突了。
Parameter index out of range (2 > number of parameters, which is 1):执行的预编译语句与传入的参数不相等。检查预编译操作是否有重新执行。

完整代码集合

Dao.java:

java">import com.sun.org.apache.regexp.internal.RE;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class Dao {
    private static String sql; //设置的预编译语句格式
    private static PreparedStatement pstmt = null;	//使用预编译语句
    private static ResultSet rs = null; //获取的结果集
    private static DB db = null;    //连接数据库
    Dao(){
        db = new DB();
    }

    public Boolean add(Person p){
        sql = "SELECT * FROM DATA WHERE IDENTITY = ?";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,p.getIdentity());
            rs = pstmt.executeQuery();
            if(!checkRsNul(rs)){
                System.out.println("新增数据的主键在数据库中已存在");
                return false;
            }
            sql = "INSERT INTO DATA VALUES(?,?,?)"; //设置的预编译语句格式
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,p.getIdentity());
            pstmt.setString(2,p.getName());
            pstmt.setString(3,p.getSex());
            if(pstmt.executeUpdate() == 0){
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

    public Boolean del(String Identity){
        sql = "SELECT * FROM DATA WHERE identity = ?";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,Identity);
            rs = pstmt.executeQuery();
            if (checkRsNul(rs)){
                return false;
            }
            sql = "DELETE FROM DATA WHERE identity = ?";
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,Identity);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

    public Boolean update(String oldIdentity,String newIdentity){
        sql = "SELECT * FROM DATA WHERE IDENTITY = ?";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,oldIdentity);
            rs = pstmt.executeQuery();
            if(checkRsNul(rs)){
                System.out.println("指定修改数据不存在");
                return false;
            }
            pstmt.setString(1,newIdentity);
            rs = pstmt.executeQuery();
            if(!checkRsNul(rs)){
                System.out.println("需要修改的主键数据已存在");
                return false;
            }
            sql = "UPDATE DATA SET IDENTITY= ? WHERE IDENTITY= ?";
            pstmt = db.getConn().prepareStatement(sql);
            pstmt.setString(1,newIdentity);
            pstmt.setString(2,oldIdentity);
            if (pstmt.executeUpdate() == 0){
                System.out.println("更新失败!");
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return true;
    }

    public ArrayList<Person> getAll(){
        sql = "SELECT * FROM DATA";
        try {
            pstmt = db.getConn().prepareStatement(sql);
            rs = pstmt.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return getByRs(rs);
    }

    private ArrayList<Person> getByRs(ResultSet rs){
        ArrayList<Person> arrP = new ArrayList();
        try {
            if(checkRsNul(rs)){
                return null;
            }
            do{
                Person p = new Person();
                p.setIdentity(rs.getString("identity"));
                p.setName(rs.getString("name"));
                p.setSex(rs.getString("sex"));
                arrP.add(p);
            }while (rs.next());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return arrP;
    }

    private Boolean checkRsNul(ResultSet rs){
        try {
            if (rs == null || !rs.next()){
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
}

DB.java

java">import java.sql.*;

public class DB {
    private static String driver = "com.mysql.cj.jdbc.Driver"; //数据库驱动类路径
    private static String url = "jdbc:mysql://localhost:3306/Person";  //连接的数据库路径
    private static String user = "root";   //连接用户名
    private static String pwd = "root";    //连接密码
    private static Connection conn = null; //连接
    DB(){
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,user,pwd);
            System.out.println("数据库连接成功");
        } catch (ClassNotFoundException e) {
            System.out.println("找不到驱动!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("数据库连接失败!请检查url,user,pwd");
            e.printStackTrace();
        }
    }

    public static void setDriver(String driver) {
        DB.driver = driver;
    }

    public static void setUrl(String url) {
        DB.url = url;
    }

    public static void setUser(String user) {
        DB.user = user;
    }

    public static void setPwd(String pwd) {
        DB.pwd = pwd;
    }

    public static void setConn(Connection conn) {
        DB.conn = conn;
    }

    public static String getDriver() {
        return driver;
    }

    public static String getUrl() {
        return url;
    }

    public static String getUser() {
        return user;
    }

    public static String getPwd() {
        return pwd;
    }

    public static Connection getConn() {
        return conn;
    }
}

DBTest:

java">import java.util.ArrayList;

public class DBTest {
    public static void main(String[] args) {
        Dao d = new Dao();
        //增
        /*
		Person p = new Person("555555555555555555","eee","男");  //增
        if(d.add(p)){
            System.out.println("新增数据操作成功!");
        }else {
            System.out.println("新增数据操作失败!");
        }
		*/
        //删
        /*
	   if(d.del("555555555555555555")){
            System.out.println("删除操作执行成功");
        }else{
            System.out.println("删除操作执行失败");
        }
		*/
       	//改
        /*
        if(d.update("555555555555555555","666666666666666666")){
            System.out.println("更新操作执行成功");
        }else{
            System.out.println("更新操作执行失败");
        }
        */
        //查
        /*
		ArrayList<Person> arrP = d.getAll();
        for (Person person : arrP) {
            System.out.println(person);
        }
		*/
    }
}

在进行测试时,要注意数据库中值的改变!
Person:

java">public class Person {
    private String identity;
    private String name;
    private String sex;

    public Person(String identity, String name, String sex) {
        this.identity = identity;
        this.name = name;
        this.sex = sex;
    }

    public Person() {
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getIdentity() {
        return identity;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "identity='" + identity + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}


http://www.niftyadmin.cn/n/937226.html

相关文章

ffmpeg h264+ts +(sdl)显示方式

网友&#xff1a;明月惊鹊(357161826) 2014-1-16 10:07:00ffmpeg sdl一米阳光(740053660) 2014-1-16 10:08:29Simple DirectMedia Layer一米阳光(740053660) 2014-1-16 10:10:16SDL窗口不可控 々海上山冰々(494980719) 2014-1-16 10:29:44之前同事在WINDOWS上用SDL&#xff0c…

log4net使用流程

前面大致介绍了一下log4net的概述和结构。既然都清楚了&#xff0c;下面我来介绍一下如何使用log4net. 使用流程 1.这里所说的使用流程就是使用log4net.dll,首先要根据你的平台来找出对应的版本的log4net.dll 2.然后对log4net对进行配置&#xff0c;一些参数的配置&#xff0c;…

sql server 分区表的一些操作

2019独角兽企业重金招聘Python工程师标准>>> use fenqutest -------------------- -- 准备分区用的文件组、文件、分区函数、分区方案 --添加文件分组 ALTER DATABASE fenqutest ADD FILEGROUP [test2010] ALTER DATABASE fenqutest ADD FILEGROUP [test2011] ALTER…

IDEA提示不兼容类型,找不到合适的方法

这个问题出现在当你使用Eclipse完成代码编写后&#xff0c;在idea中编译项目时可能会出现改错误。 解决方法&#xff1a; File→settings→Build&#xff0c;Execution&#xff0c;Deploymet→Compiler→java Compiler 将Use compiler中的javac改为Eclipse问题即可解决。

Grails示例程序-用代码实现将文件压缩后下载

2019独角兽企业重金招聘Python工程师标准>>> 这个示例程序只有一个页面&#xff0c;显示下载链接&#xff0c;点链接后可以下载一个zip包&#xff0c;这个zip包中包含两个文件。 下面是提供下载页面的controller和view 下载页面SampleZipController.groovy <!-- …

【2013Esri全球用户大会精彩看点】Jack为您全面解读“GIS-Transforming Our World”

GIS正影响着最尖端的科学与技术&#xff0c;正改变着我们的世界。 1、 GIS的带来的改变不只是物质世界的&#xff0c;还有观念方面。 当今世界面临各种挑战&#xff0c;我们要创造更美好的未来&#xff0c;需要智能的GIS。GIS改变了我们思考和行动的方式&#xff0c;改变了…

IDEA: java.lang.IllegalArgumentException: release version 15 is not supported

这个是因为我们使用的JDK版本太高导致项目不能运行&#xff0c;降低JDK版本即可运行 File→Project Settings→Project 在这里我改成了jdk1.8版本。 程序就能跑起来了。