Java JDBC基础学习小结
JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
1、JDBC相关类和API
JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
- Driver接口
Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。
- DriverManager类
DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:
DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序
DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象
- Connection接口
Connection代表与数据库的连接,其中定义了一系列的方法:
Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象
Connection.createStatement(); // 创建一个Statement对象
Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象
Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
- Statement接口
Statement接口用于向数据库发送SQL语句。
Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取
Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目
Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象
- ResultSet接口
ResultSet.next(); // 将游标由当前位置移动到下一行
ResultSet.getString(String columnName); // 获取指定字段的String类型值
ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
ResuleSet.previous(); // 将游标由当前位置移动到上一行
2、程序示例
数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为:
表中原有数据
JDBC连接MySQL程序示例
package server; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; public class DemoJDBC {
public static void main(String[] args) throws Exception {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver"); // 通过DriverManager获取数据库连接
String url = "jdbc:mysql://192.168.1.150/test";
String user = "teamtalk";
String password = "123456";
Connection connection = (Connection) DriverManager.getConnection(
url, user, password); // 通过Connection对象获取Statement对象、Statement执行SQL语句
Statement statement = (Statement) connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from persion"); // 操作ResultSet结果集
while (resultSet.next()) {
// 第一种获取字段方式
System.out.println(resultSet.getString(1) + " " +
resultSet.getString(2) + " " + resultSet.getString(3));
System.out.print("---- ");
// 第二种获取字段方式
System.out.println(resultSet.getString("id") + " " +
resultSet.getString("name") + " " + resultSet.getString("age"));
} int ret = statement.executeUpdate("insert persion (name, age) value ('bobo', 24)");
if (ret > 0) {
System.out.println(" insert ok");
resultSet = statement.executeQuery("select * from persion"); while (resultSet.next()) {
System.out.println(resultSet.getString(1) + " " +
resultSet.getString(2) + " " + resultSet.getString(3));
}
} // 关闭数据库连接
resultSet.close();
statement.close();
connection.close();
}
}
程序运行结果为:
数据表中数据
JDBC使用PreparedStatement进行数据插入操作程序示例
package server; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement; import com.mysql.jdbc.PreparedStatement; public class DemoJDBC {
public static void main(String[] args) throws Exception {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver"); // 通过DriverManager获取数据库连接
String url = "jdbc:mysql://192.168.1.150/test";
String user = "teamtalk";
String password = "123456";
Connection connection = (Connection) DriverManager.getConnection(
url, user, password); PreparedStatement statement = (PreparedStatement) connection.prepareStatement(
"insert persion (name, age) value (?, ?)");
statement.setString(1, "hdu");
statement.setInt(2, 21);
statement.executeUpdate(); ResultSet resultSet = statement.executeQuery("select * from persion");
// 操作ResultSet结果集
while (resultSet.next()) {
// 第一种获取字段方式
System.out.println(resultSet.getString(1) + " " +
resultSet.getString(2) + " " + resultSet.getString(3));
} // 关闭数据库连接
resultSet.close();
statement.close();
connection.close();
}
}
程序输出为:
数据库中数据为:
3、小结
当程序远程访问mysql时,不能使用root账号和密码登录,这样是为了mysql的安全考虑,可以先新建一个mysql账号用来测试。
如果远程MySQL主机是Centos7的话,需要展暂时关闭防火墙,使用命令 systemctl stop firewalld.service。
JDBC是一套操作数据库的接口,相当于数据库的抽象层,我们可以通过它来操作常用的数据库,进行SQL操作。当我们写程序时,对于一个表(user),可以新建其对应的类(User),其提供各种get/set方法;然后新建一个数据库操作工具类(JDBCUtils),其提供与数据库建立连接、关闭连接方法;最后新建一个对表的操作类(UserDao),其封装了对表User的添加、删除、查询和更新等操作。
Java JDBC基础学习小结的更多相关文章
- Java【基础学习】之暴力求素数【用数组返回】
Java[基础学习]之暴力求素数[用数组返回] */ import java.util.*; public class Main{ public static void main(String[] a ...
- Java JDBC 数据库链接小结随笔
Java JDBC 数据库链接小结随笔 一.链接数据库的步骤 二.关于Statement 和 PrepareStatement 两者区别 用法 三.关于 ResultSet 的一些小结 四.自定义 ...
- Java之基础学习(数据类型、运算符、分支语句和循环语句)
在工作用得比较多的是shell和python编程,对于java以前也学习过,使用很少,这次借朋友推荐的java视频教程来温习下. 也是因为现在很多开源测试工具使用java编写的,学习一下更有助于测试工 ...
- JDBC基础学习(六)—数据库连接池
一.数据库连接池介绍 1.数据库连接池的缘由 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什 ...
- java反射机制学习小结
之前一直对java的反射机制理解得很模糊,今天因为学习spring,所以花了些时间总算把它理顺了,记录一下 另外,推荐读读这篇文章,写的挺好的http://blog.csdn.net/woshixuy ...
- Java入门基础学习,成为一个Java程序员的必备知识
引言 众所周知,Java是一种面向对象的编程语言.您可以在Windows操作系统上编写Java源代码,而在Linux操作系统上运行编译后的字节码,而无需修改源代码. 数据类型 Java 有 2 种数据 ...
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- mysql的jdbc入门学习小结
转自:专注JavaWeb开发 http://www.javaweb1024.com/data/MySQL/2015/04/25/618.html 一.jdbc基本概念jdbc : Java Datab ...
- JDBC基础学习(五)—批处理插入数据
一.批处理介绍 当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率. JDBC的批量处理语句包括下 ...
随机推荐
- PHP+MYSQL网站SQL Injection攻防
程序员们写代码的时候讲究TDD(测试驱动开发):在实现一个功能前,会先写一个测试用例,然后再编写代码使之运行通过.其实当黑客SQL Injection时,同样是一个TDD的过程:他们会先尝试着让程序报 ...
- GJM : 游戏程序员的学习之路
原文作者:miloyip 原帖地址:http://gad.qq.com/article/detail/7180681 原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 腾讯前端技术总监 ...
- phpstorm 软件
PhpStorm是一款强大的IDE,非常适合于PHP开发人员及前端工程师.提供诸于:智能HTML/CSS/JavaScript/PHP编辑.代码质量分析.版本控制集成(SVN.GIT).调试和测试等功 ...
- 【grunt第三弹】grunt在前端实际项目中的应用
前言 [grunt第二弹]30分钟学会使用grunt打包前端代码(02) [grunt第一弹]30分钟学会使用grunt打包前端代码 经过前两次的学习,我们了解了grunt打包的一些基础知识,对于压缩 ...
- iOS Block界面反向传值
在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...
- SharePoint 2013 图文开发系列之定义站点模板
SharePoint站点模板是一个非常好的功能,方便我们开发一类网站,然后在此基础上做二次开发,对于SharePoint的使用,有着举足轻重的作用. 因为篇幅比较长,所以加上目录,方便大家查看: 一. ...
- Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
[声明]由于本人表达能力有限,为避免不必要的误人子弟,本文将不会涉及IOC与DI,仅仅描述新版本Unity 3的使用(非Unity 3D,如果您想看的是Unity 3D请立即离开,否则莫怪此处“谋财害 ...
- 【代码笔记】iOS-推荐收听,左右两个tableView
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- 【代码笔记】iOS-水波效果
一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...
- IOS Emoji表情
IOS Emoji 前言:我比较喜欢有趣的东西,有一些有趣的小东西,可能不是多么多么牛逼,也可能不需要多高深的技巧,也不会为其他什么强大的功能而服务,但是有时候将很多有趣的小东西组合起来运用,比如在你 ...