常见连接数据库工具:

  1. 图形化工具:点击、拖拽就可以操作数据库,对用户友好,简单对数据操作,复杂数据库操作爱莫能助
  2. JDBC(驱动程序):调用jar包接口
  3. 窗口(命令行):输入完整SQL语句对复杂数据库查询

JDBC:在java中就是jar包,应用通过JDBC提供的统一接口就可以实现对不同数据库(ORACLE、Mysql)的使用,让我们不需要了解他们之间的差异与具体操作。

Connection对象:代表java应用程序对后端数据库的一条物理链接,基于链接执行sql语句

Statement stmt=conn.createStatement();

Statement对象:是sql的容器,通过executeQuery承载sql语句,进行增删改查,返回ResultSet对象/int。

ResultSet rs=stmt.executeQuery("select name from student");

ResultSet对象:代表查询的结果

获取行:

  .next():向后移动一行

  .previous():向前移动一行

  .absolute():直接移动到某一行

获取列:

  .getString(ColumnName/Index)

  .getInt(ColumnName/Index)

  .getObject(ColumnName/Index)

package com.tao.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin"; public static void main(String[] args) throws ClassNotFoundException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
stmt = conn.createStatement();
rs = stmt.executeQuery("select name from student");
// 获取执行结果
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
//释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

JDBC进阶:java程序运行在JVM中,JVM也有内存。

1.查询结果条目过多,防止内存溢出,一次载入较少记录。

游标:提供一种客户端读取部分结果集的机制,分批读取。

  1.在DB_URL中设置useCursorFetch=true开启游标

   2.使用setFetchSize()设置每次读多少

package com.tao.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin"; public static void main(String[] args) throws ClassNotFoundException {
Connection conn = null;
PreparedStatement ptmt=null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
ptmt = conn.prepareStatement("select name from student");
ptmt.setFetchSize(1);//每次读取一条记录
rs=ptmt.executeQuery();
// 获取执行结果
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
//释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (ptmt != null) {
ptmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

2.一行存储大字段内容,比如存储博文,怎么读取?

  1.流方式读取,按区间读取

package com.tao.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin";
static final String FILE_URL = "./text.txt"; public static void main(String[] args) throws ClassNotFoundException,
IOException {
Connection conn = null;
PreparedStatement ptmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
ptmt = conn.prepareStatement("select name from student");
ptmt.setFetchSize(1);// 每次读取一条记录
rs = ptmt.executeQuery();
// 获取执行结果
while (rs.next()) {
InputStream in = rs.getBinaryStream("name");
File f = new File(FILE_URL);
FileOutputStream out = new FileOutputStream(f);
int temp = 0;
while ((temp = in.read()) != -1)
out.write(temp);
out.close();
in.close();
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
// 释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (ptmt != null) {
ptmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

 3.一次插入多条数据

  1.批处理Statement

    addBatch()     //将sql打包为Batch

    executeBatch()   //执行sql

    clearBatch()     //清空Batch

package com.tao.test;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin";
static final String FILE_URL = "./text.txt";
static final String[] users = {"张三","李四"}; public static void main(String[] args) throws ClassNotFoundException,
IOException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
stmt=conn.createStatement();
for(String user:users)
{
stmt.addBatch("insert into student(name) values('"+user+"')");
}
stmt.executeBatch();
stmt.clearBatch();
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
// 释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

4.中文问题

  数据库: 实例、dabase、表、字段 级别内置编码(优先级从小到大)

  JDBC编码:DB_URL+characterEncoding=utf-8

JDBC基础知识的更多相关文章

  1. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  2. JDBC 基础知识总结

    1.  何谓JDBC  --- Java Database Connectivity. 由Sun 公司提供的访问数据库的一组java类和接口,用来对数据库进行链接.发送SQL语句.处理返回结果,为开发 ...

  3. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  4. Java JDBC 基础知识

    一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...

  5. Java JDBC的基础知识(五)

    本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...

  6. JDBC基础教程

    本文实例讲述了JDBC基础知识与技巧.分享给大家供大家参考.具体分析如下: 1.什么是JDBC? 通俗来讲JDBC技术就是通过java程序来发送SQL语句到数据库,数据库收到SQL语句后执行,把结果返 ...

  7. Java JDBC的基础知识(三)

    在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...

  8. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  9. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  10. maven基础知识

    1.maven基础知识 1.1maven坐标 maven坐标通常用冒号作为分割符来书写,像这样的格式:groupId:artifactId:packaging:version.项目包含了junit3. ...

随机推荐

  1. 小tips:微信小程序登录后返回登录前的页面继续操作(保留参数)

    在app.js中添加如下两个方法即可: // 设置需要回调的地址 setCallbackUrl: function(mode) { return new Promise((resolve,reject ...

  2. 知识增强深度学习及其应用:综述《Knowledge-augmented Deep Learning and Its Applications: A Survey》(下)

    论文:Knowledge-augmented Deep Learning and Its Applications: A Survey GitHub: arXiv上的论文. (接着来) 4 用经验知识 ...

  3. 参与 2023 第一季度官方 Flutter 开发者调查

    Flutter 3.7 已经正式发布,每个季度一次的 Flutter 开发者调查也如约而至,邀请社区的各位成员们填写! 调查表链接: https://flutter.cn/urls/2023q1wx ...

  4. MySQL 切换 Oracle 问题整理

    MySQL 通常小写,Oracle 默认大写 ,查询过程中需加双引号,或者直接将MySQL 字段转换成大写 Springboot 配置 oracle连接 spring: datasource: url ...

  5. 《你必须掌握的Entity Framework 6.x与Core 2.0》代码下载

      https://item.jd.com/12376014.html<你必须掌握的Entity Framework 6.x与Core 2.0>代码下载,共享代码: https://git ...

  6. 使用 Ant-Design-Vue 制作一个带图片上传功能的表单对话框

    功能需求 使用 Antdv 的 Modal 组件内嵌一个 a-form 表单,具有添加数据和图片的功能. 页面结构设计 <template> <!--Modal--> < ...

  7. .net6 中 Blazor PageTitle 设置无效的解决方法

    直接在 razor 页面里添加 <PageTitle>xxx</PageTitle> 标签无效时的解决方法 For using the <PageTitle> ta ...

  8. Android libusb

    一.环境:配置NDK环境 1.下载libusb源码: https://github.com/libusb/libusb/releases,如下图所示 2.删除一些和Android平台无关的文件,删除后 ...

  9. threejs 浏览器窗口resize变化 自适应 html 全屏

    全屏:画布全屏和body页面全屏: // 导入 threejs import * as THREE from "three"; import { OrbitControls } f ...

  10. 在实例化对象的时候new关键字具体做了哪些操作?

    a 创建了一个空对象 {}b 通过原型链把空对象和构造函数连接起来__proto__ = prototype c 构造函数的this指向新对象,并执行函数体 d 判断构造函数的返回值,返回对象就使用该 ...