前言:
想必大家在实际编码中都遇到过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的使用方法.的更多相关文章

  1. 第67节:Java中的JDBC运用

    第67节:Java中的JDBC运用 https://www.jianshu.com/p/628a9ba1b205

  2. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

  3. Java中的equals和hashCode方法详解

    Java中的equals和hashCode方法详解  转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...

  4. 将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

    方法一:使用Arrays.asList()方法   1 2 String[] asset = {"equity", "stocks", "gold&q ...

  5. 转:Java中的equals和hashCode方法详解

    转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...

  6. 关于java中的hashcode和equals方法原理

    关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...

  7. java中取得用户输入的方法

    java中取得用户输入的方法 1.采用java.util.Scanner类 采用Scannerd的next()方法读取,测试代码如下: Scanner sc=new Scanner(System.in ...

  8. Java 中extends与implements使用方法

    Java 中extends与implements使用方法 标签: javaclassinterfacestring语言c 2011-04-14 14:57 33314人阅读 评论(7) 收藏 举报 分 ...

  9. Java中各种(类、方法、属性)访问修饰符与修饰符的说明

    类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所 ...

随机推荐

  1. Selenium2+python自动化30-引入unittest框架

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...

  2. oracle学习-存储过程返回一个值,和返回一个结果集

    一.返回一个值 --创建存储过程 create or replace procedure sp_hu_test(spcode in varchar2,spname out varchar2)is be ...

  3. Train Problem I hdu 1022(栈)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 题意:给出火车的进站与出站顺序,判断是否可以按照给出的出站顺序出站. #include < ...

  4. 問題排查:F5啟動偵錯後所提示的錯誤 (1)

    原始專案版本:Visual Studio 2005 開發環境:Visual Studio 2013 偵錯運行環境:IIS Express 啟動偵錯後,錯誤提示內容如下: HTTP 错误 500.23 ...

  5. windows server 2008 - 创建域和本机用户

    /* * ===================================================================================== * Filenam ...

  6. 苹果会在明后年推出13寸屏iPad吗?

    摘要:苹果推大屏iPad的传闻由来已久,近日有国外媒体再次撰文称,这种大屏iPad不仅是苹果Mac继任者,同时也是Surface的有利竞争者……这真的可能吗?这只是分析师的捕风捉影,还是真有这种可能? ...

  7. KVC笔记

    利用KVC可以随意修改一个对象的属性或者成员变量(并且私有的也可以修改) 示例代码:  示例一: Person *p = [[Person alloc] init]; p.dog = [[Dog al ...

  8. php错误级别的设置方法

    PHP在运行时, 针对严重程度不同的错误,会给以不同的提示. eg:在$a没声明时,直接相加,值为NULL,相加时当成0来算.但是,却提示NOTICE,即注意. 我们在开发中, 为了程序的规范性,把报 ...

  9. noip2014-day1-t2

    题目描述:无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  10. cach

    为程序使用内存缓存(MemoryCache) oscache Guava cache 一种解决方法是配一个listener,在里面启动定时器. 简单缓存可以封装LinkedHashMap,因为它是有顺 ...