java连接mysql数据库(JDBC),存到二维数组里并输出

java连接mysql数据库都有固定的操作,步骤如下

  1. 加载mysql驱动,一般都是com.mysql.jdbc.Driver。
  2. 提供JDBC连接的URL。
    1. 创建数据库的连接。要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象。

  3. 创建一个Statement。
    1. 要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:   
    2.       1)执行静态SQL语句。通常通过Statement实例实现。   
    3.       2)执行动态SQL语句。通常通过PreparedStatement实例实现(常用)。   
    4.       3)执行数据库存储过程。通常通过CallableStatement实例实现。 
      1. 具体实现方式:   
      2.        Statement stmt = con.createStatement() ;   
      3.        PreparedStatement pstmt = con.prepareStatement(sql) ;   
      4.        CallableStatement cstmt =  con.prepareCall("{CALL demoSp(? , ?)}") ;   
    1. 执行SQL语句   

    1.     Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute   。
    2.       1)ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。   
    3.       2)int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等   
    4.       3)execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。   
    5. 具体实现方式:   
    6.       ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
    7.      int rows = stmt.executeUpdate("INSERT INTO ...") ;   
    8.      boolean flag = stmt.execute(String sql) ;
    1. 处理结果   

    1.     有两种情况:   
    2.      1)执行更新返回的是本次操作影响到的记录数。   
    3.      2)执行查询返回的结果是一个ResultSet对象。   
    4.     • ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。   
    5.     • 使用结果集(ResultSet)对象的访问方法获取数据:   
    6.      while(rs.next()){   
    7.          String name = rs.getString("name") ;   
    8.          String psw = rs.getString(1) ; // 此方法比较高效   
    9.      }   
    10.     (列是从左到右编号的,并且从列1开始)
    1. 关闭JDBC对象    

    1.      操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:   
    2.      1)关闭记录集   
    3.      2)关闭声明   
    4.      3)关闭连接对象  
        1. 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() ;   }   }  

      请注意,如果仅仅是创建一个数据库连接的话,步骤4、5、6不是必要的。所以,如果你是初学者,只需要用前面的步骤测试数据库是否连接成功即可,不要做过多的操作,那样你就能发现其实JDBC连接数据库的方法其实并不难。但是,当你操作完数据库,请你记住关闭左右连接对象,释放资源,这不仅是个好习惯,还能在你处理较大的数据量是避免不必要的麻烦。

     下面给出一个例子,从mysql中取出数据并存到二维数组里,数据用的是机器学习中的鸢尾花iris数据在机器学习数据集获取官方网站UCI中点击打开链接),代码如下

DBConnection.java

package db;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;/*** * 数据库连接类,通用* * @author lsy* */
public class DBConnection {public static final String driver = "com.mysql.jdbc.Driver";// 驱动public static final String url = "jdbc:mysql://localhost:3306/mydb";// mysql固定的URL:jdbc:mysql://localhost:3306/数据库名(我这里是mydb)public static final String user = "root";// 我的数据库的用户名public static final String pwd = "123";// 我的数据库密码public static Connection dBConnection() {Connection con = null;try {// 加载mysql驱动器Class.forName(driver);// 建立数据库连接con = DriverManager.getConnection(url, user, pwd);} catch (ClassNotFoundException e) {System.out.println("加载驱动器失败");e.printStackTrace();} catch (SQLException e) {System.out.println("注册驱动器失败");e.printStackTrace();}return con;}
}

SelectData.java

package dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import db.DBConnection;/*** * 取出数据,存到二维数组里* * @return flowers* @author lsy*/
public class SelectData {public static final String SELECT = "select* from iris_PCA";public static final int k = 4;// 4个属性public double[][] getFlowers() throws SQLException {Connection con = DBConnection.dBConnection();ResultSet rs;// 创建结果集PreparedStatement pstmt = con.prepareStatement(SELECT);// 创建一个PreparedStatement对象rs = pstmt.executeQuery();// 为初始化数组的大小提供方便int sample = 0;while (rs.next()) {sample++;}double[][] flower = new double[sample][k];rs = pstmt.executeQuery();// 特别重要,否则取到的全是0。因为执行上面的while(rs.next())后,ResultSet对象的下标已指到0。// API:当生成ResultSet对象的Statement对象关闭、重新执行或用来从多个结果的序列获取下一个结果时,ResultSet对象将自动关闭。for (int i = 0; rs.next(); i++) {for (int j = 0; j < k; j++) {flower[i][j] = rs.getDouble(j + 2);}}// 输出二维数组System.out.println("花花: ");for (int i = 0; i < flower.length; i++) {for (int j = 0; j < flower[0].length; j++) {System.out.print(flower[i][j] + "\t");}System.out.println();}pstmt.close();rs.close();con.close();return flower;}public static void main(String[] args) {try {SelectData selectData = new SelectData();selectData.getFlowers();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}


输出结果:

花花: 
5.1	3.5	1.4	0.2	
4.9	3.0	1.4	0.2	
4.7	3.2	1.3	0.2	
4.6	3.1	1.5	0.2	
5.0	3.6	1.4	0.2	
5.4	3.9	1.7	0.4	
4.6	3.4	1.4	0.3	
5.0	3.4	1.5	0.2	
4.4	2.9	1.4	0.2	
4.9	3.1	1.5	0.1	
5.4	3.7	1.5	0.2	
4.8	3.4	1.6	0.2	
4.8	3.0	1.4	0.1	
4.3	3.0	1.1	0.1	
5.8	4.0	1.2	0.2	
5.7	4.4	1.5	0.4	
5.4	3.9	1.3	0.4	
5.1	3.5	1.4	0.3	
5.7	3.8	1.7	0.3	
5.1	3.8	1.5	0.3	
5.4	3.4	1.7	0.2	
5.1	3.7	1.5	0.4	
4.6	3.6	1.0	0.2	
5.1	3.3	1.7	0.5	
4.8	3.4	1.9	0.2	
5.0	3.0	1.6	0.2	
5.0	3.4	1.6	0.4	
5.2	3.5	1.5	0.2	
5.2	3.4	1.4	0.2	
4.7	3.2	1.6	0.2	
4.8	3.1	1.6	0.2	
5.4	3.4	1.5	0.4	
5.2	4.1	1.5	0.1	
5.5	4.2	1.4	0.2	
4.9	3.1	1.5	0.1	
5.0	3.2	1.2	0.2	
5.5	3.5	1.3	0.2	
4.9	3.1	1.5	0.1	
4.4	3.0	1.3	0.2	
5.1	3.4	1.5	0.2	
5.0	3.5	1.3	0.3	
4.5	2.3	1.3	0.3	
4.4	3.2	1.3	0.2	
5.0	3.5	1.6	0.6	
5.1	3.8	1.9	0.4	
4.8	3.0	1.4	0.3	
5.1	3.8	1.6	0.2	
4.6	3.2	1.4	0.2	
5.3	3.7	1.5	0.2	
5.0	3.3	1.4	0.2	
7.0	3.2	4.7	1.4	
6.4	3.2	4.5	1.5	
6.9	3.1	4.9	1.5	
5.5	2.3	4.0	1.3	
6.5	2.8	4.6	1.5	
5.7	2.8	4.5	1.3	
6.3	3.3	4.7	1.6	
4.9	2.4	3.3	1.0	
6.6	2.9	4.6	1.3	
5.2	2.7	3.9	1.4	
5.0	2.0	3.5	1.0	
5.9	3.0	4.2	1.5	
6.0	2.2	4.0	1.0	
6.1	2.9	4.7	1.4	
5.6	2.9	3.6	1.3	
6.7	3.1	4.4	1.4	
5.6	3.0	4.5	1.5	
5.8	2.7	4.1	1.0	
6.2	2.2	4.5	1.5	
5.6	2.5	3.9	1.1	
5.9	3.2	4.8	1.8	
6.1	2.8	4.0	1.3	
6.3	2.5	4.9	1.5	
6.1	2.8	4.7	1.2	
6.4	2.9	4.3	1.3	
6.6	3.0	4.4	1.4	
6.8	2.8	4.8	1.4	
6.7	3.0	5.0	1.7	
6.0	2.9	4.5	1.5	
5.7	2.6	3.5	1.0	
5.5	2.4	3.8	1.1	
5.5	2.4	3.7	1.0	
5.8	2.7	3.9	1.2	
6.0	2.7	5.1	1.6	
5.4	3.0	4.5	1.5	
6.0	3.4	4.5	1.6	
6.7	3.1	4.7	1.5	
6.3	2.3	4.4	1.3	
5.6	3.0	4.1	1.3	
5.5	2.5	4.0	1.3	
5.5	2.6	4.4	1.2	
6.1	3.0	4.6	1.4	
5.8	2.6	4.0	1.2	
5.0	2.3	3.3	1.0	
5.6	2.7	4.2	1.3	
5.7	3.0	4.2	1.2	
5.7	2.9	4.2	1.3	
6.2	2.9	4.3	1.3	
5.1	2.5	3.0	1.1	
5.7	2.8	4.1	1.3	
6.3	3.3	6.0	2.5	
5.8	2.7	5.1	1.9	
7.1	3.0	5.9	2.1	
6.3	2.9	5.6	1.8	
6.5	3.0	5.8	2.2	
7.6	3.0	6.6	2.1	
4.9	2.5	4.5	1.7	
7.3	2.9	6.3	1.8	
6.7	2.5	5.8	1.8	
7.2	3.6	6.1	2.5	
6.5	3.2	5.1	2.0	
6.4	2.7	5.3	1.9	
6.8	3.0	5.5	2.1	
5.7	2.5	5.0	2.0	
5.8	2.8	5.1	2.4	
6.4	3.2	5.3	2.3	
6.5	3.0	5.5	1.8	
7.7	3.8	6.7	2.2	
7.7	2.6	6.9	2.3	
6.0	2.2	5.0	1.5	
6.9	3.2	5.7	2.3	
5.6	2.8	4.9	2.0	
7.7	2.8	6.7	2.0	
6.3	2.7	4.9	1.8	
6.7	3.3	5.7	2.1	
7.2	3.2	6.0	1.8	
6.2	2.8	4.8	1.8	
6.1	3.0	4.9	1.8	
6.4	2.8	5.6	2.1	
7.2	3.0	5.8	1.6	
7.4	2.8	6.1	1.9	
7.9	3.8	6.4	2.0	
6.4	2.8	5.6	2.2	
6.3	2.8	5.1	1.5	
6.1	2.6	5.6	1.4	
7.7	3.0	6.1	2.3	
6.3	3.4	5.6	2.4	
6.4	3.1	5.5	1.8	
6.0	3.0	4.8	1.8	
6.9	3.1	5.4	2.1	
6.7	3.1	5.6	2.4	
6.9	3.1	5.1	2.3	
5.8	2.7	5.1	1.9	
6.8	3.2	5.9	2.3	
6.7	3.3	5.7	2.5	
6.7	3.0	5.2	2.3	
6.3	2.5	5.0	1.9	
6.5	3.0	5.2	2.0	
6.2	3.4	5.4	2.3	
5.9	3.0	5.1	1.8	


写博经验尚浅,欢迎各位多多指教。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保驾护航金三银四,万字解析!

从事前端开发工作差不多3年了&#xff0c;自己也从一个什么都不懂的小白积累了一定的理论和实践经验&#xff0c;并且自己也对这3年来的学习实践历程有一个梳理&#xff0c;以供后面来细细回忆品味。 1、为什么选择学习前端开发&#xff1f; 你可能是因为兴趣&#xff0c;完成…

数据降维技术——PCA(主成分分析)

为什么要对数据进行降维&#xff1f; 在机器学习或者数据挖掘中&#xff0c;我们往往会get到大量的数据源&#xff0c;这些数据源往往有很多维度来表示它的属性&#xff0c;但是我们在实际处理中只需要其中的几个主要的属性&#xff0c;而其他的属性或被当成噪声处理掉。比如&a…

保驾护航金三银四,使用指南

前言 作为一个程序员&#xff0c;当然总是期望自己的代码能「一次编写&#xff0c;四处运行」&#xff0c;但真实经验往往是「一处修改&#xff0c;百处填坑」&#xff0c;依赖落后了好几个版本了想要升级、老代码已经看着很不爽了打算重构&#xff0c;都需要下坚决的决心&…

社交网络初探——链路预测

社交网络可以用来描述现实社会中的实际网络&#xff0c;它包括人与人之间的社会关系&#xff0c;物种之间的捕食关系&#xff0c;科学研究中的合作关系等。大量研究已经表明在真实世界中各种不同社交网络具有许多共同的结构特征&#xff0c;例如小世界性质、无标度性、社团结构…

保驾护航金三银四,内容太过真实

前言 正式学习前端大概 3 年多了&#xff0c;接触前端大概 4 年了&#xff0c;很早就想整理这个书单了&#xff0c;因为常常会有朋友问&#xff0c;前端该如何学习&#xff0c;学习前端该看哪些书&#xff0c;我就讲讲我学习的道路中看的一些书&#xff0c;虽然整理的书不多&a…

决策树——ID3和C4.5

决策树&#xff08;decision tree&#xff09;是一个树结构&#xff08;可以是二叉树或非二叉树&#xff09;。其每个非叶节点表示一个特征属性上的测试&#xff0c;每个分支代表这个特征属性在某个值域上的输出&#xff0c;而每个叶节点存放一个类别。使用决策树进行决策的过程…

保驾护航金三银四,分分钟搞定!

开头 Web前端开发基础知识学习路线分享&#xff0c;前端开发入门学习三大基础&#xff1a;HTML、CSS、JavaScript。除此之外还要学习数据可视化、Vue、React、Angular相关框架&#xff0c;熟练运用框架提升开发效率&#xff0c;提升稳定性。 [外链图片转存失败,源站可能有防盗…

数组的初始化及输出

二维数组可以不初始化列数&#xff08;第二维&#xff09;。 下面给出的例子是用两种不同的方式存储二维数组并输出&#xff1a; 1. 这是我们通俗易懂的二维数组存储方法&#xff1a; String[][] data new String[][] {{ "youth", "high", "no&quo…

保驾护航金三银四,吐血整理

前言 又逢金三银四&#xff0c;拿到大厂的offer一直是程序员朋友的一个目标&#xff0c;我是如何拿到大厂offer的呢&#xff0c;今天给大家分享我拿到大厂offer的利器&#xff0c;前端核心知识面试宝典&#xff0c;内容囊括Html、CSS、Javascript、Vue、HTTP、浏览器面试题\数…

Ajax知识笔记——入门,同步和异步,XHR

Ajax全称&#xff1a;Asynchronous Javascript and XML &#xff0c;异步的javascript和XML。 Ajax不是一种语言&#xff0c;是一种无需重新加载整个网页的情况下&#xff0c;能更新部分网页的技术。&#xff08;与后台交互&#xff0c;实现局部更新&#xff0c;异步更新&…

保驾护航金三银四,含BATJM大厂

前言 跳槽&#xff0c;这在 IT 互联网圈是非常普遍的&#xff0c;也是让自己升职加薪&#xff0c;走上人生巅峰的重要方式。那么作为一个普通的Android程序猿&#xff0c;我们如何才能斩获大厂offer 呢&#xff1f; 疫情向好、面试在即&#xff0c;还在迷茫踌躇中的后浪们&…

保驾护航金三银四,妈妈再也不用担心我找工作了!

01 前言 2021是不平凡的一年&#xff0c;这一年里发生许多事情&#xff0c;大家也都知道。对于互联网行业来说也是一次重大的打击&#xff0c;也有一些企业在这次疫情中倒闭了&#xff0c;所以可能对于今年2021年毕业的同学来说是一次很大的考验&#xff0c;也关乎我们的前途。…

web开发者工具,118页Vue面试题总结,涨姿势!

逻辑运算符 JavaScript中有三个逻辑运算符&#xff0c;&&与、||或、!非。 JavaScript 中的逻辑运算符可用来确定变量或者是值之间的逻辑关系。通常用于布尔型值&#xff0c;会返回一个布尔值true 或 false。而 &&、|| 运算符能够使用非布尔值的操作数&#x…

2G、3G 和 4G

2G、3G 和 4G 区别形象比喻 版本1&#xff1a; 2G 看小说&#xff1b; 3G 看app、微博、新闻……&#xff1b; 4G 看苍井空、松岛枫…… 版本2&#xff1a; 2G 看「女教师.txt」 3G 看「女教师.jpg」 4G 看「女教师.avi」 版本3&#xff1a; 选自&#xff1a;365知识网 2G:打个…

web开发者工具,261页前端面试题宝典,通用流行框架大全

开头 Web前端开发基础知识学习路线分享&#xff0c;前端开发入门学习三大基础&#xff1a;HTML、CSS、JavaScript。除此之外还要学习数据可视化、Vue、React、Angular相关框架&#xff0c;熟练运用框架提升开发效率&#xff0c;提升稳定性。 [外链图片转存失败,源站可能有防盗…

jsp+js实现二级级联

本文实现学院-专业二级级联&#xff0c;同理可用到省份-城市&#xff0c;洲-国家等级联&#xff0c;即通过不同的首选择&#xff0c;自动找到属于第一选择的二次可选项。 test.jsp <% page language"java" contentType"text/html; charsetgb2312" impor…

web开发者工具,你必须知道的CSS盒模型,架构师必备!

前言 不要为了面试而去背题&#xff0c;匆匆忙忙的&#xff0c;不仅学不进去&#xff0c;背完了几天后马上会忘记。 你可能会说&#xff0c;“没办法&#xff0c;这不是为了能找份工作嘛&#xff01;”。我想说的是&#xff0c;“那你没开始找工作的时候&#xff0c;咋不好好…

web开发要学多久,HTML表格标签,薪资翻倍

前言 作为一个程序员&#xff0c;当然总是期望自己的代码能「一次编写&#xff0c;四处运行」&#xff0c;但真实经验往往是「一处修改&#xff0c;百处填坑」&#xff0c;依赖落后了好几个版本了想要升级、老代码已经看着很不爽了打算重构&#xff0c;都需要下坚决的决心&…

js含有特定文字不能跳转

<html> <head> <script type"text/javascript"> function checkUpload() { for(var i0;i<document.files.filename.length;i){ if(document.files.filename[i].value"未选择文件"){alert("请检查要上传的文件是否全部添加!"…

web开发课程培训,10大前端常用算法,学习路线+知识点梳理

标签语义化&#xff1a; 语义和默认样式的区别&#xff1a; 默认样式是浏览器设定的一些常用tag的表现形式&#xff1b;语义化的主要目的就是让大家直观的认识标签和属性的用途和作用&#xff1b; 标签语义化作用&#xff1a; 当只有HTML页面时&#xff0c;没有CSS&#xf…