[数据库操作]Java中的JDBC的使用方法.
前言:
想必大家在实际编码中都遇到过JDBC的操作, 这里仅做自己的一个总结, 有错误和不完整之处还请大家提出来.
1,JDBC其实一套规范(接口)
数据库厂商需要实现此接口(实现类)--数据库驱动
2,jdbc的作用:
可以和数据库创建链接
发送sql语句
接收返回值,处理结果
3,api详解(java.sql或者javaX.sql)
DriverManager 类:
管理一组 JDBC 驱动程序的基本服务。
常用方法:
registerDriver(Driver):注册驱动
查看 mysql的Driver的时候有下面一段代码:

发现在类加载的时候已经注册过驱动,我们以后只需要把Driver加载到内存即可
类.Class
对象.getClass()
Class.forName("全限定名(包名+类名)")
以后开发中我们通过Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.
static Connection getConnection(String url, String user, String password) :获取链接
参数说明:
url:告诉jdbc去连接那个数据库
固定格式: 协议:子协议:子协议名称 参数
mysql: jdbc:mysql ://localhost:3306/databaseName
oracle: jdbc:oracle:thin :@localhost:1521:实例名
user:数据库的登录名
password:数据库的登录密码
Connection 接口:
创建语句执行者:
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");
常用方法:
Statement createStatement():创建Statement -语句执行者
PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象
CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程。
Statement 接口(容易产生sql注入, 后期使用PreparedStatement. 后面会有blog说明这个问题)
sql语句执行者:
Statement st=conn.createStatement();
常用方法:
ResultSet executeQuery(String sql) :执行查询语句,返回一个集合 ☆
int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.☆
boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。
若返回true ,执行是的查询语句
调用 getResultSet 获取查询结果
若返回false,执行的是更新 插入 删除语句
调用 getUpdateCount 获取影响的行数
ResultSet 接口
返回的查询结果:
String sql = "...";
ResultSet rs=st.executeQuery(sql);
常用方法:
boolean next() :判断是否有下一条记录,并且移动到下一行
获取内容:
getXXX(参数)
参数的写法:
1.字段名称 字符串
2.第几列 从1开始
getInt()
getString()
getObject()
4, 实例JDBCUtil类的书写
(1)配置文件 jdbc.properties
drivername=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ddatabaseName
user=root
password=1234
(2)JDBCUtil.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle; public class JDBCUtil {
//ctrl + shift + x 转成大写
//ctrl + shift + y 转成小写
static final String DRIVERNAME;
static final String URL;
static final String USERNAME;
static final String PASSWORD; static{ /*通过ResourceBundle 专门用来加载properties文件
ResourceBundle bundle=ResourceBundle.getBundle("文件名称"); 通过 bundle.getString(键的名字)
String value=bundle.getString("url");
*/ ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
DRIVERNAME=bundle.getString("drivername");
URL=bundle.getString("url");
USERNAME=bundle.getString("user");
PASSWORD=bundle.getString("password");
} static{
try {
Class.forName(DRIVERNAME);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} //获取链接
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(URL,USERNAME,PASSWORD);
} //释放资源
public static void closeResource(Connection conn,Statement st,ResultSet rs){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (st!=null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
} if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} }
}
(3)CRUDDemo, 使用PreparedStatement方式
public class PPCRUDDemo {
public static void main(String[] args) {
//插入
//insert("赵四","123","zhaosi@163.com");
//更新
//updateByName("赵四","尼古拉斯.赵四");
//获取
//getByName("尼古拉斯.赵四");
//删除
deleteByName("尼古拉斯.赵四");
}
private static void deleteByName(String string) {
//模版
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
//获取链接
conn=JDBCUtil.getConnection();
//编写sql
String sql="delete from user where username =?";
//获取预编译执行者
st=conn.prepareStatement(sql);
//设置参数
st.setString(1, string);
//执行sql
int i = st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void getByName(String string) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JDBCUtil.getConnection();
String sql="select * from user where username=? limit 1";
st=conn.prepareStatement(sql);
st.setString(1, string);
rs=st.executeQuery();
if (rs.next()) {
System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void updateByName(String oldName, String newName) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
conn=JDBCUtil.getConnection();
String sql="update user set username = ? where username = ?";
st=conn.prepareStatement(sql);
st.setString(1, newName);
st.setString(2, oldName);
int i=st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
private static void insert(String username, String password, String email) {
Connection conn=null;
PreparedStatement st=null;
ResultSet rs=null;
try {
//获取链接
conn=JDBCUtil.getConnection();
//编写sql
String sql="insert into user values(null,?,?,?)";
//获取预编译语句执行者
st=conn.prepareStatement(sql);
//设置参数
st.setString(1, username);
st.setString(2, password);
st.setString(3, email);
//执行sql
int i=st.executeUpdate();
//处理结果
if (i>0) {
System.out.println("成功");
}else{
System.out.println("失败");
}
} catch (Exception e) {
e.printStackTrace();
}finally{
JDBCUtil.closeResource(conn, st, rs);
}
}
}
这里没有多么高深的东西, 熟能生巧, 暂时总结的就这么多.
[数据库操作]Java中的JDBC的使用方法.的更多相关文章
- 第67节:Java中的JDBC运用
第67节:Java中的JDBC运用 https://www.jianshu.com/p/628a9ba1b205
- Java中的equals和hashCode方法
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
- Java中的equals和hashCode方法详解
Java中的equals和hashCode方法详解 转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...
- 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)
方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold&q ...
- 转:Java中的equals和hashCode方法详解
转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- java中取得用户输入的方法
java中取得用户输入的方法 1.采用java.util.Scanner类 采用Scannerd的next()方法读取,测试代码如下: Scanner sc=new Scanner(System.in ...
- Java 中extends与implements使用方法
Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...
- Java中各种(类、方法、属性)访问修饰符与修饰符的说明
类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...
随机推荐
- sql left join、right join、inner join
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只 ...
- Docx读写Word
Docx.dll功能比较强大,具备以下功能: 创建新的word文档或者读取已有的world文档 替换书签处内容: 插入表格或者在已有表格新增数据行: 插入图片,轻松设置图片大小: 保存或者另存为: 分 ...
- HttpURLConnection 下载文件
String fileUrl = request.getRequestURL().substring(0, request.getRequestURL().indexOf("/rest&qu ...
- C# 命令绑定
在构建WinForm程序中,为了使系统的结构清晰,有好的用户交互体验,实现不同按钮之间的交互,不使主窗体里面的代码臃肿.将按钮的命令通过类进行绑定,实现命令的管理使很有必要的. 该文章是将如何实现Bu ...
- SQL性能优化(Oracle)
首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录, ...
- Oracle 10g -- 修改DB的编码
修改DB的原因是:因为我的DB不支持中文,所以每当我向数据库表中插入一条数据的时候,中文就都变了类似于“?(是反问号)”的乱码,为了能顺利插入成功,故做了此次修改; 系统:windows XP 英文版 ...
- 转发(request.setRequestDispacter)和重定向(response.sendRedirect)的区别以及转发的include和forward的区别
//response 重定向的时候,url是会跳转到新的页面的,输入的地址要包含项目名(可以跳到项目之外的页面,比如百度)//request 请求转发的时候,url是不会跳转到新页面的,输入的地址不包 ...
- SecureCRT自动备份脚本-华为
# $language = "VBScript" # $interface = "1.0" Sub Main Const ForReading = 1, For ...
- php 图片处理类
<?php /** * 图片类 * @author <420012223@qq.cn> */ class Image { public $uploadImagePath = './t ...
- Android学习--摘录
今天准备开始毕业设计--做一个android应用.无奈android基础木有一点,以前做过一个蓝牙应用,不过对android各方面的知识还是不懂啊,今天在android主页上看英文的android开发 ...