JDBC连接数据库及其执行操作

摘要:
作者:Alvin函数:数据库连接和实现添加、删除、修改和查询时间:2019年3月4日08:33参考文章:https://www.2cto.com/database/201805/743741.html1、总结数据库加载分为以下步骤。第一步是加载类。驱动mysql的forName(“com.mysql.jdb.Driver”);Oracle加载方法Class。forName(“oracle

作者:Alvin
功能:数据库连接与实现增删改查
时间:2019年3月4日08点33分
参考文章:https://www.2cto.com/database/201805/743741.html

一、总结

数据库加载分为以下几个步骤

第一步、加载驱动

MySQL的加载方式
Class.forName("com.mysql.jdbc.Driver");
Oracle的加载方式
Class.forName("oracle.jdbc.driver.OracleDriver");
SQLServer
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

第二步、创建连接

1、分开写形式如下

String url = "jdbc:mysql://127.0.0.1:3306/要连接的数据库表名";
String username = "root";
String password = "root";
Connection con = DriverManager.getConnection(url,username,password);

2、单独写成形式如下

Connection con=DriverManage.getConnection(url,username,password);

Connection con=DriverManage.getConnection("jdbc:mysql://127.0.0.1:3306/要连接的数据库表名",username,password);

3、设置连接时编码方式useUnicode=true&characterEncoding=UTF-8,如

String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8";
con = DriverManager.getConnection(URL);

4、确认是否连接成功

//如果连接成功打印con不为空
System.out.println(con);  

第三步、创建语句执行对象

Statement stmt=con.createStatement();  

第四步、得到数据库执行操作结果

一般情况下有如下几个执行类型

1、增加数据

int modifyLinesAdd = stmt.executeUpdate(sql1);//将返回被增加的行数

2、删除数据

int modifyLinesDelete=stmt.executUpdate("delete from 表名 where 条件");//将返回发生修改的条数  

3、修改数据

int modifyLinesSwitch=stmt.executeUpdate();//将返回发生修改的行数

4、查询操作

ResultSet rs=stmt.executQuery("select from 表名");//执行查询,返回的时Set集合

所以再只有再进行数据库查询的时候使用executeQuery()方法,再增、删、改的时候执行的都是executeUpdate()方法
还可以向数据库中添加文件下面以图片为例(因为时添加操作所以仍然使用的时executeUpdate()方法)
添加图片数据源码

File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg"); //添加图片的路径
ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)"
+ " VALUES (,,,,);"); 
ps.setInt(1, numbefore+1); 
ps.setString(2, "兰陵王"); 
ps.setString(3,"男");
ps.setInt(4,500); 
fis = new FileInputStream(image); 
ps.setBinaryStream(5, (InputStream) fis, (int) (image.length())); 
//检查是否添加成功
int s = ps.executeUpdate(); 
if (s > 0) { 
System.out.println("Uploaded successfully !"); 
} else { 
System.out.println("unsucessfull to upload image."); 
} 

查询操作案例

ResultSet rs.stmt.executeQuery("select from student");
//处理执行后的结果rs
rs.next()用于判断下一项是否存在,如果存在,将返回true
while(rs.next()){

int id=rs.getInt("id");//得到id这一列的数据
String name=rs.getString("names");//得到姓名
String gender=rs.getString("gender");//得到性别
int age=rs.getAge("age");//得到年龄 
}

第五步、执行完毕数据库的操作必须依次关闭打开的所有连接

//关闭rs
rs.close();
//关闭stmt
stmt.close();
//关闭con
con.close();
二、完整案例源码
//数据库类源码如下
public class DataBase {
 
    public static void main(String[] args) {
        int numbefore = 0;
        Connection con = null;//链接接口
        Statement stmt = null;//发送SQL语句接口
        ResultSet rs = null;//返回结果集接口
        PreparedStatement ps = null;
        FileInputStream fis;  
        try {
            //加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            //连接方法一
            /*String url = "jdbc:mysql://127.0.0.1:3306/students";//127.0.0.1可以改成localhost,表示本地主机。
            String username = "root";
            String password = "root";
            con = DriverManager.getConnection(url,username,password);*/
             
            //连接方法二,useUnicode=true&characterEncoding=UTF-8是设置编码方式
            String URL ="jdbc:mysql://127.0.0.1:3306/studentsuser=root&password=123&useUnicode=true&characterEncoding=UTF-8";
            con = DriverManager.getConnection(URL);
             
            //如果连接成功打印con不为空
            System.out.println(con);
            stmt = con.createStatement();
            //con.close();
             
            //查询数据库中表的值,并且打印出来
            rs = stmt.executeQuery("select * from  students_1");
            while(rs.next()) { //next()方法控制行数,一行一行读出返回结果集,直到null
                int id = rs.getInt("id");//获取id这一列的数据
                String name = rs.getString(2);//获取第二列数据
                String sex = rs.getString("sex");
                int age = rs.getInt("age");
                System.out.println("编号="+id+",姓名="+name+",性别="+sex+",年龄="+age);
                //计算表中数据的行数
                numbefore = numbefore + 1;
            }
             
            //打印出操作数据前的行数
            System.out.println("操作前数据为"+numbefore+"行");
             
            //添加图片数据
             File image = new File("C:/Users/lyp/Pictures/桌面背景/1.jpg");  //添加图片的路径
             ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`,`icon`)"
                    + " VALUES (,,,,);");  
                     ps.setInt(1, numbefore+1);  
                 ps.setString(2, "兰陵王"); 
                 ps.setString(3,"男");
                 ps.setInt(4,500);  
                     fis = new FileInputStream(image);  
                     ps.setBinaryStream(5, (InputStream) fis, (int) (image.length()));  
                     //检查是否添加成功
                     int s = ps.executeUpdate();  
                     if (s > 0) {  
                        System.out.println("Uploaded successfully !");  
                     } else {  
                        System.out.println("unsucessfull to upload image.");  
                     }  
             
            //添加一行数据
            //使用SQL语句:INSERT INTO `students`.`students_1` (`id`, `name`, `sex`, `age`) VALUES ('1','小七', '女', '10'); 添加数据
            /*String sql1 = "INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES ('1','小七', '女', '10');";
            int result1 = stmt.executeUpdate(sql1);
            System.out.println("有"+result1+"行记录被修改");*/
             
            //动态添加一行数据
            /*ps = con.prepareStatement("INSERT INTO `students`.`students_1` (`id`,`name`, `sex`, `age`) VALUES (,'小七', '女', '10');");
            ps.setInt(1, numbefore+1);
            int result_x = ps.executeUpdate();
            System.out.println("有"+result_x+"行记录被修改");*/
         
            //修改一个数据
            //使用SQL语句:UPDATE `students`.`students_1` SET `name` = '康纳' WHERE `age` = 12 AND `sex` = '男':修改age=12和sex=男的数据的name为康纳
            String sql2 = "UPDATE `students`.`students_1` SET  `name` = '康纳' WHERE `id`= '4' AND `age` = '12' AND `sex` = '男'; ";
            int result2 = stmt.executeUpdate(sql2);
            System.out.println("有"+result2+"行记录被修改");
             
            //删除一行数据
            //使用SQL语句:DELETE FROM `students`.`students_1` WHERE `id` = '5' ; 删除id=5的一行
            /*String sql3 = "DELETE FROM `students`.`students_1` WHERE `id` = '8' ; ";
            int result3 = stmt.executeUpdate(sql3);
            System.out.println("有"+result3+"行记录被修改");*/
                         
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }finally {//依次关闭数据库接口
            if(rs!=null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
            if(stmt!=null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
            if(con!=null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }
            }
        }
 
    }
 
}

免责声明:文章转载自《JDBC连接数据库及其执行操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL数据库接口的VC实现与应用Python操作远程机器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java课程设计--学生成绩管理系统

1.团队介绍: 班级 成员 学号 任务分配 网络1912 罗咚琳(组长) 201921123033 登录,界面设计, 最终总结 网络1912 林浈 201921123034 数据库导入,班级成绩管理查找删除,包规划 网络1912 赵禹琛 201921123037 数据库连接,学生成绩管理查找删除 2.项目简介: 3.本项目的功能流程...

初试Code First(附Demo)

初试Code First(附Demo) 写在前面 新建项目 安装EntityFramework程序包 创建模型 创建上下文DbContext 创建数据库、读/写数据 配置连接字符串 Code First 迁移 示例Demo下载 后记 以前逛园子的时候,很多大牛写的一些东西,什么AOP、DDD之类的,看过之后一头雾水,远望大牛,回过头看看自己,原来程序员...

ionic2中使用自定义图标

在ionic2中使用自定义图标,如iconfont(阿里巴巴矢量图标)。 先在http://www.iconfont.cn/ 中找到自己需要的图标,然后将图标加入购物车,然后下载该图标。 下载完成后解压,打开文件demo_unicode.html可以看到它提供的使用方法,我们在ionic2中按照以下方法使用: 1、在项目的assets目录下新建fonts...

ADO.NET 新特性之SqlBulkCopy

数据库webservice代码分析server.net存储 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便。而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据。数据源可以来自关系数据库或者XML文件...

python之(25)中级总结(3)关系型数据库(mysql和oracle使用)

1、Python MySQL - mysql-connector 驱动 1、安装mysql驱动 python -m pip install mysql-connector 2、测试驱动 import mysql.connector 3、代码实现 1、基本操作 import mysql.connector conn=mysql.connector.conne...

SpringBoot整合升级Spring Security 报错 【The request was rejected because the URL was not normalized】

前言 最近LZ给项目框架升级, 从Spring1.x升级到Spring2.x, 在这里就不多赘述两个版本之间的区别以及升级的原因。 关于升级过程中踩的坑,在其他博文中会做比较详细的记录,以便给读者参考,不要掉进同样的坑里。 这里我们讨论一个关于URL中包含双斜杠被拦截的问题。 发现问题 升级框架之后,测试一个功能时,发现报错Http 500, 第一时间怀疑...